3.SHELL版使用说明

一、配置

1、源库类型

​ 数据迁移支持多种源数据库,为了防止相互之间的干扰,按不同的源数据库类型生成了独立的配置文件,所以我们需要知道当前激活的配置。

#利用find命令查找application.yml文件,将"active"的值设置当前激活的源数据库类型(sping->profiles->active)
[root@node1 ~]# find /KingbaseES/V9/ -name 
"application.yml" /KingbaseES/V9/ClientTools/guitools/KDts/KDTS-CLI/conf/application.yml
	active: oracle # 准备迁移的数据库,如 dm(达梦)、gbase、kingbase、mysql、oracle 等,具体的配置在 kdts-数据库名.yml文件中

2、运行模式

​ 迁移工具除了进行数据迁移还可以进行源库和目标库的数据对比,可根据需要切换运行模式。打开/KingbaseES/V9/ClientTools/guitools/KDts/KDTS-CLI/conf/application.yml文件,去"runningmode"前的#号后设置要运行的模式:

#默认开启的。看自己的实际情况。
runningMode: DataMigration

3、源数据库

3.1 源库连接设置

[kingbase@node1 conf]$ cat datasource-oracle.yml 
########################源数据库连接信息########################
sources:
  #源数据库类型
  - dbType: Oracle
    #源数据库版本(9i,10g,11g,12c,19c)
    dbVersion: 11g
    #连接字符串,格式为:jdbc:oracle:thin:@//<host>:<port>/<SERVICE_NAME>
    #url: jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=1.2.3.4)(PORT=2484))(CONNECT_DATA= (SERVER = DEDICATED)(SERVICE_NAME=orcl))) #SSL使用
    url: jdbc:oracle:thin:@//1.2.3.4:1521/ORCL
    #驱动类名
    driverClassName: oracle.jdbc.OracleDriver
    #用户名(大写)
    username: USERNAME1
    #用户名是否使用密文(使用bin/cryptotool.sh或cryptotool.bat生成)
    ciphertextUsername: false
    #密码
    password: 123456
    #密码是否使用密文(使用bin/cryptotool.sh或cryptotool.bat生成)
    ciphertextPassword: false
    #数据库连接验证SQL
    connectionTestSql: select 1 from dual

Mariadb与MySQL相同

在这里插入图片描述

	配置“连接字符串”时需要考虑数据库的初始化字符集等因素,例如当 MySQL 数据库的字符集是 GBK 或
GB2312 时,应在 url 中添加“useUnicode=true&characterEncoding=utf-8”。

3.2 包含或排查的模式

    #要迁移的模式(大写),多个模式用英文逗号隔开,如:A,B,C(不要回车换行),也可填入"*"(需要双引号,将迁移源库中此用户所能访问的所有模式)
    #schemas: SCHEMA1,SCHEMA2,SCHEMA3
    #schemas: "*"
    schemas: SCHEMA1
    #不迁移的模式,多个模式用英文逗号隔开,如:A,B,C(不要回车换行)
    schemaExcludes: SYS,SYSTEM,MGMT_VIEW,DBSNMP,SYSMAN,OUTLN,FLOWS_FILES,MDSYS,ORDSYS,EXFSYS,WMSYS,APPQOSSYS,APEX_030200,OWBSYS_AUDIT,ORDDATA,CTXSYS,ANONYMOUS,XDB,ORDPLUGINS,OWBSYS,SI_INFORMTN_SCHEMA,OLAPSYS,SCOTT,ORACLE_OCM,XS$NULL,BI,PM,MDDATA,IX,SH,DIP,OE,APEX_PUBLIC_USER,HR,SPATIAL_CSW_ADMIN_USR,SPATIAL_WFS_ADMIN_USR

