LightDB-ETL迁移工具常用问题排查

发布时间 2023-10-26 17:37:17作者: 竺旭东

1、无法删除约束
根据以下SQL查询oracle目标库,如果约束名称包含小写字母,则迁移工具无法删除,它默认是按照大写处理的。

SELECT ac1.constraint_name,
       DBMS_METADATA.get_ddl('REF_CONSTRAINT', ac1.constraint_name, ac1.owner)
FROM all_constraints ac1
         JOIN all_constraints ac2 ON ac1.r_owner = ac2.owner AND ac1.r_constraint_name = ac2.constraint_name
WHERE ac1.constraint_type = 'R'
  and ac2.owner = UPPER('dbtrade')

SQL中的dbtrade是Oracle用户名称。
此时需要将原来大小写区分的约束删除后,建成大写名称的约束。
比如通过以下SQL完成约束的重建

alter table "DBTRADE"."QRTZ_CRON_TRIGGERS" drop CONSTRAINT "QRTZ_CRON_TRIGGERS_ibfk_1";
ALTER TABLE "DBTRADE"."QRTZ_CRON_TRIGGERS" ADD CONSTRAINT QRTZ_CRON_TRIGGERS_ibfk_1 FOREIGN KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP")
    REFERENCES "DBTRADE"."QRTZ_TRIGGERS" ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP") ENABLE

2、如何迁移单个表
可以通过以下配置支持迁移单个表
etl.global.excludeTableRegexp=^test$

3、如何正确迁移
如果视图依赖其他schema中的表,则必须分两次迁移,迁移的顺序为
第一次完成表和数据的迁移:etl.global.enableFunctions=TransferTable,TransferTableData,TransferIndex,TransferSequence
第二次完成依赖对象的迁移:etl.global.enableFunctions=TransferView,TransferTrigger,TransferPackage,TransferProcedure,TransferFunction

4、如何加快迁移速度
如果被迁移的多个schema之间不存在依赖关系,则可以一次性完成所有数据的迁移。
迁移线程数和单次迁移数据量可动态调整,可以增大以下配置加快迁移速度,但同时会消耗更多的资源

etl.global.batchCount=100000
etl.global.concurrentThreadCount=32

迁移时可以在lightdb连接地址上开启以下参数加快迁移速度
jdbc:postgresql://10.20.30.218:5436/etl?options=-c%20search_path=hr,public,oracle,lt_catalog%20&reWriteBatchedInserts=true