Oracle数据库的限制和准备工作

当您使用DTS传输Oracle的数据,或者将数据转储到Oracle数据库时,需要了解DTS支持的能力、功能限制和接入DTS的准备工作,以便您平稳地完成数据同步或迁移。

数据库限制

自建Oracle为源

限制项

说明

支持的版本

支持10g、11g、12c、18c、19c版本。

支持的架构

  • 支持单节点和RAC架构。

    说明

    RAC架构的Oracle数据库不支持增加或减少节点,否则会导致DTS任务失败。

  • 支持12c及以上版本的租户式和非租户式架构。

    说明

    一个任务仅能支持迁移一个Pluggable Database(PDB库)。

支持的数据

  • 支持常见的表、索引(含函数式索引)、数据类型、字符集等。支持的数据类型和字符集,请参见附录

  • 支持级联删除、更新操作。

  • 支持一级、二级分区表的DML操作,不支持分区表DDL操作(任务正常运行)。

  • 支持分布式事务日志解析。

  • 支持事务完全回滚和部分回滚操作。

  • 支持同步或迁移名称超过30个字节的对象。

  • 支持同步或迁移空对象empty_blob()和empty_clob()。

  • 支持同步或迁移虚拟列。

  • 支持同步或迁移混合列压缩(Hybrid Columnar Compression, HCC)。

  • 全量任务支持同步或迁移不可见列,增量任务不支持。

  • 表名、列名等属性名支持大小写映射。

网络带宽

须大于等于100 Mb/s。

业务要求

  • 日志量的峰值小于1 TB,平均每小时的日志量小于50 GB,峰值流量小于15 MB/s。

    重要

    DTS默认拉取整个数据库实例的日志,若非同步或迁移对象有大量数据变更,也会导致任务延迟。

  • 在执行批量数据更新或对大字段(如CLOB、BLOB、LONG等类型)数据进行大规模变更时,可能会导致任务延迟,建议将此类操作分批执行或尽可能避免执行。

  • 请避免无主键表频繁进行删除或修改操作,否则可能会导致任务延迟。

  • 请减少执行DDL操作的频率,建议每秒执行的DDL语句不超过10条,否则可能会导致任务延迟。

  • 请避免大事务操作(单个事务产生的日志量超过100 GB),否则可能会导致任务失败。

接入方式

  • 支持Oracle数据库的公网和私网IP接入。

  • 支持RAC架构下ScanIP、单节点的VIP或者物理IP接入。

  • 支持专线的方式接入,不支持RAC节点ScanIP专线接入。

  • 支持Active Data Guard(ADG)主库和备库方式接入。

    说明

    若接入DTS的Oracle为ADG备库且Online Redo文件未归档,DTS实例会产生延迟。

  • 支持Amazon RDS Oracle为源库。

其他限制

  • 执行数据同步或迁移前需评估源库和目标库的性能,同时建议业务低峰期执行数据同步或迁移。在全量任务阶段,DTS会占用源库一定读资源,可能会导致数据库的负载上升。一般情况下,对CPU的影响小于2个Core,对内存的影响小于4G,具体负载影响与数据库状态有关。

  • 待同步或迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致任务延迟、甚至目标数据库中出现重复数据。

  • Oracle为源支持写入字符集与数据库字符集不一致的场景。

    说明

    需要额外设置实际业务写入编码(source.column.encoding)。

  • 在任务运行期间禁止执行resetlogs命令,否则可能会导致DTS任务失败。

  • 不支持DCL操作。

  • 增量任务不支持同步或迁移触发器,需要关闭目标Oracle的触发器。

  • 增量任务不支持同步或迁移存在外键约束的数据。

  • 增量任务不支持同步或迁移使用Oracle Data Pump向源库导入的数据。

  • 同步或迁移无主键或无唯一键的数据时:

    • 数据写入速率慢,可能会导致任务延迟。

    • 无法保证数据的一致性,可能存在重复数据。

  • 不支持同步或迁移名称超过30个字节的对象。

  • 不支持同步或迁移连续的RENAME TABLE操作,否则可能会导致任务失败。

  • 不支持同步或迁移全局临时表(任务正常运行)。

  • 不支持同步或迁移含有默认值函数的表,否则会导致数据不一致。

  • 不支持同步或迁移默认值中含有表达式的表。

  • 不支持同步或迁移外部表。

  • 不支持同步或迁移计算列、加密列。

  • 不支持同步或迁移虚拟私有数据库(Virtual Private Database, VPD)。

  • 不支持同步或迁移dbms_scheduler和dbms_job创建的job。

  • 不支持同步或迁移Schema名称的变更操作。

  • 不支持同步或迁移嵌套表,否则会导致任务报错。

  • 不支持同步或迁移物化视图(Materialized View)。

  • 不支持同步或迁移包含关键字或者特殊字符的属性名的DDL操作。

  • 不支持ROWID变更操作(例如split partition、table move、table shrink、move partition key),否则可能会导致数据不一致或任务失败。

  • 不支持Secure Sockets Layer(SSL)加密传输模式。

  • 不支持Oracle Label Security模式。