3.3 大表拆分设置

    #游标提取记录数(每次和服务器交互提取的数据行数,加大该值可提升读取效率,但会增加内存开销(一次将指定数量的数据取回放在缓存中))
    fetchSize: 1000
    #含大对象数据表的游标提取记录数(同上,只是此参数针对有大对象字段的表)
    tableWithLargeObjectFetchSize: 100
    #含大大对象数据表的游标提取记录数(同上,只是此参数针对大对象字段长度超过1G的表)
    tableWithBigLargeObjectFetchSize: 5
    #大表拆分阈值行数(当表的行数超过此值时,将对表进行拆分,每块的记录数为此值和表总记录数除以“拆分最大块数”中的最大值)
    largeTableSplitThresholdRows: 5000000
    #大表拆分阈值大小(单位为M)(当表的数据大小(普通字段+大对象字段)超过此值时,将对表进行拆分)
    largeTableSplitThresholdSize: 5000
    #大表拆分阈值块数(当表的块数超过此值时,将对表进行拆分,分块数为表总块数除以此值和拆分最大块数取小)
    largeTableSplitThresholdBlocks: 0
    #大表拆分最大块数(每张表的最大拆分块数,应不超过总的读线程数)
    largeTableSplitMaxChunkNum: 24
    #大表拆分条件定义文件(优先于按行数和大小拆分)
    largeTableSplitConditionFile: large-table-split-condition.json

3.4 表过滤设置

    #表数据过滤条件定义文件
    tableDataFilterConditionFile: table-data-filter-condition.json

3.5 包含或排查的对象

    #注意:在下面使用英文逗号隔开的配置项中,如果对象名称中包含!@#$%^&*(_+}{]|\\'g;:?/,<等特殊字符时可使用双引号,但双引号需加斜杠转义,如\"Schema1\".\"Table!@#$%^&*(_+}{]|\\,<ABC\"
    #只迁移的表,多个表用英文逗号隔开,如:A,B,Schema1.C,D(不要回车换行,可指定模式名),也可创建conf/table-includes.txt文件后在文件中配置(文件优先)
    tableIncludes:
    #不迁移的表,多个表用英文逗号隔开,如:A,B,Schema1.C,D(不要回车换行,可指定模式名),也可创建conf/table-excludes.txt文件后在文件中配置(文件优先)
    tableExcludes:
    #表优先列表
    tablePriorityList:
    #只迁移的字段,多个字段用英文逗号隔开,如:A,B,Table1.C,Schema1.Table1.D(不要回车换行,可指定表名、模式名),也可创建conf/column-includes.txt文件后在文件中配置(文件优先)
    columnIncludes:
    #不迁移的字段,多个字段用英文逗号隔开,如:A,B,Table1.C,Schema1.Table1.D(不要回车换行,可指定表名、模式名),也可创建conf/column-excludes.txt文件后在文件中配置(文件优先)
    columnExcludes:
    #只迁移的视图,多个视图用英文逗号隔开,如:A,B,Schema1.C,D(不要回车换行,可指定模式名),也可创建conf/view-includes.txt文件后在文件中配置(文件优先)
    viewIncludes:
    #不迁移的视图,多个视图用英文逗号隔开,如:A,B,Schema1.C,D(不要回车换行,可指定模式名),也可创建conf/view-excludes.txt文件后在文件中配置(文件优先)
    viewExcludes:
    #只迁移的函数,多个函数用英文逗号隔开,如:A,B,Schema1.C,D(不要回车换行,可指定模式名),也可创建conf/function-includes.txt文件后在文件中配置(文件优先)
    functionIncludes:
    #不迁移的函数,多个函数用英文逗号隔开,如:A,B,Schema1.C,D(不要回车换行,可指定模式名),也可创建conf/function-excludes.txt文件后在文件中配置(文件优先)
    functionExcludes:
    #只迁移的存储过程,多个存储过程用英文逗号隔开,如:A,B,Schema1.C,D(不要回车换行,可指定模式名),也可创建conf/procedure-includes.txt文件后在文件中配置(文件优先)
    procedureIncludes:
    #不迁移的存储过程,多个存储过程用英文逗号隔开,如:A,B,Schema1.C,D(不要回车换行,可指定模式名),也可创建conf/procedure-excludes.txt文件后在文件中配置(文件优先)
    procedureExcludes:
    #只迁移的包,多个包用英文逗号隔开,如:A,B,Schema1.C,D(不要回车换行,可指定模式名),也可创建conf/package-includes.txt文件后在文件中配置(文件优先)
    packageIncludes:
    #不迁移的包,多个包用英文逗号隔开,如:A,B,Schema1.C,D(不要回车换行,可指定模式名),也可创建conf/package-excludes.txt文件后在文件中配置(文件优先)
    packageExcludes:
    #只迁移的序列,多个序列用英文逗号隔开,如:A,B,Schema1.C,D(不要回车换行,可指定模式名),也可创建conf/sequence-includes.txt文件后在文件中配置(文件优先)
    sequenceIncludes:
    #不迁移的序列,多个序列用英文逗号隔开,如:A,B,Schema1.C,D(不要回车换行,可指定模式名),也可创建conf/sequence-excludes.txt文件后在文件中配置(文件优先)
    sequenceExcludes:
    #只迁移的同义词,多个同义词用英文逗号隔开,如:A,B,Schema1.C,D(不要回车换行,可指定模式名),也可创建conf/synonym-includes.txt文件后在文件中配置(文件优先)
    synonymIncludes:
    #不迁移的同义词,多个同义词用英文逗号隔开,如:A,B,Schema1.C,D(不要回车换行,可指定模式名),也可创建conf/synonym-excludes.txt文件后在文件中配置(文件优先)
    synonymExcludes:

