• 金仓数据库 KDTS 迁移工具使用指南 (5. SHELL版使用说明)


    5. SHELL版使用说明

    5.1. 配置

    5.1.1. 源库类型

    迁移程序支持迁移多种源数据库,为了避免不同源数据库配置相互的干扰,按不同的源数据库类型进行生成独立的配置文件,因此需要知道当前激活的配置。进入kdts-plus/conf目录,打开application.yml文件,把“active”的值设置当前激活的源数据库类型(spring -> profiles -> active):

    spring:
        profiles:
          active: oracle #准备迁移的数据库,如dm(达梦)、gbase、kingbase、mysql、oracle等,具体的配置在kdts-XXX.yml文件中
    

    当前设置的是oracle,激活的“数据库连接”配置就是kdts-oracle.yml,如果配置的是mysql,则对应kdts-mysql.yml,以此类推。

    5.1.2. 运行模式

    迁移工具除了进行数据迁移还可进行源库和目标库的数据对比,可根据需要切换运行模式。进入kdts-plus/conf目录,打开application.yml文件,去掉“running-mode”前的#号(注释)后设置需要的运行模式:

    app:
      datasource:
          type:
              source: Hikari # Hikari、Druid、Simple #源库为gbase8g时,只能选择Simple
              target: Hikari # Hikari、Druid、Simple
      log:
          home: logs # 日志主目录
          level: #日志级别
              console-appender: INFO # 控制台输出(OFF、TRACE、DEBUG、INFO、WARN、ERROR)
              file-appender: INFO # 文件输出(OFF、TRACE、DEBUG、INFO、WARN、ERROR)
      #running-mode: DataCompare #数据比较
    

    注意:

    • 注释掉“running-mode”即为缺省的数据迁移模式,以后若有新运行模式,按注释说明填写。

    5.1.3. 源数据库

    根据设置的“源库类型”,打开conf目录中与之对应的配置文件(如kdts-oracle.yml),按实际环境中的运行参数进行配置。

    5.1.3.1. 源库连接设置

    #源数据库类型
    dbType: oracle
    #源数据库版本(9i,10g,11g,12c,19c)
    dbVersion: 11g
    #连接字符串
    url: jdbc:oracle:thin:@1.2.3.4:1521/orcl
    #驱动类名
    driver-class-name: oracle.jdbc.OracleDriver
    #用户名
    username: oracle
    #密码
    password: 123456
    #数据库连接验证SQL
    validationQuery: select 1 from dual
    

    注意:

    • 如果源库的类型为MariaDB时使用与Mysql使用相同的接口和配置文件,不再单独处理,请按照下表中的版本对应关系进行配置:

      MariaDb

      MySql

      kdts-plus对应的dbVersion

      5.5、10.0

      5.5

      5.5

      10.1

      5.6

      5.7

      10.2、10.3、10.4

      5.7

      5.7

      10.5、10.6、10.7

      8.0

      8.0

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

    5.1.3.2. 包含或排除的模式

    #要迁移的模式,多个模式用英文逗号隔开,如:A,B,C(不要回车换行),也可填入"*"(需要双引号,将迁移源库中此用户所能访问的所有模式)
    #schemas: Sehcma1,Sehcma2,Sehcma3
    #schemas: "*"
    schemas: Sehcma1
    #不迁移的模式,多个模式用英文逗号隔开,如:A,B,C(不要回车换行)
    schema-excludes: 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
    

    5.1.3.3. 大表拆分设置

    #大表拆分阈值行数(当表的行数超过此值时,将对表进行拆分,每块的记录数为此值和表总记录数除以“拆分最大块数”中的最大值)
    large-table-split-threshold-rows: 5000000
    #大表拆分阈值大小(单位为M)(当表的数据大小(普通字段+大对象字段)超过此值时,将对表进行拆分)
    large-table-split-threshold-size: 5000
    #大表拆分最大块数(每张表的最大拆分块数,应不超过总的读线程数)
    large-table-split-max-chunk-num: 24
    #大表拆分条件定义文件(优先于按行数和大小拆分)
    large-table-split-condition-file: largetable-split-condition.json
    

    5.1.3.4. 表过滤设置

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

    5.1.3.5. 包含或排除的对象

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

    5.1.3.6. 要迁移的对象类别

    #是否迁移序列
    migrate-sequence: true
    #序列仅更新值(不创建)
    sequence-only-updating-value: false
    #序列是否使用CurrVal做当前值(Oracle调用CurrVal前需要调用NextVal,会耗费一个序列值)
    sequence-use-current-value: false
    #是否迁移表结构
    migrate-table-structure: true
    #是否迁移数据
    migrate-table-data: true
    #是否迁移主键
    migrate-table-primary-key: true
    #是否迁移索引
    migrate-table-index: true
    #是否迁移唯一性约束
    migrate-table-unique: true
    #是否迁移外键
    migrate-table-foreign-key: true
    #是否迁移检查约束
    migrate-table-check: true
    #是否迁移视图
    migrate-view: false
    #是否迁移函数
    migrate-function: false
    #是否迁移存储过程
    migrate-procedure: false
    #是否迁移包
    migrate-package: false
    #是否迁移同义词
    migrate-synonym: false
    #是否包含公共同义词
    include-public-synonym: false
    #是否迁移触发器
    migrate-trigger: false
    #是否迁移注释
    migrate-comment: true
    

    5.1.3.7. kdms转换设置

    #是否使用kdms做转换(视图、函数、存储过程、包、触发器)
    use-kdms: false
    #kdms访问地址
    kdms-url: http://192.168.0.25:12580/kdms/
    #kdms源数据库类型
    kdms-source-db-type: Oracle
    #kdms目标数据库类型
    kdms-target-db-type: Kingbase_ES_V8_R6
    

    5.1.3.8. 杂项

    #网络读取超时时长(秒,0表示永不超时,若出现类似“Socket read timed out”异常时,可增大此值)
    net-read-timeout: 0
    #源数据库游标读取记录数(一次性从源库读取的行数,在一定范围内增加该值可提升读取效率,但会增加内存开销)
    fetch-size: 1000
    #源数据库含大对象数据表的游标读取记录数(同上,只是此参数针对有大对象字段的表)
    table-with-large-object-fetch-size: 100
    #源数据库含大大对象数据表的游标读取记录数(同上,只是此参数针对大对象字段长度超过1G的表)
    table-with-big-large-object-fetch-size: 50
    #是否使用数据库系统统计信息(如表的记录数、大小等)
    use-dbms-stats: false
    #是否使用手工脚本
    use-manual-script: false
    #读数据超时时长(单位毫秒,0表示永不超时)
    read-data-timeout: 0
    #最大重试次数
    max-retries: 0
    #重试间隔(毫秒)
    retry-interval: 500
    #读数据(中断后)能否恢复
    read-data-can-resume: false
    #字符是否需要解码(从源库作转码),用于处理类似Oracle us7ascii编码
    character-need-decoding: false
    

    注意:

    • 如果源库的数据在保存时做过编码转换,例如源库为Oracle的为us7asii编码时,保存中文字符时需要转成“ISO_8859_1”编码,则迁移时需作解码处理,应将“字符是否需要解码”设置未ture(character-need-decoding: true)。

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

    #数据对比缓冲区大小(源端)
    data-compare-buffer-size: 50000
    #数据对比摘要算法
    data-compare-algorithm: MD5 #CRC32、MD5、SHA1、SHA256、SHA384、SHA512
    

    5.1.3.10. 源数据库最大连接数

    #源数据库最大连接数
    maximum-poolsize: 200
    

    5.1.4. 目标数据库

    根据设置的“源库类型”,打开conf目录中与之对应的配置文件(如kdts-oracle.yml),按实际环境中的运行参数进行配置。

    5.1.4.1. 目标库连接设置

    #目标数据库类型
      dbType: KINGBASE
      #目标数据库版本(V8R6,V8R3,V7)
      dbVersion: V8R6
      #Unix Domain
      #url: jdbc:kingbase8:///db?currentSchema=db&socketFactory=org.newsclub.net.unix.AFUNIXSocketFactory$FactoryArg&socketFactoryArg=/tmp/.s.KINGBASE.54321&sslMode=disable
      #simple jdbc
      url: jdbc:kingbase8://1.2.3.4:54321/test1 #V8R3和V8R6使用
      #url: jdbc:kingbase://1.2.3.4:54321/TEST #V7使用
      #driver-class-name: com.kingbase.Driver #V7使用
      #driver-class-name: com.kingbase8.r3.Driver #V8R3使用
      driver-class-name: com.kingbase8.Driver #V8R6使用
      username: kingbase
      password: 123456
      #目标模式,多个模式用英文逗号隔开,如:A,B,C(不要回车换行),也可填入"*"(需要双引号,则目标模式与源模式同名)
      #schemas: Sehcma1,Sehcma2,Sehcma3
      #schemas: Sehcma1
      schemas: "*"
      #数据库连接验证SQL
      validation-query: select 1
    

    注意:

    • 如果迁移程序和目标数据库(Kingbase)在同一台计算机上,并且操作系统是Linux,可以使用Unix Domain进行连接,可提高数据传输效率。

    5.1.4.2. 杂项

    #批量提交记录数(行数据)
    write-batch-size: 1000
    #批量提交数据大小(单位M)
    write-batch-byte-size: 100
    #删除目标库中已存在的对象(如表、视图等)
    drop-existing-object: true
    #是否截断表(清空表数据)
    truncate-table: false
    #目标数据库对象重命名-除表名、列名外的其他对象: pk、fk、constraint、unique constraint、index 等
    rename-object: true
    #检查约束不验证已存在数据
    check-constraint-not-validated: true
    #是否记录成功脚本
    log-success-script: true
    #是否创建目标模式
    create-target-schema: true
    #迁移结果保留时长(单位为天)
    result-retention-days: 7
    #是否删除空字符(解决 无效的 "UTF8" 编码字节顺序(invalid byte sequence for encoding "UTF8": 0x00))
    remove-null-character: false
    #是否将分区表当作普通表迁移
    partition-table-as-normal: false
    #写数据超时时长(单位毫秒,0表示永不超时)
    write-data-timeout: 0
    #最大重试次数
    max-retries: 0
    #重试间隔(毫秒)
    retry-interval: 500
    

    注意:

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

    • 如果将大表拆分为多次迁移,应将“truncate-table”设置为false。

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

    #数据对比缓冲区大小(目标端)
    data-compare-buffer-size: 200000
    #数据对比查询并行度
    data-compare-query-parallelism: 5
    

    5.1.4.4. 目标数据库最大连接数

    #目标数据库最大连接数
    maximum-poolsize: 200
    

    5.1.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
    

    进入 kdts-plus/conf目录下,打开:kb-thread-config.xml

    
    
       name="default">
        1
        1
        15
        8
      
    
      
      
      
       name="read">
        8
        8
        300
        150000
      
      
       name="write">
        48
        48
        300
        75
      
      
       name="metaRead">
        8
        8
        300
        300000
      
      
       name="metaWrite">
        8
        8
        300
        20
      
    
      
       name="readZ2A">
        8
        8
        300
        150000
      
      
       name="writeZ2A">
        48
        48
        300
        75
      
      
       name="metaReadZ2A">
        8
        8
        300
        300000
      
      
       name="metaWriteZ2A">
        8
        8
        300
        20
      
    
      
       name="writeLargeObject">
        16
        16
        300
        16
      
    
      
       switch="off" interval="600000">
    
      
       switch="off" interval="600000">
    
      
       switch="off" interval="600000">
    
    

    5.1.6. 其他配置

    {安装目录}/conf 目录下的配置项功能说明:

    conf
    └─manual_script --手工脚本,用于迁移编辑后的迁移失败的对象
    └─mapping_rule
            └─column --自定义表字段映射规则
            └─data_type --自定义数据类型映射规则
            └─default_value --自定义字段缺省值映射规则
            └─table_data --自定义数据映射规则
    

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

    5.2. 结果

    5.2.1. 运行日志

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

    Schema1     #模式1的日志
    Schema2     #模式2的日志
    Schema2     #模式3的日志
    error.log   #错误
    info.log    #信息
    warn.log    #警告
    

    注意:

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

    • “数据对比”的日志目录名有“DataCompare-”前缀。

    5.3. 迁移报告

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

    AcrpyRegisterScript                                    #ArcGIS注册脚本(迁移GIS数据时从此目录下取注册数据的脚本文件)
    FailedScript                                           #失败脚本目录
    IgnoredScript                                          #略过脚本目录
    SuccessScript                                          #成功脚本目录
    index.html                                             #模式信息首页
    detail_check_constraint.html                           #检查约束详细信息页
    detail_comment.html                                    #注释详细信息页
    detail_foreign_key_constraint.html                     #外键详细信息页
    detail_function.html                                   #函数详细信息页
    detail_index.html                                      #索引详细信息页
    detail_package.html                                    #包详细信息页
    detail_primary_key_constraint.html                     #主键详细信息页
    detail_procedure.html                                  #存储过程详细信息页
    detail_sequence.html                                   #序列详细信息页
    detail_synonym.html                                    #同义词详细信息页
    detail_table.html                                      #表详细信息页
    detail_table_data.html                                 #表数据详细信息页
    detail_trigger.html                                    #触发器详细信息页
    detail_unique_constraint.html                          #唯一性约束详细信息页
    detail_view.html                                       #视图详细信息页
    
    • 迁移报告目录

    • 模式信息首页(index.html)

    • detail_XXX.html--XXX详细信息(如表结构、表数据、表主键等)

    • FailedScript--失败脚本目录

    • SuccessScript--成功脚本目录

    在FailedScript、IgnoredScript和SuccessScript目录下会生成与之对应(失败、略过、成功)的脚本:

    check_constraint.sql                           #检查约束SQL脚本
    comment.sql                                    #注释SQL脚本
    foreign_key_constraint.sql                     #外键SQL脚本
    function.sql                                   #函数SQL脚本
    index.sql                                      #索引SQL脚本
    package.sql                                    #包SQL脚本
    primary_key_constraint.sql                     #主键SQL脚本
    procedure.sql                                  #存储过程SQL脚本
    sequence.sql                                   #序列SQL脚本
    synonym.sql                                    #同义词SQL脚本
    table.sql                                      #表SQL脚本
    table_data.sql                                 #表数据SQL脚本
    trigger.sql                                    #触发器SQL脚本
    unique_constraint.sql                          #唯一性约束SQL脚本
    view.sql                                       #视图SQL脚本
    
    • 迁移成功表结构 SQL 脚本

    • 迁移失败表结构 SQL 脚本

    注意:

    “数据对比”的日志目录名有“DataCompare-”前缀。

    5.4. Kingbase 优化配置参数

    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
  • 相关阅读:
    使用python库自动为pdf增加目录
    [Gcexcel]GrapeCity Documents Excel for Java 5.2.2
    ADuM1250 ADuM1251 模块 I2C IIC总线2500V电磁隔离 接口保护
    搜索技术——遗传算法
    字符串压缩(一)之ZSTD
    Python进阶——JSON
    PIE Engine系列2 数据的上传、调用及下载(附源码超详细)
    基于FPGA的 图像边沿检测
    MySQL索引
    云原生网关的可观测性体系实践
  • 原文地址:https://blog.csdn.net/arthemis_14/article/details/126137862