开发者社区 问答 正文

如何配置迁移任务(二)



MigrationObject 参数定义


MigrationObject 的定义格式为 JSON 字符串,且对象配置支持一定的正则表达式。
MigrationObject 的定义如下: MigrationObject:{
        DBName:’待迁移库名’,
        NewDBName:”待迁移数据库在目标实例中映射的库名”
        SchemaName:’待迁移 Schema 名’,
        NewSchemaName:‘待迁移Schema在目标实例中映射的 Schema 名’,
        TableIncludes:[{
                   TableName: ‘待迁移表表名’,
                NewTableName:‘待迁移表在目标实例映射的表名’,
                FilterCondition:’where condition’,
                ColumnIncludes:[{
                        ColumnName:’待迁移表中需迁移列名’,
                        NewColumnName:‘待迁移列在目标实例中映射的列名’
                }]
                ColumnExcludes:[{
                        ColumnName:’待迁移表中不迁移列名’
                }]
        }]
        TableExcluce:[{                                — 不需要迁移表定义
                TableName:’待迁移库名不需要迁移表的表名’
        }]
        ViewIncludes:[{                            — 需要迁移视图定义
                ViewName:’待迁移视图名称’,
                New-ViewName:’待迁移视图在目标实例中映射的名称’
         }]
        ViewExcludes:[{                            — 不需要迁移视图定义
                ViewName:’不迁移视图名称’
         }]
           MaterializedViewIncludes:[{                    — 需要迁移物化视图定义
                MaterializedViewName:’待迁移物化视图名称’,
                NewMaterializedViewName:’待迁移物化视图在目标实例中映射的名称’
         }]
        MaterializedViewExcludes:[{                    — 不需要迁移物化视图定义
                MaterializedViewName:’不迁移物化视图名称’
         }]
        SequenceIncludes:[{                        — 需迁移序列定义
                SequenceName:’待迁移序列名称’,
                NewSequenceName:’待迁移序列在目标实例中映射的名称’
         }]
        SequenceExcludes:[{                        — 不需迁移序列定义
                SequenceName:’不迁移序列名称’
         }]
        FunctionIncludes:[{                            — 需迁移函数定义
                FunctionName:’待迁移函数名称’,
                NewFunctionName:’待迁移函数在目标实例中映射的名称’
         }]
        FunctionExcludes:[{                            — 不需迁移函数定义
                FunctionName:’不迁移函数名称’
         }]
        ProcedureIncludes:[{                        — 需迁移存储过程定义
                ProcedureName:’待迁移存储过程名称’,
                NewProcedureName:’待迁移存储过程在目标实例中映射的名称’
         }]
        ProcedureExcludes:[{                        — 不需迁移存储过程定义
                ProcedureName:’不迁移存储过程名称’
         }]
        SynonymIncludes:[{                            —需迁移同义词定义
                SynonymName:’待迁移同义词名称’,
                NewSynonymName:’待迁移同义词在目标实例中映射的名称’
         }]
        SynonymExcludes:[{                        —不需迁移同义词定义
                ProcedureName:’不迁移存储过程名称’
         }]
        UserDefinedTypeIncludes:[{                    — 需迁移自定义类型定义
                UserDefinedTypeName:’待迁移自定义类型名称’,
                NewUserDefinedTypeName:’待迁移自定义类型在目标实例中映射的名称’
         }]
        UserDefinedTypeExcludes:[{                    — 不需迁移自定义类型定义
                UserDefinedTypeName:’不迁移自定义类型名称’
         }]
        RuleIncludes:[{                                — 需迁移规则定义
                RuleName:’待迁移规则名称’,
                NewRuleName:’待迁移规则在目标实例中映射的名称’
         }]
        RuleExcludes:[{                            — 不需迁移规则定义
                UserDefinedTypeName:’不迁移规则名称’
         }]
        OperationIncludes:[{                        —需迁移操作符定义
                OperationName:’待迁移操作符名称’,
                NewOperationName:’待迁移操作符在目标实例中映射的名称’
         }]
        OperationExcludes:[{                        —不需迁移操作符定义
                OperationName:’不迁移操作符名称’
         }]
        DomainIncludes:[{                            —需迁移 domain 定义
                DomainName:’待迁移域名称’,
                NewDomainName:’待迁移域在目标实例中映射的名称’
         }]
        DomainExclude:[{                            —不需迁移 domain 定义
                OperationName:’不迁移域名称’
         }]
        AggregateInclude:[{                        —需迁移 aggregate 定义
                AggregateName:’待迁移 aggregate 名称’,
                NewAggregateName:’待迁移 aggregate 在目标实例中映射的名称’
         }]
        AggregateExclude:[{                        —不需迁移 aggregate 定义
                AggregateName:’不迁移 aggregate 名称’
         }]
        ExtensionIncludes:[{                        —需迁移 extension 定义
                ExtensionName:’待迁移扩展名称’,
                NewExtensionName:’待迁移扩展在目标实例中映射的名称’
         }]
        ExtensionExcludes:[{                        —不需迁移 extension 定义
                ExtensionName:’不迁移扩展名称’
         }]
}