3.6 要迁移的对象类别

    #是否迁移序列
    migrateSequence: true
    #序列是否使用CurrVal做当前值(调用CurrVal前需要调用NextVal,会耗费一个序列值)
    sequenceUseCurrentValue: true
    #序列仅更新值(不创建)
    sequenceOnlyUpdatingValue: false
    #是否迁移用户自定义类型
    migrateUserDefinedType: true
    #是否迁移用户自定义类型
    migrateUserDefinedTypeBody: true
    #是否迁移表结构
    migrateTableStructure: true
    #是否迁移数据
    migrateTableData: true
    #是否迁移主键
    migrateTablePrimaryKey: true
    #是否迁移索引
    migrateTableIndex: true
    #是否迁移唯一性约束
    migrateTableUnique: true
    #是否迁移外键
    migrateTableForeignKey: true
    #是否迁移检查约束
    migrateTableCheck: true
    #是否迁移视图
    migrateView: false
    #是否迁移函数
    migrateFunction: false
    #是否迁移存储过程
    migrateProcedure: false
    #是否迁移包
    migratePackage: false
    #是否迁移包体
    migratePackageBody: false
    #是否迁移同义词
    migrateSynonym: false
    #是否包含公共同义词
    includePublicSynonym: false
    #是否迁移触发器
    migrateTrigger: false
    #是否迁移注释
    migrateComment: true
    #是否排除无效对象
    excludeInvalidObject: false
    #是否使用数据库系统统计信息(如表的记录数、大小等)
    useDbmsStats: false
    #是否使用手工脚本
    useManualScript: false

3.7 kdms转换设置

    #是否使用kdms做转换(视图、函数、存储过程、包、触发器)
    useDms: false
    #kdms访问地址
    dmsUrl: http://1.2.3.4:12580/kdms/
    #kdms源数据库类型
    dmsSourceDbType: Oracle
    #kdms目标数据库类型
    dmsTargetDbType: Kingbase_ES_V8_R6

3.8 其他设置项

    #网络读取超时时长(秒,0表示永不超时,若出现类似“Socket read timed out”异常时,可增大此值)
    netReadTimeout: 0
    #读数据超时时长(单位毫秒,0表示永不超时)
    readDataTimeout: 0
    #最大重试次数
    maxRetries: 1
    #重试间隔(毫秒)
    retryInterval: 500
    #读数据(中断后)能否恢复
    readDataCanResume: false
    #字符(CHAR、VARCHAR、CLOB)是否需要解码(Oracle字符集为US7ASCII、WE8ISO8859P1等时若迁移后字符里的中文乱码,设为true后重迁)
    characterNeedDecoding: false
    #国家字符(NCHAR、NVARCHAR、NCLOB)是否需要解码(Oracle字符集为US7ASCII、WE8ISO8859P1等时若迁移后国家字符里的中文乱码,设为true后重迁)
    nationalCharacterNeedDecoding: false
    #编码字符集(Oracle字符集为US7ASCII、WE8ISO8859P1等时若迁移后字符里的中文乱码,设为"ISO-8859-1"后重迁)
    encodingCharset:
    #解码字符集(Oracle字符集为US7ASCII、WE8ISO8859P1等时若迁移后字符里的中文乱码,设为"GB18030"后重迁)
    decodingCharset:
    #是否解码字节(Oracle字符集为US7ASCII时若迁移后字符里的中文乱码,设为true后重迁)
    decodingBytes: false
    #保持数据有序
    keepSequentialData: false

