注册
DTS迁移的"源代码"功能解读
专栏/技术分享/ 文章详情 /

DTS迁移的"源代码"功能解读

BruceCD 2026/05/28 228 0 0
摘要

DTS迁移的"源代码"功能解读

概述

在使用DTS的迁移功能时,我们可以在迁移向导中通过图形化界面按照向导一步步完成迁移操作,不过在迁移向导的同级标签页源代码中,也可以看到xml格式的详细的配置信息,这个配置中的所有xml标签都能对应到图形化界面的某个选项或者参数设置中。xml格式的配置可以被导出和导入,也能用到命令行下的dts_cmd_run.sh的迁移执行,所以为了更加熟练得使用DTS,我们有必要了解一下源代码中xml的各项配置信息。

迁移功能的xml配置结构

迁移功能的xml配置中,有一个根标签TransformTask,它的子标签为迁移步骤中每个步骤的具体配置标签,比如数据源信息标签、目的信息标签等。

<?xml version="1.0" encoding="UTF-8"?>
<!--本文件由DM数据迁移工具生成,请不要手工修改,生成时间2026-04-29 18:36:51.-->
<TransformTask transform="11" name="test"> 
  <Source version="1.0" type="db" useCustomDriver="false" useDefaultURL="true"> 
    <!--数据源信息的子标签-->
  </Source>  
  <Destination version="1.0" type="db" useCustomDriver="false" useDefaultURL="true"> 
    <!--目的数据库信息的子标签--> 
  </Destination>  
  <Config version="1.0" selectObjType="3"> 
    <!--迁移选项的子标签-->
  </Config>  
  <Mode version="1.0" simple="false">
    <!--指定模式时的子标签-->
  </Mode>
  <TransformItems version="1.0" ItemCount="5">
    <!--指定对象时的子标签-->
  </TransformItems>
  <Agents version="1.0">
    <!--配置执行方式时指定的代理的子标签-->
  </Agents>
  <Summay version="1.0">
    <!--审阅迁移任务的子标签-->
  </Summay>
</TransformTask>

迁移方式

TransformTask根标签的属性transform表示迁移方式,根据源数据端和目的端组合的不同使用不同数字指代对应的迁移方式,例如常用的oracle=>DM迁移所对应的transform值为11,mysql=>DM迁移所对应的transform值为13

数据源和目的信息

Source标签指定的是数据源的信息,Destination标签指定的是目的的信息,以下以mysql=>DM的迁移为例,对应的标签如下:

  <Source version="1.0" type="db" useCustomDriver="false" useDefaultURL="true">
    <Server>192.168.57.110</Server> <!--主机名-->
    <Port>3306</Port> <!--端口-->
    <AuthType>0</AuthType> <!--验证方式-->
    <Compress>false</Compress> <!--是否使用数据压缩模式-->
    <User>admin</User> <!--用户名-->
    <Password>CC177E9A0221F8E589D0858622A80355</Password> <!--口令,此处为加密过的密文串-->
  </Source>
  <Destination version="1.0" type="db" useCustomDriver="false" useDefaultURL="true">
    <Server>192.168.57.1</Server> <!--主机名-->
    <Port>5236</Port> <!--端口-->
    <AuthType>0</AuthType> <!--验证方式-->
    <Compress>false</Compress> <!--是否使用数据压缩模式-->
    <DmType>dm</DmType> <!--未使用到-->
    <User>SYSDBA</User> <!--用户名-->
    <Password>8651BEFF6C2726450702B7F71C63A201</Password> <!--口令,此处为加密过的密文串-->
  </Destination>

如果在数据源或者目的中选择了自定义URL,则对应标签的useDfaultURL属性会被赋值为false,并且下层标签中会多一个URL标签,例如修改了目的的自定义URL:

    <URL>jdbc:mysql://192.168.57.110:3306/mysql?tinyInt1isBit=false&amp;transformedBitIsBoolean=false&amp;useSSL=false</URL>

通过可视化界面还可以编辑此URL

迁移选项

