适用场景
数据迁移
命令功能
将源数据库表的全量数据迁移到目标数据库。
注意该命令仅支持对全量数据进行迁移,不支持对增量数据进行同步。
命令格式
命令格式一:
CP <CPT_NAME> "<TAB_FILTER>"|"<CVT_DIR_PATH>" [<CP_MASK>]
命令格式二:
ALTER [<CPT_NAME>] CP "<TAB_FILTER>"|"<CVT_DIR_PATH>" [<CP_MASK>]
参数说明
| 参数 | 说明 |
|---|---|
| CPT_NAME | CPT模块的名称,对应配置文件中CPT模块的“name”参数。 |
| "<TAB_FILTER>" | 从数据库中筛选待迁移表的条件,过滤条件采用SQL表达式,需要满足SQL表达式的语法规则。过滤条件中SCH.NAME为模式名,TAB.NAME为表名。格式举例如下: "SCH.NAME='<SCHNAME>' AND TAB.NAME='<TABNAME>'" :SCHNAME模式下的表TABNAME。 "SCH.NAME='<SCHNAME_PERSON>' or SCH.NAME='<SCHNAME_RESOURCES>'":SCHNAME_PERSON和SCHNAME_RESOURCES模式下所有的表。 |
| CVT_DIR_PATH | 数据迁移使用的CVT脚本目录。该参数仅适用于DMNCDB-REDIS数据库。 |
| CP_MASK | 数据迁移掩码,包括DELETE、UPDATE、DROP、CREATE、INSERT、GROUP和TRUNCATE等,数据迁移掩码可以自由组合,默认值为CREATE|NOLOCK|INSERT|INDEX|TABLE|CHECK|GROUP。 当数据库为DMNCDB-REDIS时,仅支持TRUNCATE掩码。DELETE、UPDATE和LOB掩码说明请参见数据迁移掩码说明表,其他掩码的具体说明请参见添加同步表章节的装载掩码说明表。 |
| 数据迁移掩码 | 说明 |
|---|---|
| DELETE | 该掩码表示使用源表的数据去清理目标表的数据。不适用于MySQL/MariaDB数据库。当目标数据库的表存放有独立数据,需要从该表中清理与源表有关的数据时,不可以使用TRUNCATE掩码,可以使用该掩码来清理与源表有关的数据。仅数据迁移的CP命令支持使用该掩码。使用该功能时,目标表中必须要有主键。 示例: 在目标数据库同名表中删除与表RESOURCES.EMPLOYEE有关的数据记录。 cp cpt_dm8 "sch.name='RESOURCES' and tab.name='EMPLOYEE'" DELETE |
| LOB | 该掩码表示使用源表中的大对象数据去更新目标表中对应的大对象数据。该掩码在修复目标表大对象数据和源表不一致时使用,可以指定条件抽取源数据库某个表某些行的大对象数据更新到目标库对应的行中。必须与UPDATE掩码组合使用,如:UPDATE|LOB。仅数据迁移的CP命令支持使用该掩码。在此掩码使用情景中MySQL的TINYTEXT、TINYBLOB类型不认为是大对象。 示例: 把源表RESOURCES.DEPARTMENT中ID列的列值等于1的这一行对应的大对象数据更新到目标数据库。 cp cpt_dm8 "sch.name='RESOURCES' and tab.name='DEPARTMENT'" UPDATE|LOB|WHERE|"ID=1" |
| UPDATE | 该掩码表示更新数据。当目标表和源表的数据不一致时,可以使用该掩码对目标表的某些不一致的数据进行更新。仅数据迁移的CP命令支持使用该掩码。 在UPDATE掩码后面紧接着可以指定更新列,如果不指定更新列,默认更新该表除主键以外的所有列。如果与LOB掩码组合使用,则更新列仅包含大对象列。该功能可以用来解决迁移时使用NOLOB迁移后目标表没有大对象数据的问题。 使用UPDATE掩码时,如果目标表中存在主键,目标表的主键需要与源表保持一致。如果目标表中不存在主键,需要先使用INSERT掩码迁移表,否则定位不到记录。 示例1: 更新目标表RESOURCES.DEPARTMENT中ID列的值为1的行。 cp cpt_dm8 "sch.name='RESOURCES' and tab.name='DEPARTMENT'" UPDATE|WHERE|"ID=1" 示例2: 更新目标表RESOURCES.DEPARTMENT中ID列为1的行,但仅更新DATA和TYPE两列。 cp cpt_dm8 "sch.name='RESOURCES' and tab.name='DEPARTMENT'" UPDATE|"DATA,TYPE"|WHERE|"ID=1" |
命令示例
将源表RESOURCES.EMPLOYEE迁移到目标数据库,如果目标数据库存在同名的表,则先删除该表再重新迁移。
cp cpt_dm8 "sch.name='RESOURCES' and tab.name='EMPLOYEE'" DROP|CREATE|INSERT
将源表RESOURCE.EMPLOYEE的表结构(不包括表数据)迁移到目标数据库,如果目标数据库存在同名的表,则先删除该表再重新迁移。
cp cpt_dm8 "sch.name='RESOURCES' and tab.name='EMPLOYEE'" DROP|CREATE
大对象掩码示例
为使用户了解大对象相关掩码的使用方法,如下介绍使用大对象相关掩码的三个典型场景。
场景一:先迁移非大对象列,后更新大对象列。
建表。
无主键时,建表使用ROWID掩码。
cp cpt_dm8 "sch.name='RESOURCES' and tab.name='EMPLOYEE'" CREATE|ROWID
无主键时,建表未使用ROWID掩码。
cp cpt_dm8 "sch.name='RESOURCES' and tab.name='EMPLOYEE'" CREATE
迁移非大对象列。
INSERT|NOLOB掩码组合,表示仅迁移非大对象列。
cp cpt_dm8 "sch.name='RESOURCES' and tab.name='EMPLOYEE'" INSERT|GROUP|NOLOB
更新大对象列。
UPDATE|LOB掩码组合,表示仅更新大对象列。有主键时,主键作旧值,能够成功更新大对象列;无主键时,建表时使用了ROWID掩码,ROWID列做旧值,能够成功更新大对象列;无主键时,建表时未使用ROWID掩码,则所有非大对象列作旧值,大对象列作新值,当有两行及以上的非大对象列相同时更新大对象列会不成功。
cp cpt_dm8 "sch.name='RESOURCES' and tab.name='EMPLOYEE'" UPDATE|LOB
场景二:先迁移非大对象列,后更新非大对象列。主要适用于源数据库非大对象数据有更新的场景。
迁移非大对象列。
INSERT|NOLOB掩码组合,表示仅迁移非大对象列。
cp cpt_dm8 "sch.name='RESOURCES' and tab.name='EMPLOYEE'" INSERT|GROUP|NOLOB
更新非大对象列。
UPDATE|NOLOB掩码组合,表示仅更新非大对象列。有主键时,主键作旧值,能够成功更新非大对象列;无主键时,无法更新非大对象列。
cp cpt_dm8 "sch.name='RESOURCES' and tab.name='EMPLOYEE'" UPDATE|NOLOB
场景三:延迟迁移大对象列。
cp cpt_dm8 "sch.name='RESOURCES' and tab.name='EMPLOYEE'" INSERT|GROUP|DELAY
INSERT|DELAY掩码组合,表示先迁移非大对象列和字节长度小于4000的大对象列数据,后通过更新的方式迁移字节长度大于4000的大对象列数据。
文章
阅读量
获赞