Amazon RDS Oracle为源

限制项

说明

支持的版本

支持10g、11g、12c、18c、19c版本。

支持的架构

  • 支持单节点和RAC架构。

  • 12c、18c、19c版本仅支持非租户式架构。

支持的数据

  • 支持常见的表、索引(含函数式索引)、数据类型、字符集等。支持的数据类型和字符集,请参见附录

  • 支持级联删除、更新操作。

  • 支持一级、二级分区表的DML操作,不支持分区表DDL操作(任务正常运行)。

  • 支持分布式事务日志解析。

  • 支持事务完全回滚和部分回滚操作。

  • 支持同步或迁移名称超过30个字节的对象。

  • 支持同步或迁移空对象empty_blob()和empty_clob()。

  • 支持同步或迁移虚拟列。

  • 支持同步或迁移混合列压缩(Hybrid Columnar Compression, HCC)。

  • 全量任务支持同步或迁移不可见列,增量任务不支持。

  • 表名、列名等属性名支持大小写映射。

网络带宽

须大于等于100 Mb/s。

业务要求

  • 日志量的峰值小于1 TB,平均每小时的日志量小于50 GB,峰值流量小于15 MB/s。

    重要

    DTS默认拉取整个数据库实例的日志,若非同步或迁移对象有大量数据变更,也会导致任务延迟。

  • 在执行批量数据更新或对大字段(如CLOB、BLOB、LONG等类型)数据进行大规模变更时,可能会导致任务延迟,建议将此类操作分批执行或尽可能避免执行。

  • 请避免无主键表频繁进行删除或修改操作,否则可能会导致任务延迟。

  • 请减少执行DDL操作的频率,建议每秒执行的DDL语句不超过10条,否则可能会导致任务延迟。

  • 请避免大事务操作(单个事务产生的日志量超过100 GB),否则可能会导致任务失败。

接入方式

  • 支持Oracle数据库的公网和私网IP接入。

  • 支持RAC架构下ScanIP、单节点的VIP或者物理IP接入。

  • 支持专线的方式接入,不支持RAC节点ScanIP专线接入。

  • 支持Active Data Guard(ADG)主库和备库方式接入。

    说明

    若接入DTS的Oracle为ADG备库且Online Redo文件未归档,DTS实例会产生延迟。