3.9 数据对比设置(仅“数据对比”运行模式时有效)

	#源端数据对比缓冲区大小(行数)
    dataCompareBufferSize: 1000000
    #数据对比摘要算法
    dataCompareAlgorithm: MD5 #CRC32、MD5、SHA1、SHA256、SHA384、SHA512
    #系统改变号(SCN,参考:select TO_CHAR(CURRENT_SCN) from V$DATABASE)
    systemChangeNumber:
    #统计分区表记录数时是否不使用系统改变号(System Change Number, SCN)
    countingPartitionTableNotUsingScn: false
    #是否开启并行HINT
    enableParallelHint: true
    #是否允许并行拆分和读取表
    parallelSplitAndReadTable: true
    #数据盲迁
    dataBlindMigrating: false
    #数据分块逆序
    reverseDataChunkOrder: false
    #最后数据分区优先
    lastDataPartitionFirst: false
    #是否强制创建视图(解决视图依赖问题)
    forcibleView: false

3.10 源数据库最大连接数

    #源数据库最大连接数
    maxPoolSize: 100

4、目标数据库

4.1 目标库连接设置

  #目标数据库类型(Kingbase, Kingbase_ADB)
  dbType: Kingbase
  #目标数据库版本(Kingbase: V7,V8R3,V8R6,V8R6C7,V9;Kingbase_ADB: 3)
  dbVersion: V8R6
  #目标端数据库兼容模式(Oracle,PG,MySQL,SQLServer)
  compatibleDbType: Oracle
  #连接字符串,格式为:jdbc:kingbase8://{host}:{port}/{database}
  url: jdbc:kingbase8://1.2.3.4:54321/database1?ApplicationName=kingbase_transfer #Kingbase V8R6,V8R6C7,V9使用
  #url: jdbc:kingbase83://1.2.3.4:54321/database1 #Kingbase V8R3使用
  #url: jdbc:kingbase://1.2.3.4:54321/DATABASE1 #Kingbase V7使用
  #url: jdbc:postgresql://1.2.3.4:54322/database1 #Kingbase_ADB使用,格式为:jdbc:postgresql://{host}:{port}/{database}
  #连接字符串(Unix Domain Sockets)
  #url: jdbc:kingbase8:///db?socketFactory=org.newsclub.net.unix.AFUNIXSocketFactory$FactoryArg&socketFactoryArg=/tmp/.s.KINGBASE.54321&sslMode=disable
  #驱动类名
  driverClassName: com.kingbase8.Driver #KingbaseV8R6,V8R6C7,V9使用
  #driverClassName: com.kingbase83.Driver #Kingbase V8R3使用
  #driverClassName: com.kingbase.Driver #Kingbase V7使用
  #driverClassName: org.postgresql.Driver #Kingbase_ADB使用
  #用户名
  username: kingbase
  #用户名是否使用密文(使用bin/cryptotool.sh或cryptotool.bat生成)
  ciphertextUsername: false
  #密码
  password: 123456
  #密码是否使用密文(使用bin/cryptotool.sh或cryptotool.bat生成)
  ciphertextPassword: false
  #目标模式,多个模式用英文逗号隔开,如:A,B,C(不要回车换行),也可填入"*"(需要双引号,则目标模式与源模式同名)
  #schemas: SCHEMA1,SCHEMA2,SCHEMA3
  #schemas: SCHEMA1
  schemas: "*"
  #目标模式统一前缀,指定后所有的目标模式名前都会添加此前缀
  schemaPrefix:
  #目标模式统一后缀,指定后所有的目标模式后都会添加此后缀
  schemaSuffix:
  #目标模式属主,多个属主用英文逗号隔开,如:A,B,C(不要回车换行),也可填入"*"(需要双引号,则目标属主与目标模式同名)
  schemaOwners:
  #目标模式表空间,多个表空间用英文逗号隔开,如:A,B,C(不要回车换行),也可填入"*"(需要双引号,则目标表空间与目标模式同名)
  schemaTablespaces:
  #数据库连接验证SQL
  connectionTestSql: select 1

