数据传输服务DTS(Data Transmission Service)支持将自建Oracle迁移至云原生数据仓库AnalyticDB PostgreSQL,帮助您构建实时数仓。

前提条件

  • 自建Oracle数据库的版本为9i、10g、11g、12c、18c或19c版本。
  • 自建Oracle数据库已开启归档模式(ARCHIVELOG),设置合理的归档日志保持周期且归档日志能够被访问,详情请参见ARCHIVELOG
  • 自建Oracle数据库已开启Supplemental Logging,且已开启supplemental_log_data_pk和supplemental_log_data_ui,详情请参见Supplemental Logging
  • 目标云原生数据仓库AnalyticDB PostgreSQL实例的地域为华东2(上海)、华北2(北京)、华南1(深圳),如未创建实例,请参见创建云原生数据仓库AnalyticDB PostgreSQL实例

费用说明

迁移类型 链路配置费用 公网流量费用
结构迁移和全量数据迁移 不收费。 通过公网将数据迁移出阿里云时将收费,详情请参见产品定价
增量数据迁移 收费,详情请参见产品定价

注意事项

  • DTS在执行全量数据迁移时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升,您需要在执行数据迁移前评估数据迁移对源库和目标库性能的影响,同时建议您在业务低峰期执行数据迁移。
  • 对于迁移失败的任务,DTS会触发自动恢复。在您将业务切换至目标库之前,请务必先停止或释放该任务,避免该任务被自动恢复,导致源端数据覆盖目标库的数据。

迁移类型说明

迁移类型 说明
结构迁移 DTS将源库中待迁移对象的结构定义迁移到目标库。目前DTS支持的对象包括:table、index、constraint、function、sequence和view。
警告
  • 此场景属于异构数据库间的数据迁移,DTS在执行结构迁移时数据类型无法完全对应,请谨慎评估数据类型的映射关系对业务的影响,详情请参见异构数据库间的数据类型映射关系
  • 对于分区表,DTS会丢弃分区定义,您需要在目标库自行定义。
全量数据迁移 DTS将源库中待迁移对象的存量数据全部迁移至目标库。
说明 在结构迁移和全量数据迁移完成之前,请勿对迁移对象执行DDL操作,否则可能导致迁移失败。
增量数据迁移 DTS在全量数据迁移的基础上轮询并捕获自建Oracle数据库产生的redo log,将自建Oracle数据库的增量更新数据实时迁移至目标库。

在增量数据迁移阶段,DTS支持同步的SQL语句如下:

  • DML:INSERT、UPDATE、DELETE
  • DDL:CREATE TABLE、ALTER TABLE、DROP TABLE、TRUNCATE TABLE

通过增量数据迁移可以实现在自建应用不停服的情况下,平滑地完成数据迁移。

数据库账号所需权限

数据库 结构迁移 全量迁移 增量数据迁移
自建Oracle数据库 Schema的owner权限 Schema的owner权限 DBA
云原生数据仓库AnalyticDB PostgreSQL 目标库的读写权限 目标库的读写权限 目标库的读写权限

数据库账号创建及授权方法:

注意 如果需要执行增量数据迁移,但是不允许授予DBA权限,您可以参照以下内容为数据库账号授予更精细化的权限。

create session;
connect;
resource;
execute on sys.dbms_logmnr;
select on v_$logmnr_contents;
select on v_$log;
select on v_$logfile;
select on v_$archived_log;
select on v_$logmnr_logs;
select on v_$parameter;
select on v_$database;
select on all_objects;
select on all_tab_cols;
select on dba_registry;
select any table;
select any transaction;
select on v$active_instances;
select on v$instance;
select on sys.USER$;
select on SYS.OBJ$;
select on SYS.COL$;
select on SYS.IND$;
select on SYS.ICOL$;
select on SYS.CDEF$;
select on SYS.CCOL$;
select on SYS.TABPART$;
select on SYS.TABSUBPART$;
select on SYS.TABCOMPART$;
select on gv_$listener_network;
#需要对PDB和CDB同时授权
#PDB权限:
create   session;
connect;
resource;
select on  all_objects;
select on  all_tab_cols;
select on  dba_registry;
select any table;
select any transaction;
select on v_$log;
select on v_$logfile;
select on v_$archived_log;
select on v_$parameter;
select on v_$database;
select on v_$active_instances;
select on v_$instance;
select on V_$PDBS;
select on sys.USER$;
select on SYS.OBJ$;
select on SYS.COL$;
select on SYS.IND$;
select on SYS.ICOL$;
select on SYS.CDEF$;
select on SYS.CCOL$;
select on SYS.TABPART$;
select on SYS.TABSUBPART$;
select on SYS.TABCOMPART$;