其他限制

  • 执行数据同步或迁移前需评估源库和目标库的性能,同时建议业务低峰期执行数据同步或迁移。在全量任务阶段,DTS会占用源库一定读资源,可能会导致数据库的负载上升。一般情况下,对CPU的影响小于2个Core,对内存的影响小于4G,具体负载影响与数据库状态有关。

  • 待同步或迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致任务延迟、甚至目标数据库中出现重复数据。

  • Oracle为源支持写入字符集与数据库字符集不一致的场景。

    说明

    需要额外设置实际业务写入编码(source.column.encoding)。

  • 在任务运行期间禁止执行resetlogs命令,否则可能会导致DTS任务失败。

  • 不支持DCL操作。

  • 增量任务不支持同步或迁移触发器,需要关闭目标Oracle的触发器。

  • 增量任务不支持同步或迁移存在外键约束的数据。

  • 增量任务不支持同步或迁移使用Oracle Data Pump向源库导入的数据。

  • 同步或迁移无主键或无唯一键的数据时:

    • 数据写入速率慢,可能会导致任务延迟。

    • 无法保证数据的一致性,可能存在重复数据。

  • 不支持同步或迁移名称超过30个字节的对象。

  • 不支持同步或迁移连续的RENAME TABLE操作,否则可能会导致任务失败。

  • 不支持同步或迁移全局临时表(任务正常运行)。

  • 不支持同步或迁移含有默认值函数的表,否则会导致数据不一致。

  • 不支持同步或迁移默认值中含有表达式的表。

  • 不支持同步或迁移外部表。

  • 不支持同步或迁移计算列、加密列。

  • 不支持同步或迁移虚拟私有数据库(Virtual Private Database, VPD)。

  • 不支持同步或迁移dbms_scheduler和dbms_job创建的job。

  • 不支持同步或迁移Schema名称的变更操作。

  • 不支持同步或迁移嵌套表,否则会导致任务报错。

  • 不支持同步或迁移物化视图(Materialized View)。

  • 不支持同步或迁移包含关键字或者特殊字符的属性名的DDL操作。

  • 不支持ROWID变更操作(例如split partition、table move、table shrink、move partition key),否则可能会导致数据不一致或任务失败。

  • 不支持Secure Sockets Layer(SSL)加密传输模式。

  • 不支持Oracle Label Security模式。

Oracle为目标

限制项

说明

支持的版本

支持10g、11g、12c、18c、19c版本。

支持的架构

  • 支持单节点和RAC架构。

    说明

    RAC架构的Oracle数据库不支持增加或减少节点,否则会导致DTS任务失败。

  • 支持12c及以上版本的租户式和非租户式架构。

    说明

    一个任务仅能支持迁移一个Pluggable Database(PDB库)。

网络带宽

须大于等于100 Mb/s。

接入方式

  • 支持Oracle数据库的公网和私网IP接入。

  • 支持RAC架构下ScanIP、单节点的VIP或者物理IP接入。

  • 支持专线的方式接入,不支持RAC节点ScanIP专线接入。

  • 支持Active Data Guard(ADG)主库和备库方式接入。

    说明

    若接入DTS的Oracle为ADG备库且Online Redo文件未归档,DTS实例会产生延迟。

  • 支持Amazon RDS Oracle为目标库。

其他限制

  • 执行数据同步或迁移前需评估目标库的性能,同时建议业务低峰期执行数据同步或迁移。在全量任务阶段,DTS会占用目标库一定网络资源和写资源,可能会导致数据库的负载上升(例如源库和目标库的CPU负载在30%以下)。

  • DTS全量数据同步或迁移会并发执行INSERT操作,会导致目标数据库表产生部分碎片,因此全量同步或迁移完成后目标数据库存储空间会比源数据库大。

  • Oracle会将VARCHAR或VARCHAR2类型的空字符串处理为NULL。当您的实例是目标库为Oracle的异构数据库间的同步或迁移时,请取消Oracle数据库中VARCHAR和VARCHAR2类型字段的非空约束,否则可能会导致DTS实例运行失败。

  • 在Oracle中,VARCHAR、VARCHAR2等具有字符精度的字段最多存储4000个字节。当您的实例是目标库为Oracle的异构数据库间的同步或迁移时,若实例出现VARCHAR、VARCHAR2等类型字段写入数据失败时,可以尝试将该字段的类型修改为CLOB,然后重新启动DTS实例。

数据库配置

  • Oracle为源的全量任务:无需在源库执行特殊配置。

  • Oracle为源的增量任务:由于需要获取增量变更,需在Oracle数据库中完成如下配置以抓取和解析源库日志。

  • Oracle为目标的全量或增量任务:无需在目标库执行特殊配置。

自建Oracle为源

开启日志归档模式

  1. 检查源库是否已经开启归档模式。

    archive log list;
    说明
    • Database log modeArchive Mode则表示已开启归档模式,请执行开启补充日志

    • 归档日志保留时间必须大于等于3天。

  2. 重启数据库。

    重要

    为避免影响您的业务使用,请在业务低峰期操作。

    shutdown immediate;
    startup mount;
  3. 开启日志归档模式。

    alter database archivelog;
    alter database open;
  4. 检查日志归档配置是否生效。

    archive log list;

开启补充日志