Config标签指定的是迁移选项的配置信息,例如获取对象的迁移方式、迁移策略等:

  <Config version="1.0" selectObjType="1">
    <Strategy name="indexRename" value="true"/> <!--索引名重复时是否重命名索引-->
    <Strategy name="createTableParallel" value="false"/> <!--并发创建表-->
    <Strategy name="createIndexParallel" value="false"/> <!--并发创建索引-->
    <Strategy name="createPkParallel" value="false"/> <!--并发创建主键-->
    <Strategy name="allParallel" value="false"/> <!--所有任务并发-->
    <Strategy name="itemBatchSize" value="50"/> <!--每次分析对象个数-->
    <Strategy name="itemBufSize" value="4"/> <!--对象缓存池大小-->
    <Strategy name="fillThreadCount" value="2"/> <!--填充对象线程个数-->
    <Strategy name="taskBufSize" value="4"/> <!--任务缓存池大小-->
    <Strategy name="batchMaxSize" value="0"/> <!--每批装载最大大小-->
    <Strategy name="batchLobMaxSize" value="0"/> <!--大字段每批装载最大大小-->
    <Strategy name="batchMaxTime" value="60"/> <!--每批装载最大等待时间-->
    <Strategy name="mysqlCharToVarchar" value="true"/>  <!--MySQL的CHAR默认迁移为DM的VARCHAR-->
    <Strategy name="globalFldr" value="false"/> <!--使用快速装载-->
    <Strategy name="retryConnect" value="true"/> <!--自动重连-->
    <Strategy name="retryConnectCount" value="3"/> <!--重连次数-->
    <Strategy name="retryConnectInterval" value="15"/> <!--重连间隔-->
    <Strategy name="dataTypeMapping" dataTypeMapping=""> <!--使用默认数据类型映射关系-->
      <dataTypeMapping sourceTypename="char" destTypename="VARCHAR" destPrecisionTimes="2.0"/>
    </Strategy>
    <Strategy name="lengthInChar" value="2.0"/> <!--字符长度-->
    <Strategy name="continueWhenError" value="true"/> <!--出错后继续执行-->
    <Strategy name="threadCount" value="8"/> <!--迁移任务最大并发数-->
    <Strategy name="objectNameToUpperCase" value="false"/> <!--保持对象名大小写-->
  </Config>

指定模式

Mode标签指定的是指定模式时的配置信息,例如选择迁移哪些类型库对象、选择模式及模式对象等:

  <Mode version="1.0" simple="false"> <!--库对象,选择要迁移哪些类型对象-->
    <DBStrategies>
      <Strategy>TRANSFORM_USERS</Strategy> <!--模式及模式对象-->
      <Strategy>TRANSFORM_TABLESPACES</Strategy> <!--表空间-->
      <Strategy>TRANSFORM_SCHEMAS</Strategy> <!--用户-->
    </DBStrategies>
    <Schema source="test_schema" destination="TEST_SCHEMA"> <!--选中test_schema时会有这一个标签-->
      <Strategies>
        <Strategy name="schObjectStrategys" value="TRANSFORM_TABLES,TRANSFORM_VIEWS,TRANSFORM_PROCEDURE_FUNCTIONS,TRANSFORM_DATABASE_AND_SCHEMA_TRIGGERS"/> <!--选中表、视图、存储过程、触发器时会有这样的一个标签-->
      </Strategies>
    </Schema>
    <Schema source="zhjc" destination="ZHJC"> <!--选中zhjc时会有这一个标签-->
      <Strategies>
        <Strategy name="schObjectStrategys" value="TRANSFORM_TABLES,TRANSFORM_VIEWS,TRANSFORM_PROCEDURE_FUNCTIONS,TRANSFORM_DATABASE_AND_SCHEMA_TRIGGERS"/>
      </Strategies>
    </Schema>
  </Mode>

指定对象