#CDB权限:
create   session;
LOGMINING;
select on v_$logmnr_contents;

#本示例以名称为dtstest的数据库账号为例介绍授权命令
create user dtstest IDENTIFIED BY rdsdt_dtsacct;
grant create session to dtstest;
grant connect to dtstest;
grant resource to dtstest;
grant execute on sys.dbms_logmnr to dtstest;
grant select on v_$logmnr_contents to dtstest;
grant select on v_$log to dtstest;
grant select on v_$logfile to dtstest;
grant select on v_$archived_log to dtstest;
grant select on v_$logmnr_logs to dtstest;
grant select on v_$parameter to dtstest;
grant select on v_$database to dtstest;
grant select on all_objects to dtstest;
grant select on all_tab_cols to dtstest;
grant select on dba_registry to dtstest;
grant select any table to dtstest;
grant select any transaction to dtstest;
grant select on v$active_instances to dtstest;
grant select on v$instance to dtstest;
grant select on sys.USER$ to dtstest;
grant select on SYS.OBJ$ to dtstest;
grant select on SYS.COL$ to dtstest;
grant select on SYS.IND$ to dtstest;
grant select on SYS.ICOL$ to dtstest;
grant select on SYS.CDEF$ to dtstest;
grant select on SYS.CCOL$ to dtstest;
grant select on SYS.TABPART$ to dtstest;
grant select on SYS.TABSUBPART$ to dtstest;
grant select on SYS.TABCOMPART$ to dtstest;
grant select on gv_$listener_network to dtstest;
#本示例以名称为dtstest的数据库账号为例介绍授权命令,需要对PDB和CDB同时授权
#PDB授权示例:
create user dtstest IDENTIFIED BY rdsdt_dtsacct;
grant create  session to dtstest;
grant connect  to dtstest;
grant resource to dtstest;
grant select on  all_objects to dtstest;
grant select on  all_tab_cols to dtstest;
grant select on  dba_registry to dtstest;
grant select any table to dtstest;
grant select any transaction to dtstest;
-- v$log privileges
grant select on v_$log to dtstest;
-- v$logfile privileges
grant select on v_$logfile to dtstest;
-- v$archived_log privileges
grant select on v_$archived_log to dtstest;
-- v$parameter privileges
grant select on v_$parameter to dtstest;
-- v$database privileges
grant select on v_$database to dtstest;
-- v$active_instances privileges
grant select on v_$active_instances to dtstest;
-- v$instance privileges
grant select on v_$instance to dtstest;
-- V$PDBS privileges
grant select on V_$PDBS to dtstest;
grant select on sys.USER$ to dtstest;
grant select on SYS.OBJ$ to dtstest;
grant select on SYS.COL$ to dtstest;
grant select on SYS.IND$ to dtstest;
grant select on SYS.ICOL$ to dtstest;
grant select on SYS.CDEF$ to dtstest;
grant select on SYS.CCOL$ to dtstest;
grant select on SYS.TABPART$ to dtstest;
grant select on SYS.TABSUBPART$ to dtstest;
grant select on SYS.TABCOMPART$ to dtstest;

#CDB授权示例:
create user dtstest IDENTIFIED BY rdsdt_dtsacct;
grant create   session to dtstest;
grant LOGMINING TO dtstest;
-- v$logmnr_contents privileges
grant select on v_$logmnr_contents to dtstest;

