lightdb-etl oracle迁移到lightdb的常见错误及解决方法

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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值