TransformItems标签是在指定对象时的配置信息,例如迁移哪些对象、迁移每个对象时的具体策略等信息:

  <TransformItems version="1.0" ItemCount="4">
    <TransformItem id="0" type="table" sourceSchema="test_schema" destSchema="TEST_SCHEMA" source="test_tb_tmp" destination="TEST_TB_TMP" isDefinitionAutoGenerated="true" customColumnMap="false" partitionAsList="false"> <!--选中test_schema.test_tb_tmp表时会有这一个标签-->
      <Strategies>
        <Strategy name="dontTransformIfExist" value="false"/> <!--如果目标表存在,不迁移数据-->
        <Strategy name="data" value="true"/> <!--数据-->
        <Strategy name="fk" value="true"/> <!--外键-->
        <Strategy name="transformOnUpdate" value="true"/> <!--列ON UPDATE语法-->
        <Strategy name="displayRow" value="false"/> <!--显示行数-->
        <Strategy name="dataBatch" value="{&quot;batchSize&quot;:1024,&quot;bufSize&quot;:2,&quot;fetchSize&quot;:1024,&quot;lobBatchSize&quot;:1024,&quot;lobBufSize&quot;:2,&quot;lobFetchSize&quot;:1024}"/> <!--普通表源一次读取行数、目的一次提交行数、缓存批数;大字段表源一次读取行数、目的一次提交行数、缓存批数;-->
        <Strategy name="onlineIndex" value="false"/> <!--异步索引-->
        <Strategy name="ignoreErrorData" value="false"/> <!--忽略错误-->
        <Strategy name="fkKeepSchema" value="false"/> <!--保留引用表原有模式信息-->
        <Strategy name="fkWithIndex" value="true"/> <!--WITH INDEX-->
        <Strategy name="uk" value="true"/> <!--唯一约束-->
        <Strategy name="sourceReadUncommitted" value="false"/> <!--源允许脏读-->
        <Strategy name="create" value="true"/> <!--忽略错误-->
        <Strategy name="truncateCascadeData" value="false"/> <!--删除已有数据,级联删除-->
        <Strategy name="identityInsert" value="true"/> <!--使用IDENTITY自增列-->
        <Strategy name="useIdentity" value="false"/> <!--主键-->
        <Strategy name="fldrOption" value="{&quot;multi&quot;:false,&quot;java&quot;:false}"/> <!--使用快速装载,多实例,参数配置-->
        <Strategy name="ck" value="true"/> <!--检验约束-->
        <Strategy name="index" value="true"/> <!--索引-->
        <Strategy name="cascadeDrop" value="false"/> <!--如果表存在,cascade删除-->
        <Strategy name="withCluAddrIndex" value="false"/>  <!--索引,记录聚集索引记录地址-->
        <Strategy name="pkConflict" value="false"/>  <!--数据,主键冲突处理-->
        <Strategy name="truncateData" value="true"/> <!--删除已有数据-->
        <Strategy name="pkConflictOption" value="{&quot;strategy&quot;:&quot;PK_CONFLICT_OVERRIDE&quot;}"/> <!--数据,主键冲突处理-->
        <Strategy name="constraint" value="true"/> <!--约束-->
        <Strategy name="comment" value="true"/> <!--注释-->
        <Strategy name="pk" value="true"/> <!--主键-->
        <Strategy name="fldr" value="false"/> <!--使用快速装载-->
      </Strategies>
    </TransformItem>
    <TransformItem id="0" type="table" sourceSchema="zhjc" destSchema="ZHJC" source="CONSUMER_TMP" destination="CONSUMER_TMP" isDefinitionAutoGenerated="true" customColumnMap="false" partitionAsList="false">
      <Strategies>
        <Strategy name="dontTransformIfExist" value="false"/>
        <Strategy name="data" value="true"/>
        <Strategy name="fk" value="true"/>
        <Strategy name="transformOnUpdate" value="true"/>
        <Strategy name="displayRow" value="false"/>
        <Strategy name="dataBatch" value="{&quot;batchSize&quot;:1024,&quot;bufSize&quot;:2,&quot;fetchSize&quot;:1024,&quot;lobBatchSize&quot;:1024,&quot;lobBufSize&quot;:2,&quot;lobFetchSize&quot;:1024}"/>
        <Strategy name="onlineIndex" value="false"/>
        <Strategy name="ignoreErrorData" value="false"/>
        <Strategy name="fkKeepSchema" value="false"/>
        <Strategy name="fkWithIndex" value="true"/>
        <Strategy name="uk" value="true"/>
        <Strategy name="sourceReadUncommitted" value="false"/>
        <Strategy name="create" value="true"/>
        <Strategy name="truncateCascadeData" value="false"/>
        <Strategy name="identityInsert" value="true"/>
        <Strategy name="useIdentity" value="false"/>
        <Strategy name="fldrOption" value="{&quot;multi&quot;:false,&quot;java&quot;:false}"/>
        <Strategy name="ck" value="true"/>
        <Strategy name="index" value="true"/>
        <Strategy name="cascadeDrop" value="false"/>
        <Strategy name="withCluAddrIndex" value="false"/>
        <Strategy name="pkConflict" value="false"/>
        <Strategy name="truncateData" value="true"/>
        <Strategy name="pkConflictOption" value="{&quot;strategy&quot;:&quot;PK_CONFLICT_OVERRIDE&quot;}"/>
        <Strategy name="constraint" value="true"/>
        <Strategy name="comment" value="true"/>
        <Strategy name="pk" value="true"/>
        <Strategy name="fldr" value="false"/>
      </Strategies>
    </TransformItem>
  </TransformItems>

配置执行方式

Agents标签是在指定DTS执行代理,通过将执行任务下放给agent执行来减轻本地图形化机器的性能负担或者跨网络性能损耗,此处可以配置代理的具体信息:

  <Agents version="1.0"> 
    <Strategy name="remoteExecute" value="true"/>  
    <Agent ip="192.168.57.110" port="7233" key="785F3DDC0D09258A63A9FF5394B5F6B7" main="true" processPort="-1" processParams=""/> <!--代理的主机名,端口号,校验KEY,执行端口,启动参数等-->
  </Agents>

审阅迁移任务

对前面步骤的配置信息进行审阅:

  <Summay version="1.0"> 
    <textPage>true</textPage> <!--以文本方式显示执行任务-->
  </Summay>

在终端命令行下使用xml文件进行任务执行

  1. 导出迁移任务为xml配置文件:
    在DTS的左侧对象导航栏中找到对应的迁移任务,然后右击,导出配置文件,随便输入一个名称即可(例如test.xml)
  2. 将此xml配置文件放到linux下,然后执行:
   cd $DM_HOME/tool
   sh dts_cmd_run.sh CONFIG FILE=/tmp/test.xml
  1. 执行完成后可以在终端上看到执行结果,或者当前目录下看到执行日志和迁移报告文件

总结

DTS除了迁移任务,其他任务都是通过XML进行配置保存的,了解对应的xml配置结构有助于理解DTS的任务功能细节。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服