其中:SchemaName 和 NewSchemaName 只用于 SQL Server,其他数据库的库名定义使用 DBName 和 NewDBName 这个参数。当用户只配置了 DBName,不配置其他子对象的规则,那么表示迁移这个数据库下面的所有对象。当用户配置了 DBName,且配置了部分对象的规则,那么不配置的对象默认不迁移。例如用户配置了 TableIncludes 规则,但是没有配置 ViewIncludes 规则,那么不迁移 View 对象。
各种对象名的定义可以支持如下的正则表达式:

  • 点号 . 表示匹配除 ‘\r\n’ 之外的任何单个字符
  • 星号 * 表示匹配前面子表达式任意次,h.*llo 匹配 hllo, heeeello 等字符串
  • 问号 ? 表示匹配前面子表达式零次或1次,h.?llo 匹配 hllo,hello,但不能匹配 haello
  • [characters] 字符集合,表示匹配方括号内任意一个字符,例如 h[aello] 匹配 hallo, hello
  • [^characters] 负值字符集合,表示不匹配方括号内任意一个字符,例如 h[^ae]llo 匹配 hcllo,hdllo,但是不能匹配 hallo,hello
  • [character1-character2] 字符范围,表示 character1-character2 范围内的字符都可以匹配,例如 [0-9],[a-z]


返回参数

参数名称数据类型参数说明
公共返回参数任务请求 ID


示例


下面简单演示通过 JAVA SDK 配置迁移任务的示例: private static void configureMigrationJob(String MigrationJobId){
        String MigrationJobName="jiangliutest";
        /*Source Endpoint*/
        String SourceEndpoint_InstanceType="RDS";
        String SourceEndpoint_Region="cn-hangzhou";
        String SourceEndpoint_InstanceId="rm-bp185gso372vbd1l8";
        String SourceEndpoint_UserName="*******";
        String SourceEndpoint_Password="*******";
        /*Destination Endpoint*/
        String DestinationEndpoint_InstanceType="RDS";
        String DestinationEndpoint_InstanceId="rm-bp1nx2h5fm3v6q26l";
        String DestinationEndpoint_UserName="******";
        String DestinationEndpoint_Password="******";
        Boolean MigrationMode_StructureIntialization=true;
        Boolean MigrationMode_DataIntialization=true;
        Boolean MigrationMode_DataSynchronization=true;
        String MigrationObjects="[{\"DBName\":\"jiangliutest\",\"NewDBName\":\"jiangliutest\","
                + "\"TableIncludes\":[{\"TableName\":\"t1\",\"NewTableName\":\"t1\"}]}]";
        ConfigureMigrationJobRequest request = new ConfigureMigrationJobRequest();
        request.setMigrationJobId(MigrationJobId);
        request.setMigrationJobName(MigrationJobName);
        request.setSourceEndpointRegion(SourceEndpoint_Region);
        request.setSourceEndpointInstanceType(SourceEndpoint_InstanceType);
        request.setSourceEndpointInstanceID(SourceEndpoint_InstanceId);
        request.setSourceEndpointUserName(SourceEndpoint_UserName);
        request.setSourceEndpointPassword(SourceEndpoint_Password);
        request.setDestinationEndpointInstanceType(DestinationEndpoint_InstanceType);
        request.setDestinationEndpointInstanceID(DestinationEndpoint_InstanceId);
        request.setDestinationEndpointUserName(DestinationEndpoint_UserName);
        request.setDestinationEndpointPassword(DestinationEndpoint_Password);
        request.setMigrationModeStructureIntialization(MigrationMode_StructureIntialization);
        request.setMigrationModeDataIntialization(MigrationMode_DataIntialization);
        request.setMigrationModeDataSynchronization(MigrationMode_DataSynchronization);
        request.setMigrationObject(MigrationObjects);
        try {
            ConfigureMigrationJobResponse response = client.getAcsResponse(request);
            System.out.println("Configure "+ MigrationJobId+ " Succeed");
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("Configure "+MigrationJobId + " Failed!");
            System.out.println(e.toString());
        }    
    }



展开
收起
云栖大讲堂 2017-10-31 16:06:11 1831 分享 版权
0 条回答
写回答
取消 提交回答