目前DTS支持开启库级别补充日志和仅开启表级别补充日志两种模式,您可以根据业务需求,选择开启库级别补充日志或者表级别补充日志。

  • 开启库级别补充日志:DTS任务运行更为稳定。

  • 开启表级别补充日志:迁移粒度为库时,不支持迁移使用DDL新增的、且未开启补充日志的表,更节约源Oracle数据库的磁盘空间。

开启库级别补充日志

  1. 检查库级别补充日志是否开启。

    SELECT supplemental_log_data_min, supplemental_log_data_pk,supplemental_log_data_ui FROM v$database;

    如下所示为已开启库级别补充日志,无需向下执行。

    SUPPLEME SUP SUP
    -------- --- ---
    IMPLICIT YES YES
  2. 开启库级别最小补充日志。

    alter database add supplemental log data;
  3. 开启库级主键、唯一键补充日志。

    alter database add supplemental log data (primary key,unique index) columns;
  4. 检查库级别补充日志是否开启。

    SELECT supplemental_log_data_min, supplemental_log_data_pk,supplemental_log_data_ui FROM v$database;

开启表级别补充日志

  1. 打开最小补充日志。

    alter database add supplemental log data;
  2. 开启表级补充日志(两者选其一)。

    • 开启表级别主键补充日志

      alter table <table_name> add supplemental log data (primary key) columns;
    • 开启表级别全字段补充日志

      alter table <table_name> add supplemental log data (all) columns;

Amazon RDS Oracle为源

开启日志归档模式

执行如下命令,查看并设置归档日志保留时间。

exec rdsadmin.rdsadmin_util.show_configuration;
exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours', 72);

开启补充日志

目前DTS支持开启库级别补充日志和仅开启表级别补充日志两种模式,您可以根据业务需求,选择开启库级别补充日志或者表级别补充日志。

  • 开启库级别补充日志:DTS任务运行更为稳定。

  • 开启表级别补充日志:迁移粒度为库时,不支持迁移使用DDL新增的、且未开启补充日志的表,更节约源Oracle数据库的磁盘空间。

开启库级别补充日志

  1. 检查库级别补充日志是否开启。

    SELECT supplemental_log_data_min, supplemental_log_data_pk,supplemental_log_data_ui FROM v$database;

    如下所示为已开启库级别补充日志,无需向下执行。

    SUPPLEME SUP SUP
    -------- --- ---
    IMPLICIT YES YES
  2. 打开强制日志模式。

    exec rdsadmin.rdsadmin_util.force_logging(p_enable => true);
  3. 开启库级主键、唯一键补充日志。

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD', 'PRIMARY KEY');
    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD', 'UNIQUE');

开启表级别补充日志

  1. 开启表级别全字段补充日志。

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD', 'ALL');
  2. 开启表级别主键补充日志。

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD', 'PRIMARY KEY');

Oracle为目标

无需特殊配置。

数据库账号准备

Oracle为源

使用DTS同步或迁移Oracle的数据时,需要创建用于采集数据的账号并授权。采集数据的账号所需权限如下:

  • 库表结构和全量任务:需要授予DBA角色权限或者精细化授权。

  • 增量任务:需要精细授权。

    重要

    源为非租户式架构Oracle的增量任务,也可以授予数据采集账号DBA角色权限。

授予DBA角色权限

#创建数据库账号(以rdsdt_dtsacct为例)并进行授权
create user rdsdt_dtsacct identified by rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;

grant connect to rdsdt_dtsacct;
grant dba to rdsdt_dtsacct;

#使用rdsdt_dtsacct账号登录,检查是否授权完成
select * from user_tab_privs;
select granted_role from user_role_privs;

库表结构和全量任务精细授权

#创建数据库账号(以rdsdt_dtsacct为例)并进行授权
create user rdsdt_dtsacct identified by rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;

grant connect to rdsdt_dtsacct;
grant select_catalog_role to rdsdt_dtsacct;
grant select any table to rdsdt_dtsacct;

#使用rdsdt_dtsacct账号登录,检查是否授权完成
select * from user_role_privs;
select * from user_sys_privs;

增量任务精细授权

Oracle 10g、11g版本

#创建数据库账号(以rdsdt_dtsacct为例)并进行授权
create user rdsdt_dtsacct identified by rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;