温馨提示:如果迁移程序和目标数据库(KingbaseES)在同一台计算机上,并且操作系统是 Linux,可以使

用 Unix Domain 进行连接,可提高数据传输效率。

5.2 其他设置项

  #批量提交记录数(行数)
  writeBatchSize: 1000
  #批量提交记录数(行数)--大大对象数据
  writeBatchSizeBigLob: 10
  #批量提交数据大小(单位为M)
  writeBatchByteSize: 128
  #大对象数据读入内存阈值(单位兆,默认128M)
  lobInMemoryThresholdSize: 128
  #删除目标库中已存在的对象(如表、视图等)
  dropExistingObject: true
  #是否截断表(清空表数据)
  truncateTable: false
  #目标数据库对象重命名-除表名、列名外的其他对象: pk、fk、constraint、unique constraint、index 等
  renameObject: true
  #检查约束不验证已存在数据
  checkConstraintNotValidated: true
  #是否记录成功脚本
  logSuccessScript: true
  #是否创建目标模式
  createTargetSchema: true
  #迁移结果保留时长(单位为天)
  resultRetentionDays: 7
  #是否删除空字符(解决 无效的 "UTF8" 编码字节顺序(invalid byte sequence for encoding "UTF8": 0x00))
  removeNullCharacter: false
  #是否删除首尾空白字符
  removeWhiteSpaceCharacter: false
  #是否将分区表当作普通表迁移
  partitionTableAsNormal: false
  #是否创建默认分区表
  createDefaultPartitionTable: true
  #是否将全局临时表当作普通表迁移,目标库未V8R3时,设为true
  globalTemporaryTableAsNormal: false
  #写数据超时时长(单位毫秒,0表示永不超时)
  writeDataTimeout: 0
  #写数据任务超时后重置是否删除数据
  deleteWriteJobData: false
  #临时排除保留字
  excludeReservedWords: true
  #最大重试次数
  maxRetries: 2
  #重试间隔(毫秒)
  retryInterval: 500

温馨提示

  • 如果只迁移表数据,应将“drop-existing-object”设置为 false,避免删除目标库中表。
  • 如果将大表拆分为多次迁移,应将“truncate-table”设置为 false。

5.3 数据对比设置(仅“数据对比”运行模式时有效)

  #目标端数据对比缓冲区大小(行数)
  dataCompareBufferSize: 1000000
  #数据对比顺序比对并行度
  dataCompareSequentialParallelism: 5
  #是否按照unlogged表迁移
  unloggedTable: false
  #是否将unlogged表重置为普通表,当unloggedTable: true时,可以配置reloggedTable:true,两个参数配合使用
  reloggedTable: false
  #是否执行检查点(以无日志表迁移时设为true)
  issueCheckpoint: false
  #是否使用 insert 的方式迁移数据,默认为 Copy 方式(当 ora_input_emptystr_isnull=on 时,Copy 方式迁移的数据无法查询到时,设置为true)
  useInsert: false
  #是否使用遗留二进制拷贝签名
  useLegacyBinaryCopySignature: true
  #是否转义对象标识符(例如"tableName"、 `tableName`、[tableName])
  quotedIdentifier: true
  #对象识符大小写(DefaultCase、UpperCase、LowerCase、None)
  identifierCase: DefaultCase
  #是否重试执行失败的迁移任务(解决因依赖问题导致的迁移失败)

