当前位置:网站首页>金仓数据库 KDTS 迁移工具使用指南 (6. 注意事项)
金仓数据库 KDTS 迁移工具使用指南 (6. 注意事项)
2022-08-04 07:22:00 【沉舟侧畔千帆过_】
6. 注意事项
6.1. BS版
源端数据库类型为MySQL5.1版本时,数据库版本选择5.5
Kingbase数据库采用Unix Domain Socket方式进行连接时,必须确保数据库服务与迁移工具程序在同一台Linux服务器上.
6.2. SHELL版
6.2.1. 迁移顺序
由于对象之间存在依赖关系,可按“1、序列;2、表结构、表数据、主键约束、索引、唯一性约束;3、外键约束;4、检查约束、视图、函数、存储过程、包;5、同义词;6、触发器;7、注释”这样的顺序进行迁移。
6.2.2. 大表拆分
为了最大化迁移数据的效率,迁移工具按表中的数据行数和大对象大小对表进行了排序,并对达到拆分阈值的大表进行了拆分(拆分操作仅读取表数据记录标识,不影响数据),然后按分块并行读取,这些操作依赖于数据库统计信息并需要对拆分操作进行授权,如果条件允许,可在迁移前对源数据库做数据统计分析和拆分授权。
注意:
该机制仅针对Oracle和达梦数据库,其它数据库需手动拆分。
对表的排序和拆分不影响迁移的结果,只影响效率。
6.2.3. 并行计算
6.2.3.1. SqlServer
SQL Server 2016或更高版本支持设置Max Degree of Parallellism(最大并行度配置),可使用如下命令来查看:
exec sp_configure;
注意:建议该参数的值设置为0(由数据库自动管理)或一个大于0的值(由数据库专家给定)。
exec sp_configure 'max degree of parallelism', 0; go reconfigure with override; go
6.2.3.2. 达梦数据库(DM8)
可开启并行查询来提高查询效率,详见数据库的PARALLEL_POLICY、PARALLEL_THRD_NUM 、MAX_PARALLEL_DEGREE等配置参数。
保证数据库的DBMS_STATS.GATHER_SCHEMA_STATS可用,若报错"错误的包或类名或当前环境不支持 [DBMS_STATS]",说明该包未启用。可以通过达梦管理工具-->工具包-->SYSTEM PACKAGE-->右键-->点击启用,开启服务。
6.2.4. 集群异步模式
目标库为集群模式时可将主从库的同步模式调整为异步,在主库数据迁移完成后等待从库追平后再恢复为同步模式。
6.2.5. 大对象数据(LOB,Large Object)
如果要迁移的表中有大对象数据字段(BLOB、BFILE、CLOB、NCLOB等)时,应先评估大对象数据的大小,如果单行数据的大小达到100M以上,为了避免内存溢出(Out Of Memory)导致迁移失败,应控制Java虚拟机内存的合理使用:
条件允许可增大内存,详见: bin/startup.sh和startup.bat中JAVA_OPT里的“-Xms和-Xms”参数项
控制大对象表的读/写并发度,确保读入内存的大对象数据在合理的范围,相关的参数有:
conf/kdts-xxx.yml
#源数据库含大对象数据表的游标读取记录数(同上,只是此参数针对有大对象字段的表) table-with-large-object-fetch-size: 5 #源数据库含大大对象数据表的游标读取记录数(同上,只是此参数针对大对象字段长度超过1G的表) table-with-big-large-object-fetch-size: 5 #大表拆分阈值行数(当表的行数超过此值时,将对表进行拆分,每块的记录数为此值和表总记录数除以“拆分最大块数”中的最大值) large-table-split-threshold-rows: 5000000 #大表拆分阈值大小(单位为M)(当表的数据大小(普通字段+大对象字段)超过此值时,将对表进行拆分) large-table-split-threshold-size: 5000 #大表拆分最大块数(每张表的最大拆分块数,应不超过总的读线程数) large-table-split-max-chunk-num: 5
conf/kb-thread-config.xml
<!-- 大对象数据(Clob和Blob)写线程池 --> <pool name="writeLargeObject"> <corePoolSize>5</corePoolSize><!-- 可根据源库表中大对象数据来设置,如果单条数据较大,可适当降低线程数,以避免内存不足 --> <maxPoolSize>5</maxPoolSize><!-- 和corePoolSize一致 --> <keepAliveTime>300</keepAliveTime><!-- 保持不变 --> <workQueueSize>5</workQueueSize><!-- 和maxPoolSize一致 --> </pool>
应满足: (table-with-large-object-fetch-size + large-table-split-max-chunk-num + writeLargeObject.maxPoolSize + writeLargeObject.workQueueSize)×每行大数据大小 <= Java虚拟机内存×0.9
6.2.6. 网络抖动
在数据迁移的过程中可能会出现抖动、丢包等网络异常 ,它们除了会引发网络读写错误,还可能导致连接假死,卡住迁移程序(在日志的Running Jobs会显示read/write已明显用时超长的任务),遇到这种情况可设置合适的“网络读取超时”参数值,通过主动超时来中断网络连接以避免长时间的等待。注意,由于此参数会因超时中断连接从而导致长耗时的数据库操作(如创建大索引)失败,需谨慎设置(须大于最耗时的时长)!若出现类似“Socket read timed out”异常时,可增大此值。建议:
(1)将表结构、主键、外键、约束等和数据分开迁移,在迁移表数据时设置较短的“网络读取超时”,而迁移其它对象可以设置较长的值甚至关闭(值设为0或者去掉该参数)。
(2)尽量保证迁移程序和源库之间的连接可靠,这样能取得较稳定的数据,而在往目标库写的时候可以做多次的失败尝试。 以下是常见数据库的设置示例:(kdts-xxx.yml中的源/目标数据库连接信息中url参数)
1、KES单位为秒,示例:url: jdbc:kingbase8://localhost:54321/db1?socketTimeout=900
2、Oracle单位为秒,不支持url传入,需配置kdts-xxx.yml中的net-read-timeout(网络读取超时)
3、MySQL单位为毫秒,示例:url=jdbc:mysql://localhost:3306/db1?socketTimeout=900000
4、SQLServer单位为秒,示例:url=jdbc:sqlserver://localhost:1433;DatabaseName=db1;socketTimeout=900
5、PostgreSQL单位为秒,示例:url=jdbc:postgresql://localhost:5432/db1?socketTimeout=900
6、DM(达梦)单位为毫秒,示例:url=jdbc:dm://192.168.1.116:5236?socketTimeout=900000
6.2.7. 无日志表
无日志表不记录日志,可大大提高数据写入的效率,在需要时可设置以无日志表的方式进行迁移,相关参数如下:
#连接字符串,其中“ApplicationName=kingbase_transfer”指示数据库服务器使用无日志表 url: jdbc:kingbase8://1.2.3.4:54321/test?ApplicationName=kingbase_transfer #V8R3和V8R6使用 #是否使用无日志表 unlogged-table: true #是否将无日志表重改为有日志表 relogged-table: true #是否执行检查点 issue-checkpoint: true
6.2.8. 国际化
如果程序中的文字与预期的不一致,可在启动脚本中设置国际化参数:
kdts-plus/bin/startup.sh(删除行首的#可去掉注释)
#JAVA_OPT="${JAVA_OPT} -Duser.country=CN -Duser.language=zh"
kdts-plus/bin/startup.bat(删除行首的rem可去掉注释)
rem set "JAVA_OPT=%JAVA_OPT% -Duser.country=CN -Duser.language=zh"
边栏推荐
猜你喜欢
IntelliJ新建一个类或者包的快捷键是什么?
LeetCode 135. 分发糖果
Lightweight Backbone VGNetG Achieves "No Choice, All" Lightweight Backbone Network
Cross-species regulatory sequence activity prediction
fanuc机器人IO分配报警信号分配无效
C语言实现-华为太空人手表
likeshop外卖点餐系统【100%开源无加密】
GIS数据与CAD数据间带属性字段互相转换还原工具,解决ArcGIS等软件进行GIS数据转CAD数据无法保留属性字段问题
两日总结四
dalle:zero-shot text-to-image generation
随机推荐
解决:Hbuilder工具点击发行打包,一直报尚未完成社区身份验证,请点击链接xxxxx,项目xxx发布H5失败的错误。
MMDetection finetune
likeshop外卖点餐系统【100%开源无加密】
powershell和cmd对比
redis stream 实现消息队列
25.时间序列预测实战
dalle:zero-shot text-to-image generation
解决循环依赖import cycle not allowed的最佳解决办法
The national vocational skills contest competition of network security emergency response
unity2D横版游戏教程7-敌人AI死亡效果
安装GBase 8c数据库的时候,报错显示“Resource:gbase8c already in use”,这怎么处理呢?
24.循环神经网络RNN
FCN - the originator of semantic segmentation (based on tf-Kersa reproduction code)
TCP协议详解
将回调函数转为Flow
entity、domain、vo、pojo的区别与联系
给Unity Behavior Designer(Unity行为树) 的Can See Object 画圆锥辅助图
DropBlock: Regularization method and reproduction code for convolutional layers
leetcode 22.8.1 二进制加法
通过GBase 8c Platform安装数据库集群时报错