1、迁移模式不存在
没有配置etl.global.transferSchemas=的参数;
修改方法:etl.global.transferSchemas=模式名
2、迁移的表结构number转成bigint
需要下载新版本的统一sql动态库。LightDB下载 (light-pg.com)
把这个对应的动态库传到相应的目录。然后运行jar包时配置java -jar lightdb-etl-23.3.0.0-beta.jar -Dunisql.lib.full-path=/opt/unisql.linux.x86_64.so。
其中Dunisql.lib.full-path=后面的是下载的统一sql动态库的绝对路径。
3、表数据迁移失败
存在关键字:by,comment和method等,需要走sqluldr2.
2. 快速开始 — LightDB-ETL参考手册 v23.3.0.0 文档 (light-pg.com)
需要配置。详细参考文档。
etl.global. keywords=by
etl.global.sqluldr2CmdPrefix=
4、迁移表不成功
①表的列名是函数。无法迁移成功
②表里面自定义exception。lightdb不支持自定义异常,建议删除。
③表有enable,无法迁移成功。目前迁移工具:基于Lightdb23.3版本。升级数据版本。
5、视图迁移不成功
依赖的视图未查到,导致视图迁移失败。
需要在目标库的url后面配置?options=-c%20search_path=迁移模式名,\"$user\",public,oracle,lt_catalog%20&lightdbSyntaxCompatibleType=oracle
6、迁移函数不成功,检查是否兼容模式添加
需要在目标库的url后面配置&lightdbSyntaxCompatibleType=oracle
7、The connection attempt failed.
数据库连接地址不正确。例如Oracle的url有@,lightdb没有@.
8、permission denied to create database
用户的权限不足。没有root权限创建数据库。解决方法增加权限
9、installation error: XSL stylesheets not loaded correctly
dbms_metadata.get_ddl需要调用Oracle dictionary table “sys.metastylesheet.”中的XSL stylesheets,但是由于某种原因,使得调用失败,出现上述错误.因为该错误可能有:
1.XSL stylesheets没有安装
2.数据泵元数据API使用的XSL样式表未正确加载到Oracle字典表“sys.metastylesheet”中,通过以下方式重新加载(sysdba权限用户)即可。
解决方法:执行sql:exec dbms_metadata_util.load_stylesheets;
10、校验:表量对比中断
因为oracle的表名是小写,目前该版本不支持区分大小写。23.4版本和之前版本不支持。
11、删除约束失败:
ORA-02443: 无法删除约束条件 - 不存在的约束条件
因为oracle的约束时小写,oracle默认时大写,且23.3版本的etl不支持大小写区分。约束改成大写。
12.迁移函数失败,在begin前面缺少as
需要配置参数etl.global.plpgSql=true,同时目标库lightdb的url需要加上&lightdbSyntaxCompatibleType=oracle
13、迁移数据失败:主键冲突
例子:Key (report_code, market_no)=(150148, 2) already exists
失败原因:目标库lightdb的表里面已经有该数据。导致插入数据失败。
解决方法:清空目标库的数据。重新迁移。
14、迁移表失败:创建表提示表已经存在,但是查询不到
原因:约束名和表名相同
解决方法:修改约束名
15、迁移表报错:+?等
例子:
因为列名或者约束有特殊字符,导致无法创建成功;
解决方法:①修改约束名,正规约束。
②约束加双引号;
16、全局临时表迁移失败:
因为执行sql语句带schema,23.3版本不支持全局临时表带schema,后续版本支持。
解决方法:手动迁移,去除schema即可。
17、校验发现:数据不一致
①多了一条或者少了几条。因为目标库oracle不是静态的,里面的数据在不断变化。
②lightdb库数据0条,oracle有数据。
可能原因:a. oracle是新加数据。
b.该表有关键字,导致无法迁移成功。解决方法配置sqluldr2。
③oracle有数据,lightdb库也有数据:
可能原因主键冲突,导致插入数据失败。
解决方法:清空目标库,才可以重新迁移。
18、迁移函数和存储过程失败
配置参数etl.global.plpgSql=true。优先建议走false,还有不成功的在配置true。
19、依赖关系失败:
如果视图、函数存在依赖,如视图依赖其他视图、依赖3层以上、依赖函数。需要在迁移视图之前,先迁移函数。
20.存储过程:ERROR: missing ";" at end of SQL statement,syntax error at or near "BEGIN",ERROR: syntax error at or near "temp"
配置参数etl.global.plpgSql=true;
21.存储过程:ERROR: syntax error at or near "AUTHID"
目前lightdb不支持存储过程,加入Authid Current_User进行权限分配。
解决方法:手动迁移执行ddl语句,去除AUTHID CURRENT_USER is
22.存储过程:ERROR: syntax error at or near "PROCEDURE"
目前lightdb不支持存储过程里面定义存储过程。
解决方法:可把内部存储过程拆出来,分开执行。
24.存储过程:ERROR: syntax error at or near "AGGREGATE"
目前lightdb不支持AGGREGATE,但是可以通过手动修改sql语句来执行。以下是一个例子的修改:
CREATE OR REPLACE FUNCTION HYS_SYS.WM_CONCAT (
P1 VARCHAR2
)
RETURN VARCHAR2
AGGREGATE
USING WM_CONCAT_IMPL;
修改:create or replace function HYS_SYS.sf_concat(text,text) returns text as
$$
select case when $1 is not null then $1||','||$2 else $2 end;
$$
language sql called on null input;
create AGGREGATE HYS_SYS.WM_CONCAT (text) (sfunc=HYS_SYS.sf_concat,stype=text);
25.迁移包失败
①TYPE t_cursor IS REF CURSOR;需要转换成类型创建:create domain HSTYPE.t_cursor REFCURSOR.
②类型的需要正常转为创建类型的语句,如
create type PKG_YYGL.yygl_yhls_rec as(
l_ztbh number(12),
d_ywrq date,
vc_zjzh varchar2(40),
en_je number(19,8),
l_sfbz number(2),
l_type number(2),
l_clbz number(2)
);
26.手动迁移类型:
①去除OR REPLACE;
②不支持force,删除;
③as table of 类型名。需要增加模式名。
④不支持关键字static,先修改成member。
CREATE TYPE BODY AGG_BITOR_TYPE
as
member function ODCIAggregateInitialize(sctx IN OUT agg_bitor_type) return number
is
begin
sctx := agg_bitor_type( 1 );
return ODCIConst.Success;
end;
end;
27.迁移存储过程:must be owner of function sp_addrec_ cnrfrschd
因为迁移的存储过程已经在其他地方存在,我们再次迁移会报不同的用户情况。所以在迁移之前需要对其进行迁库。
28.sqluldr2使用失败
①此程序赋予可执行权限;chmod +x sqluldr2_linux64_10204.bin
②sqluldr依赖oracle环境变量,所有需要环境变量或使用oracle用户。
③配置user的用户名和密码尽量不使用system/oracle,否则无法启用。
29.索引不一致
①跨模式索引存放位置不同:
create index cf.ctx on cf1.t1(vc_code);
这个索引,在lightdb里面是放在cf1下面。在oracle是放在cf下面。
②Oracle建表时,primary key未设置名字,Oracle会自动创建SYS开头的UNIQUE INDEX。这个建表语句在LightDB_Oracle里执行时,LIghtDB会为primary key 自动创建额外的索引,格式:表名+"_pkey",举例:trisktrustbillapply_pkey。