grant connect to rdsdt_dtsacct;
grant select_catalog_role to rdsdt_dtsacct;

grant select any table to rdsdt_dtsacct;
grant select any transaction to rdsdt_dtsacct;

grant select on all_objects to rdsdt_dtsacct;
grant select on all_tab_cols to rdsdt_dtsacct;
grant select on dba_registry to rdsdt_dtsacct;
grant execute on sys.dbms_logmnr to rdsdt_dtsacct;

grant select on v_$log to rdsdt_dtsacct;
grant select on v_$logfile to rdsdt_dtsacct;
grant select on v_$standby_log to rdsdt_dtsacct;
-- Oracle以ADG备库接入时,需要授予v_$standby_log权限
grant select on v_$archived_log to rdsdt_dtsacct;
grant select on v_$parameter to rdsdt_dtsacct;
grant select on v_$database to rdsdt_dtsacct;
grant select on v_$active_instances to rdsdt_dtsacct;
grant select on v_$instance to rdsdt_dtsacct;
grant select on v_$logmnr_contents to rdsdt_dtsacct;

grant select on sys.USER$ to rdsdt_dtsacct;
grant select on sys.OBJ$ to rdsdt_dtsacct;
grant select on sys.COL$ to rdsdt_dtsacct;
grant select on sys.IND$ to rdsdt_dtsacct;
grant select on sys.ICOL$ to rdsdt_dtsacct;
grant select on sys.CDEF$ to rdsdt_dtsacct;
grant select on sys.CCOL$ to rdsdt_dtsacct;
grant select on sys.TABPART$ to rdsdt_dtsacct;
grant select on sys.TABSUBPART$ to rdsdt_dtsacct;
grant select on sys.TABCOMPART$ to rdsdt_dtsacct;

#使用rdsdt_dtsacct账号登录,检查是否授权完成
select * from user_role_privs;
select * from user_sys_privs;
select * from user_tab_privs;

Oracle 12c~19c(非租户式)

#创建数据库账号(以rdsdt_dtsacct为例)并进行授权
create user rdsdt_dtsacct IDENTIFIED BY rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;

grant connect to rdsdt_dtsacct;
grant select_catalog_role to rdsdt_dtsacct;
grant logmining to rdsdt_dtsacct;
grant execute_catalog_role to rdsdt_dtsacct;

grant select any table to rdsdt_dtsacct;
grant select any transaction to rdsdt_dtsacct;

grant select on all_objects to rdsdt_dtsacct;
grant select on all_tab_cols to rdsdt_dtsacct;
grant select on dba_registry to rdsdt_dtsacct;
grant execute on sys.dbms_logmnr to rdsdt_dtsacct;

grant select on v_$log to rdsdt_dtsacct;
grant select on v_$logfile to rdsdt_dtsacct;
grant select on v_$standby_log to rdsdt_dtsacct;
-- Oracle以ADG备库接入时,需要授予v_$standby_log权限
grant select on v_$archived_log to rdsdt_dtsacct;
grant select on v_$parameter to rdsdt_dtsacct;
grant select on v_$database to rdsdt_dtsacct;
grant select on v_$active_instances to rdsdt_dtsacct;
grant select on v_$instance to rdsdt_dtsacct;
grant select on v_$logmnr_contents to rdsdt_dtsacct;

grant select on sys.USER$ to rdsdt_dtsacct;
grant select on sys.OBJ$ to rdsdt_dtsacct;
grant select on sys.COL$ to rdsdt_dtsacct;
grant select on sys.IND$ to rdsdt_dtsacct;
grant select on sys.ICOL$ to rdsdt_dtsacct;
grant select on sys.CDEF$ to rdsdt_dtsacct;
grant select on sys.CCOL$ to rdsdt_dtsacct;
grant select on sys.TABPART$ to rdsdt_dtsacct;
grant select on sys.TABSUBPART$ to rdsdt_dtsacct;
grant select on sys.TABCOMPART$ to rdsdt_dtsacct;

#使用rdsdt_dtsacct账号登录,检查是否授权完成
select * from user_role_privs;
select * from user_sys_privs;
select * from user_tab_privs;

Oracle 12c~19c(租户式)