操作步骤

  1. 登录数据传输控制台
  2. 在左侧导航栏,单击数据迁移
  3. 迁移任务列表页面顶部,选择迁移的目标实例所属地域。
    选择地域
  4. 单击页面右上角的创建迁移任务
  5. 配置迁移任务的源库和目标库连接信息。
    配置源和目标库信息
    类别 配置 说明
    任务名称 DTS会自动生成一个任务名称,建议配置具有业务意义的名称(无唯一性要求),便于后续识别。
    源库信息 实例类型 根据源库的部署位置进行选择,本文以ECS上的自建数据库为例介绍配置流程。
    说明 当自建数据库为其他实例类型时,您还需要执行相应的准备工作,详情请参见准备工作概览
    实例地区 选择部署了Oracle数据库的ECS实例所属的地域。
    ECS实例ID 选择自建Oracle数据库所属的ECS实例ID。
    数据库类型 选择Oracle
    端口 填入自建Oracle数据库的服务端口,默认为1521
    实例类型
    • 非RAC实例:选择该项后,您还需要填写SID信息。
    • RAC实例:选择该项后,您还需要填写ServiceName信息。
    本案例选择为非RAC实例
    SID 填写自建Oracle数据库的SID信息。
    数据库账号 填入自建Oracle数据库的数据库账号,权限要求请参见数据库账号所需权限
    数据库密码 填入该数据库账号的密码。
    说明 源库信息填写完毕后,您可以单击数据库密码后的测试连接来验证填入的源库信息是否正确。源库信息填写正确则提示测试通过;如果提示测试失败,单击测试失败后的诊断,根据提示调整填写的源库信息。
    目标库信息 实例类型 选择AnalyticDB for PostgreSQL
    实例地区 选择目标云原生数据仓库AnalyticDB PostgreSQL实例所属地域。
    实例ID 选择目标云原生数据仓库AnalyticDB PostgreSQL实例ID。
    数据库名称 填入迁入数据的目标数据库名称。
    数据库账号 填入目标云原生数据仓库AnalyticDB PostgreSQL的数据库账号,权限要求请参见数据库账号所需权限
    数据库密码 填入该数据库账号的密码。
  6. 配置完成后,单击页面右下角的授权白名单并进入下一步
    此步骤会将DTS服务器的IP地址自动添加到ECS实例的内网入方向安全规则和云原生数据仓库AnalyticDB PostgreSQL的白名单中,用于保障DTS服务器能够正常连接源和目标实例。
  7. 选择迁移类型、操作类型和迁移对象。
    选择迁移类型和对象
    配置 说明
    迁移类型
    • 如果只需要执行全量迁移,同时选中结构迁移全量数据迁移
    • 如果需要执行不停机迁移,同时选中结构迁移全量数据迁移增量数据迁移
    说明 如果没有选择增量数据迁移,为保障数据一致性,数据迁移期间请勿在源库中写入新的数据。
    操作类型 根据业务需求,选择增量数据迁移阶段需要同步的操作类型,默认全部选中。
    迁移对象 迁移对象框中单击待迁移的对象,然后单击向右小箭头图标将其移动至已选择对象框。
    说明
    • 迁移对象选择的粒度为Schema、表、列。
    • 默认情况下,迁移对象在目标库中的名称与源库保持一致。如果您需要改变迁移对象在目标库中的名称,需要使用对象名映射功能,详情请参见库表列映射
    • 如果使用了对象名映射功能,可能会导致依赖这个对象的其他对象迁移失败。
    为目标对象名添加引号 选择是否需要为目标对象名添加引号。如果选择为,且存在下述情况,DTS在结构初始化阶段和增量数据迁移阶段会为目标对象添加单引号或双引号:
    • 源库所属的业务环境对大小写敏感且大小写混用。
    • 源表名不是以字母开头,且包含字母、数字或特殊字符以外的字符。
      说明 特殊字符仅支持下划线(_),井号(#)和美元符号($)。
    • 待迁移的Schema、表或列名称是目标库的关键字、保留字或非法字符。
  8. 设置待迁移的表在云原生数据仓库AnalyticDB PostgreSQL中的主键列和分布键信息。
    Oracle迁移ADBPG高级配置
    说明
    • 关于主键列和分布键的详细说明,请参见表的约束定义表分布键定义
    • 如果存在无主键表,本页面将出现无主键表全部设置ROWID作为主键和分布键选项,选中该选项后,DTS会在目标表中增加ROWID字段作为主键和分布键。
  9. 单击页面右下角的预检查并启动
    注意
    • 在迁移任务正式启动之前,会先进行预检查。只有通过预检查,DTS才能迁移数据。
    • 如果预检查失败,单击具体检查项后的提示图标,查看失败详情。根据提示修复后,重新进行预检查。
  10. 预检查通过后,单击下一步
  11. 在弹出的购买配置确认对话框,选择链路规格并选中数据传输(按量付费)服务条款
  12. 单击购买并启动,迁移任务正式开始。
    • 结构迁移+全量数据迁移

      请勿手动结束迁移任务,否则可能会导致数据不完整。您只需等待迁移任务完成即可,迁移任务会自动结束。

    • 结构迁移+全量数据迁移+增量数据迁移

      迁移任务不会自动结束,您需要手动结束迁移任务。

      注意 请选择合适的时间手动结束迁移任务,例如业务低峰期或准备将业务切换至目标集群时。
      1. 观察迁移任务的进度变更为增量迁移,并显示为无延迟状态时,将源库停写几分钟,此时增量迁移的状态可能会显示延迟的时间。
      2. 等待迁移任务的增量迁移再次进入无延迟状态后,手动结束迁移任务。结束增量迁移任务