5.4 目标数据库最大连接数

  retryFailedJob: false
  #目标数据库最大连接数

5、线程池线程数

​ 数据迁移属于 IO 密集型操作,涉及网络络 IO 和磁盘 IO 的交互,一旦发生 IO,线程就会处于等待状态,当 IO结束,数据准备好后,线程才会继续执行。

对于 IO 密集型线程数的设置公式为:线程数 = CPU 核心数/(1-阻塞系数) ,其中阻塞系数一般为0.8~0.9 之间,取 0.9 则:

#例如下面两个计算线程数的案例
双核 CPU: 2/(1-0.9) = 20
64核2路 CPU: 64*2/(1-0.9) = 1280

配置文件:kb-thread-config.xml

6、其他配置

/KingbaseES/V9/ClientTools/guitools/KDts/KDTS-CLI/conf/manual_script -->手工脚本,用于迁移编辑后的迁移失败的对象


/KingbaseES/V9/ClientTools/guitools/KDts/KDTS-CLI/conf/mapping_rule/column -->自定义表字段映射规则


/KingbaseES/V9/ClientTools/guitools/KDts/KDTS-CLI/conf/mapping_rule/data_type -->自定义数据类型映射规则

/KingbaseES/V9/ClientTools/guitools/KDts/KDTS-CLI/conf/mapping_rule/default_value -->自定义字段缺省值映射规则


/KingbaseES/V9/ClientTools/guitools/KDts/KDTS-CLI/conf/mapping_rule/table_datatable_data -->自定义数据映射规则

#每个目录下都有对应的使用说明文档 readme.md 和示例文件 example.json,请参考对应文档使用。

二、运行日志

​ 迁移程序会在 kdts-xxx/logs 目录下按迁移日期和时间创建日志目录,该目录下会有 3 个日志文件以及不同模式名的子目录,每个子目录下存放该模式相关的日志(error.log、info.log、warn.log),请注意查看 error.log 中的内容

温馨提示

  • Linux 平台下在 logs 根目录下会有一个名为“kdts-xxx-日期 + 时间.log”的日志,里面会包含全部的日志内容,Windows 平台受限于操作系统,无此日志。
  • “数据对比”的日志目录名有“DataCompare-”前缀。

三、迁移报告

​ 迁移程序会在 kdts-xxx/result 目录下按迁移日期和时间创建报告目录,该目录下会有 index.html 以及不同模式名的子目录,每个子目录下存放该模式的详细报告,可打开 index.html 进行查看。

  • 模式信息首页(index.html)
  • XXX 详细信息(如表结构、表数据、表主键等, detail_XXX.html)
  • 失败脚本目录 (FailedScript)
  • 成功脚本目录 (SuccessScript)
  • 在 FailedScript、IgnoredScript 和 SuccessScript 目录下会生成与之对应(失败、略过、成功)的脚本:
  • 迁移成功表结构 SQL 脚本
  • 迁移失败表结构 SQL 脚本

四、KingbaseES优化配置参数

max_connections=2000
shared_buffers=RAM*0.4GB #RAM 指内存,最大设置为 64GB
work_mem =10MB
maintenance_work_mem=6GB
effective_cache_size=RAM*0.5GB #RAM 指内存(free -g)RAM*0.5GB
max_locks_per_transaction=1024
#wal_level = minimal
max_wal_size=100GB
checkpoint_timeout=5min
checkpoint_completion_target=0.9
max_parallel_workers_per_gather=0
logging_collector=on
log_destination='stderr'
log_directory='sys_log'
log_filename='kingbase-%d.log'
log_truncate_on_rotation=on
log_rotation_age=1440
log_connections=on
log_disconnections=on
log_statement='ddl'
log_checkpoints=on
log_lock_waits=on
log_autovacuum_min_duration=0
log_temp_files=0
lc_messages='C'
log_min_duration_statement=1000
log_line_prefix='%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h'
ignore_char_null_check=true
max_worker_processes=100
max_parallel_workers=80
#max_parallel_workers_per_gather=64
max_parallel_maintenance_workers=64
#maintenance_work_mem=16GB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值