重要

PDB与CDB$ROOT中创建的账号名称(不包含全局账号的开头C##)需一致。

#切换至PDB,创建数据库账号(以rdsdt_dtsacct为例)并进行授权
alter session set container = ORCLPDB1;

create user rdsdt_dtsacct identified by rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;

grant connect to rdsdt_dtsacct;
grant select_catalog_role to rdsdt_dtsacct;
grant logmining TO rdsdt_dtsacct;
grant execute_catalog_role to rdsdt_dtsacct;

grant select any table to rdsdt_dtsacct;
grant select any transaction to rdsdt_dtsacct;

grant select on all_objects to rdsdt_dtsacct;
grant select on all_tab_cols to rdsdt_dtsacct;
grant select on dba_registry to rdsdt_dtsacct;
grant execute on sys.dbms_logmnr to rdsdt_dtsacct;

grant select on v_$pdbs to rdsdt_dtsacct;
grant select on v_$log to rdsdt_dtsacct;
grant select on v_$logfile to rdsdt_dtsacct;
grant select on v_$standby_log to rdsdt_dtsacct;
-- Oracle以ADG备库接入时,需要授予v_$standby_log权限
grant select on v_$archived_log to rdsdt_dtsacct;
grant select on v_$parameter to rdsdt_dtsacct;
grant select on v_$database to rdsdt_dtsacct;
grant select on v_$active_instances to rdsdt_dtsacct;
grant select on v_$instance to rdsdt_dtsacct;
grant select on v_$logmnr_contents to rdsdt_dtsacct;

grant select on sys.USER$ to rdsdt_dtsacct;
grant select on sys.OBJ$ to rdsdt_dtsacct;
grant select on sys.COL$ to rdsdt_dtsacct;
grant select on sys.IND$ to rdsdt_dtsacct;
grant select on sys.ICOL$ to rdsdt_dtsacct;
grant select on sys.CDEF$ to rdsdt_dtsacct;
grant select on sys.CCOL$ to rdsdt_dtsacct;
grant select on sys.TABPART$ to rdsdt_dtsacct;
grant select on sys.TABSUBPART$ to rdsdt_dtsacct;
grant select on sys.TABCOMPART$ to rdsdt_dtsacct;

#切换至CDB$ROOT,进行账号创建并授权
alter session set container = CDB$ROOT;

#创建数据库账号(以rdsdt_dtsacct为例)并进行授权(如使用此方式,则您需要修改Oracle数据库的默认参数)
alter session set "_ORACLE_SCRIPT"=true;
create user rdsdt_dtsacct identified by rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;
grant connect to rdsdt_dtsacct;
grant logmining to rdsdt_dtsacct;
grant execute_catalog_role to rdsdt_dtsacct;
grant select on v_$logmnr_contents to rdsdt_dtsacct;
grant execute on sys.dbms_logmnr to rdsdt_dtsacct;

#使用rdsdt_dtsacct账号登录,检查是否授权完成
select * from user_role_privs;
select * from user_sys_privs;
select * from user_tab_privs;

Amazon RDS Oracle(非租户式)

说明

建议使用Oracle SQL Developer进行授权操作。

#创建数据库账号(以RDSDT_DTSACCT为例)并进行授权
create user rdsdt_dtsacct identified by rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;

grant connect to rdsdt_dtsacct;
grant logmining to rdsdt_dtsacct;
grant execute_catalog_role to rdsdt_dtsacct;

grant select any table to rdsdt_dtsacct;
grant select any transaction to rdsdt_dtsacct;

exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_OBJECTS','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TAB_COLS','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_REGISTRY','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOG','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGFILE','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$PARAMETER','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ACTIVE_INSTANCES','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$INSTANCE','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR','RDSDT_DTSACCT','EXECUTE');

exec rdsadmin.rdsadmin_util.grant_sys_object('USER$','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('OBJ$','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('COL$','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('IND$',  'RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ICOL$','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('CDEF$','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('CCOL$','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('TABPART$','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('TABSUBPART$','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('TABCOMPART$','RDSDT_DTSACCT','SELECT');

#使用RDSDT_DTSACCT账号登录,检查是否授权完成
select * from user_role_privs;
select * from user_sys_privs;
select * from user_tab_privs;

Oracle为目标

使用DTS同步或迁移Oracle的数据时,需要创建用于复制数据的账号并授权。复制数据的账号所需权限如下:

  • 库表结构任务:需要授予DBA角色权限。

  • 全量和增量任务:需要授予resource角色权限。

授予DBA角色权限

#创建数据库账号(以rdsdt_dtsacct为例)并进行授权
create user rdsdt_dtsacct identified by rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;

grant connect to rdsdt_dtsacct;
grant dba to rdsdt_dtsacct;

#使用rdsdt_dtsacct账号登录,检查是否授权完成
select * from user_tab_privs;
select granted_role from user_role_privs;

授予resource角色权限

#创建数据库账号(以rdsdt_dtsacct为例)并进行授权
create user rdsdt_dtsacct identified by rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;

grant connect to rdsdt_dtsacct;
grant resource to rdsdt_dtsacct;

#使用rdsdt_dtsacct账号登录,检查是否授权完成
select * from user_tab_privs;
select granted_role from user_role_privs;

后续步骤

配置源或目标为Oracle的任务。更多信息,请参见同步方案概览迁移方案概览中的相关配置文档。

附录

DTS任务对Oracle数据类型和字符集的支持如下所示。

数据类型

支持

不支持

  • NUMBER

  • FLOAT

  • REAL

  • BINARY_FLOAT

  • CHAR [(size [BYTE | CHAR])]

  • NCHAR[(size)]

  • VARCHAR2(size [BYTE | CHAR])

  • NVARCHAR2(size)

  • CLOB

  • NCLOB

  • LONG

  • DATE

  • XMLTYPE:支持clob存储模式,不支持blob存储模式。

    说明

    支持Character Large Object(CLOB)存储模式,不支持Binary Large Object(BLOB)存储模式。

  • RAW(size)

  • LONG_RAW

  • BLOB

  • TIMESTAMP[fractional_seconds_precision]

  • TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE

  • TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE

  • INTERVAL YEAR [(year_precision)] TO MONTH

  • INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)]

  • SDO_GEOMETRY

  • SDO_TOPO_GEOMETRY

  • SDO_GEORASTER

  • ROWID

  • UROWID

  • ANYTYPE

  • ANYDATA

  • ANYDATASET

  • VARRAY

  • 自行定义的类型

字符集

支持

不支持

ASCII、ISO、UNICODE、US7ASCII、WE8HP、US8PC437、WE8EBCDIC285、WE8PC850、D7DEC、F7DEC、S7DEC、E7DEC、SF7ASCII、NDK7DEC、I7DEC、NL7DEC、CH7DEC、YUG7ASCII、SF7DEC、TR7DEC、IW7IS960、IN8ISCII、EE8ISO8859P2、SE8ISO8859P3、NEE8ISO8859P4、CL8ISO8859P5、AR8ISO8859P6、EL8ISO8859P7、IW8ISO8859P8、WE8ISO8859P9、NE8ISO8859P10、TH8TISASCII、BN8BSCII、VN8VN3、VN8MSWIN1258、WE8NEXTSTEP、AR8ASMO708PLUS、AR8EBCDICX、AR8XBASIC、EL8DEC、TR8DEC、WE8EBCDIC37、WE8EBCDIC37C、WE8EBCDIC500、WE8EBCDIC500C、WE8EBCDIC871、WE8EBCDIC284、EEC8EUROASCI、EEC8EUROPA3、LA8PASSPORT、BG8PC437S、EE8PC852、RU8PC866、RU8BESTA、IW8PC1507、RU8PC855、TR8PC857、CL8MACCYRILLIC、CL8MACCYRILLICS、WE8PC860、IS8PC861、EE8MSWIN1250、CL8MSWIN1251、ET8MSWIN923、BG8MSWIN、EL8MSWIN1253、IW8MSWIN1255、LT8MSWIN921、TR8MSWIN1254、WE8MSWIN1252、BLT8MSWIN1257、D8EBCDIC273、I8EBCDIC280、DK8EBCDIC277、S8EBCDIC278、F8EBCDIC297、IW8EBCDIC1086、N8PC865、BLT8CP921、LV8PC1117、LV8PC8LR、LV8RST104090、CL8KOI8R、BLT8PC775、F7SIEMENS9780X、E7SIEMENS9780X、S7SIEMENS9780X、DK7SIEMENS9780X、N7SIEMENS9780X、I7SIEMENS9780X、D7SIEMENS9780X、WE8GCOS7、EL8GCOS7、US8BS2000、D8BS2000、F8BS2000、E8BS2000、DK8BS2000、S8BS2000、WE8BS2000、WE8BS2000L5、CL8BS2000、WE8DG、WE8NCR4970、WE8ROMAN8、EE8MACCE、EE8MACCES、EE8MACCROATIAN、EE8MACCROATIANS、TR8MACTURKISH、TR8MACTURKISHS、IS8MACICELANDIC、IS8MACICELANDICS、EL8MACGREEK、EL8MACGREEKS、IW8MACHEBREW、IW8MACHEBREWS、US8ICL、WE8ICL、WE8ISOICLUK、WE8MACROMAN8、WE8MACROMAN8S、TH8MACTHAI、TH8MACTHAIS、HU8CWI2、EL8PC437S、EL8PC737、LT8PC772、LT8PC774、EL8PC869、EL8PC851、CDN8PC863、HU8ABMOD、AR8ASMO8X、AR8HPARABIC8T、AR8NAFITHA711、AR8NAFITHA711T、AR8SAKHR707、AR8SAKHR707T、AR8MUSSAD768、AR8MUSSAD768T、AR8ADOS710、AR8ADOS710T、AR8ADOS720、AR8ADOS720T、AR8APTEC715、AR8APTEC715T、AR8MSAWIN、AR8NAFITHA721、AR8NAFITHA721T、AR8SAKHR706、AR8ARABICMAC、AR8ARABICMACS、AR8ARABICMACT、LA8ISO6937、US8NOOP、WE8DEC、WE8DECTST、JA16VMS、JA16EUC、JA16EUCYEN、JA16EUCTILDE、JA16DBCS、JA16SJIS、JA16SJISTILDE、JA16SJISYEN、JA16EBCDIC930、JA16MACSJIS、KO16KSC5601、KO16DBCS、KO16KSCCS、KO16MSWIN949、ZHS16CGB231280、ZHS16MACCGB231280、ZHS16GBK、ZHS16DBCS、ZHS32GB18030、ZHT32EUC、ZHT32SOPS、ZHT16DBT、ZHT32TRIS、ZHT16DBCS、ZHT16BIG5、ZHT16CCDC、ZHT16MSWIN950、AL24UTFFSS、UTF8、UTFE、KO16TSTSET、JA16TSTSET2、JA16TSTSET、US16TSTFIXED、AL16UTF16LE、TH8TISEBCDIC、TH8TISEBCDICS、BLT8EBCDIC1112、BLT8EBCDIC1112S、CE8BS2000、CL8EBCDIC1025、CL8EBCDIC1025C、CL8EBCDIC1025R、CL8EBCDIC1025S、CL8EBCDIC1025X、CL8EBCDIC1158、CL8EBCDIC1158R、D8EBCDIC1141、DK8EBCDIC1142、EE8BS2000、EE8EBCDIC870、EE8EBCDIC870C、EE8EBCDIC870S、EL8EBCDIC423R、EL8EBCDIC875、EL8EBCDIC875S、EL8EBCDIC875R、F8EBCDIC1147、I8EBCDIC1144、WE8BS2000E、WE8EBCDIC1047、WE8EBCDIC1047E、WE8EBCDIC1140、WE8EBCDIC1140C、WE8EBCDIC1145、WE8EBCDIC1146、WE8EBCDIC1148、WE8EBCDIC1148C、AR8EBCDIC420S、IW8EBCDIC424、IW8EBCDIC424S、TR8EBCDIC1026、TR8EBCDIC1026S、ZHT16HKSCS、ZHT16HKSCS31、BLT8ISO8859P13、WE8ISO8859P1、WE8ISO8859P15、AR8MSWIN1256、S8EBCDIC1143、AZ8ISO8859P9E、CEL8ISO8859P14、CL8ISOIR111、CL8KOI8U、WE8PC858、WE8EBCDIC924、AL32UTF8、AL16UTF16

其余类型的字符集