我想在数据库中执行一些测试,方法是删除某些表的内容,然后在测试完成后恢复它们以前的内容。
但问题是这些表有一些加密的数据,这些数据有各种奇怪的符号,例如,当在 SQLdeveloper 中作为插入导出时,数据库中某个字段的部分数据看起来像这样:
r?¶ï?büÔä?k+ð
基本上,各种不常见的字符。
我担心如果我在执行测试后进行插入语句,数据会被插入损坏,所以,在继续之前,我想先问一下。
旧服务器是 MariaDB 10.6 新服务器是 MariaDB 10.3
我 mysqldump 仍然是主副本并正常运行的旧数据库。
我确保在 cnf 文件中使用这个新的服务器数据库设置为 InnoDB(就像旧的一样):
[mysqld]
innodb_buffer_pool_size=1G
然后使用全新的 maria DB(请注意 10.3),我会:
结果是:
ERROR 1071 (42000) at line 266: Specified key was too long; max key length is 1000 bytes
我在上面链接的 stackoverflow 帖子谈到了 VARCHAR 都是 255 并且导致了这个问题。然而,最大的问题是我不知道我将如何解决这个问题。使用数据库的人甚至不在我的部门,我只是想把东西移到新的服务器上。
create database my_db character set utf8 collate utf8_bin;
在导入之前我也尝试过,但同样的问题。
如果旧数据库仍然可以正常工作并且我们的副本似乎仍在完美复制,那么我在这里是否缺少一些东西可以让我导入转储并避免此错误?
我有一组 12 个表,总共大约 400 万行,我每年需要移动四次。他们来自的数据库服务器不能直接与他们移动到的服务器通信。数据必须通过 SFTP 文件传输。
这 12 个表已存在于目标数据库中,但可以根据需要删除或截断。在传输过程中,目标数据库将处于“实时”使用状态。
在一个理想的世界中,我希望在源服务器上执行一些脚本,将所有数据放入一个平面文件中,并在目标服务器上执行另一个脚本,从平面文件中加载表。
到目前为止我看到的选项:
使用导入/导出数据向导导出为 CSV(虽然我不确定源数据中是否有逗号会导致问题)。我不喜欢随着时间的推移发生错误是多么容易,例如导入错误的表。
编写 powershell 来导出数据(再次是 CSV 文件,我喜欢二进制文件,我不必担心解析问题)。
将数据库备份并还原到服务器上,然后复制所需的表。这将需要复制约 100gb 的备份。这会很慢,但会起作用。
必须有一些工具来完成这种工作!
@JD -为什么是 SFTP?将数据带入此网络的唯一获准方法是 SFTP。关键的公共安全系统,因此它们相当挑剔。 还有其他表吗?是的,这只是众多表中的 12 个,整个数据库大约为 100GB。
创建一个表:
CREATE TABLE num (
id serial NOT NULL ,
adsh VARCHAR(20) NOT NULL,
tag VARCHAR(256) NOT NULL,
version VARCHAR(20) NOT NULL,
coreg VARCHAR(256),
ddate date NOT NULL,
qtrs DECIMAL(8) NOT NULL,
uom VARCHAR(20),
value DECIMAL(28,4),
footnote VARCHAR(512)
);
我想将sample.txt
数据导入num
表中:
adsh tag version coreg ddate qtrs uom value footnote
0001213900-20-033598 DueToAsiyaCommunicationsSapiDeC.v.Current 0001213900-20-033598 20191231 0 USD
0001213900-20-033598 DueToDinarZuzLLC 0001213900-20-033598 20200630 0 USD 178000.0000 Due to the April 6, 2020 180 days Loan Agreement with the Company to borrow up to $250 at an annual interest rate of nine percent (9.0%) ("the second "Dinar Zuz Note").
0001213900-20-033598 DueToNextCalaCurrent 0001213900-20-033598 20181231 0 USD -14000.0000
0001213900-20-033598 DueToNextCalaCurrent 0001213900-20-033598 20191231 0 USD
将数据sample.txt
导入表中的命令:
COPY num(adsh,tag,version,coreg,ddate,qtrs,uom,value,footnote)
FROM 'sample.txt'
DELIMITER E'\t'
CSV HEADER;
它遇到一个错误:
ERROR: unterminated CSV quoted field
CONTEXT: COPY num, line 6: "0001213900-20-033598 DueToDinarZuzLLC 0001213900-20-033598 20200630 0 USD 178000.0000 Due to the Ap..."
请在不编辑原始数据的情况下修复它。
在我完成所有步骤(选择文件、为我的列设置数据类型等)之后,有没有办法查看和复制“将平面文件导入 SQL”向导最终使用的代码?
在使用“将平面文件导入 SQL”向导时,我发现必须为每列单独选择一种数据类型很麻烦。我的数据有大量列要更改。将来,我宁愿通过 SQL 代码来执行此操作以节省时间。我正在学习 Microsoft SQL Server Studio,目前只知道如何使用导入平面文件向导,因此我需要学习以另一种方式进行操作的所有步骤。
版本:18.7.1
我有一长串.csv
文件,我想将它们导入本地数据库。DATE
我相信我的查询是正确的,但是在解析和TIMESTAMP
列方面存在一些问题。PostgreSQL 读取这些列时需要 ISO 格式“yyyy/mm/dd”,但我的数据有另一种格式:“dd/mm/yyyy”。
我在网上和其他 Stack Overflow 上阅读SET
了datestyle
可以有所不同的答案,但不建议这样做。
有没有办法指定要导入的列的格式?另外,我不需要从 csv 文件中导入所有列:我可以省略一些吗?
首先,我编写了创建表的代码(如果列名是意大利语,很抱歉,但这并不重要):
CREATE TABLE IF NOT EXISTS bikes (
bici INT,
tipo_bici VARCHAR(20),
cliente_anonimizzato INT,
data_riferimento_prelievo DATE,
data_prelievo TIMESTAMP,
numero_stazione_prelievo INT,
nome_stazione_prelievo TEXT,
slot_prelievo SMALLINT,
data_riferimento_restituzione DATE,
data_restituzione TIMESTAMP,
numero_stazione_restituzione INT,
nome_stazione_restituzione TEXT,
slot_restituzione SMALLINT,
durata VARCHAR(10),
distanza_totale REAL,
co2_evitata REAL,
calorie_consumate REAL,
penalità CHAR(2)
);
然后我添加查询以将数据复制到表中:
COPY bikes(
bici,
tipo_bici,
cliente_anonimizzato,
data_riferimento_prelievo,
data_prelievo,
numero_stazione_prelievo,
nome_stazione_prelievo,
slot_prelievo,
data_riferimento_restituzione,
data_restituzione,
numero_stazione_restituzione,
nome_stazione_restituzione,
slot_restituzione,
durata,
distanza_totale,
co2_evitata,
calorie_consumate,
penalità
)
FROM '/Users/luca/tesi/data/2019q3.csv'
DELIMITER ','
CSV HEADER;
代码看起来不错,除了弹出以下错误:
ERROR: date/time field value out of range: "31/07/2019"
HINT: Perhaps you need a different "datestyle" setting.
CONTEXT: COPY bikes, line 25296, column data_riferimento_restituzione: "31/07/2019"
SQL state: 22008
如何CREATE TABLE
在代码部分中指定要解析的格式?另外,我实际上并不需要这个 csv 的所有 cols,我该如何将它们排除在外?我试图只指定我需要的那些,但我得到一个导入错误:
ERROR: extra data after last expected column
我一直在测试从 12c 到 19c(新创建的数据库)的数据库的 expdp/impdp,但是一个数据库让我遇到了这个错误:
nohup impdp system/****@CKLPROD CONTENT=METADATA_ONLY PARALLEL=4 DIRECTORY=DATA_PUMP_DIR DUMPFILE=EXP_CKLPROD_20210317_B419C.DMP LOGFILE=IMP_CKLPROD_20210317_B419C_META.log > IMP_CKLPROD_20210317_B419C_META.out &
> Processing object type
> DATABASE_EXPORT/SCHEMA/PROCEDURE/ALTER_PROCEDURE ORA-39014: One or
> more workers have prematurely exited. ORA-39029: worker 1 with process
> name "DW00" prematurely terminated ORA-39014: One or more workers have
> prematurely exited. ORA-39029: worker 2 with process name "DW00"
> prematurely terminated Job "SYSTEM"."SYS_IMPORT_SCHEMA_02" stopped due
> to fatal error at Wed Mar 17 14:04:14 2021 elapsed 0 00:18:42
警报日志有以下 ORA 错误:
Line 122: ORA-00800: soft external error, arguments: [Set Priority Failed], [VKTM], [Check traces and OS configuration], [Check Oracle document and MOS notes], []
Line 355: ORA-00800: soft external error, arguments: [Set Priority Failed], [VKTM], [Check traces and OS configuration], [Check Oracle document and MOS notes], []
Line 508: ORA-1109 signalled during: ALTER DATABASE CLOSE NORMAL...
Line 639: ORA-00800: soft external error, arguments: [Set Priority Failed], [VKTM], [Check traces and OS configuration], [Check Oracle document and MOS notes], []
Line 781: ORA-00313: open failed for members of log group 1 of thread 1
Line 784: ORA-00313: open failed for members of log group 1 of thread 1
Line 788: ORA-00313: open failed for members of log group 2 of thread 1
Line 791: ORA-00313: open failed for members of log group 2 of thread 1
Line 795: ORA-00313: open failed for members of log group 3 of thread 1
Line 798: ORA-00313: open failed for members of log group 3 of thread 1
Line 803: ORA-00313: open failed for members of log group 1 of thread 1
Line 806: ORA-00313: open failed for members of log group 1 of thread 1
Line 810: ORA-00313: open failed for members of log group 2 of thread 1
Line 813: ORA-00313: open failed for members of log group 2 of thread 1
Line 817: ORA-00313: open failed for members of log group 3 of thread 1
Line 820: ORA-00313: open failed for members of log group 3 of thread 1
Line 2208: ORA-00800: soft external error, arguments: [Set Priority Failed], [VKTM], [Check traces and OS configuration], [Check Oracle document and MOS notes], []
Line 3062: ORA-00800: soft external error, arguments: [Set Priority Failed], [VKTM], [Check traces and OS configuration], [Check Oracle document and MOS notes], []
Line 3900: ORA-00800: soft external error, arguments: [Set Priority Failed], [VKTM], [Check traces and OS configuration], [Check Oracle document and MOS notes], []
Line 4733: ORA-00800: soft external error, arguments: [Set Priority Failed], [VKTM], [Check traces and OS configuration], [Check Oracle document and MOS notes], []
Line 5055: ORA-00800: soft external error, arguments: [Set Priority Failed], [VKTM], [Check traces and OS configuration], [Check Oracle document and MOS notes], []
Line 5834: ORA-07445: exception encountered: core dump [ph2csql_idndef_to_diana()+39] [SIGSEGV] [ADDR:0x0] [PC:0x55CDCD7] [SI_KERNEL(general_protection)] []
Line 5853: ORA-07445: exception encountered: core dump [ph2csql_idndef_to_diana()+39] [SIGSEGV] [ADDR:0x0] [PC:0x55CDCD7] [SI_KERNEL(general_protection)] []
使用 SQL Server Management Studio 18.3 我想导入数据(分号分隔的文本文件),其中一些列以点作为小数分隔符,一些以逗号作为小数分隔符。我找不到动态导入这两种类型的选项,迫使我为其中任何一种选择 nvarchar,然后对其进行转换。显然,首先更改语言环境也无济于事。(我觉得很奇怪,导入向导不与语言环境无关。)您如何最好地解决这个问题?
我正在尝试导入某人发送给我的数据库:testdb.tar(43GB 大小)首先我使用以下方法导入:
pg_restore --host localhost --port 5432 --username postgres --dbname testdb --role postgres --no-password --verbose testdb.tar
花了23个小时才完成。我想它只使用了一个核心。现在,尝试使用可用的 16 个内核更快地完成它,我尝试了:
pg_restore --host localhost --port 5432 --username postgres --dbname testdb --role postgres --no-password -j 16 --verbose testdb.tar
但是,它会引发以下错误:
pg_restore: error: parallel restore is not supported with this archive file format
不太清楚它为什么抱怨。