非常奇怪的情况。我使用简单的复制模式。 源表 1857428 行,在 Oracle 中复制后目标表 3132400 行。
{
"$schema": "/etc/clickhouse-jdbc-bridge/config/datasource.jschema",
"ora": {
"driverUrls": [
"/u01/drivers/ojdbc8-19.3.0.0.jar"
],
"connectionTestQuery": "select 1 from dual",
"driverClassName": "oracle.jdbc.driver.OracleDriver",
"jdbcUrl": "jdbc:oracle:thin:@//1.2.3.4:1521/nsser",
"username": "usr",
"password": "pwd",
"maximumPoolSize": 20,
"MaxLifetime": 720000
}
}
在 clickhouse 中我有桌子:
CREATE TABLE mac.ch_cfc_str
(
id_contract Int64,
lot_id Int64,
doc_num FixedString(19),--String,
customer Int64,
sign_date DateTime,
sign_number FixedString(100),--String,
version Int64,
type_info Int64,
date_cache Int64,
datecalc_cache Int64
)
ENGINE = MergeTree
ORDER BY (datecalc_cache, date_cache, type_info) ---- м.б. doc_num сюда
SETTINGS index_granularity = 8192;
With data:
1 857 428 rows.
select sum(1) from mac.ch_cfc_str;
CREATE TABLE mac.ora_cfc(
sign_date DateTime,
sign_number String,
doc_num String,
datecalc_cache Decimal(10,4),
date_cache Decimal(10,4),
type_info Decimal(10,4),
version Decimal(10,4)
)
ENGINE JDBC('ora','mac','ora_cfc');
在oracle表中
create table mac.ora_cfc
(
sign_date date not null,
sign_number varchar2(256) not null,
doc_num varchar2(256) not null,
datecalc_cache number not null,
date_cache number not null,
type_info number not null,
version number not null
);
复制通过在 clickhouse 中进行调用
insert into mac.ora_cfc(sign_date,sign_number,doc_num,datecalc_cache,date_cache,type_info,version)
select sign_date,sign_number,doc_num,datecalc_cache,date_cache,type_info,version
from mac.ch_cfc_str
20-30 秒后复制完成,在 oracle 表中我看到 3132400 行
select sum(1) from mac.ora_cfc;
这很奇怪,我确定我是这个表的单一用户。 有时复制冻结或不开始,有时复制部分行。
有时会出现错误:
ORA-01400: cannot insert NULL into ("mac"."ora_cfc"."DOC_NUM")
ORA-01461: can bind a LONG value only for insert into a LONG column
HTTP status code: 500 Internal Server Error, body: Invalid LEB128 sequence.
HTTP status code: 500 Internal Server Error, body: index: 173050309, length: 136620051
我知道如果我删除两个字符串字段然后复制成功或者当我只保留字符串列时。
请帮忙。
DOC_NUM 被定义为非空,因此出现错误 ORA-01400: 无法将 NULL 插入 ("mac"."ora_cfc"."DOC_NUM")
ORA-01461:只能绑定 LONG 值以插入 LONG 列,当您尝试将 LONG 数据类型值插入或更新到未定义为 LONG 的列时发生
源中的版本字段是十进制,Oracle 中的版本字段是数字。
检查源上的任何小数字段是否为空,并且您尝试插入不为空的 Oracle 数字字段