当您使用DTS传输Oracle的数据,或者将数据转储到Oracle数据库时,需要了解DTS支持的能力、功能限制和接入DTS的准备工作,以便您平稳地完成数据同步或迁移。
数据库限制
自建Oracle为源
限制项 | 说明 |
支持的版本 | 支持10g、11g、12c、18c、19c版本。 |
支持的架构 |
|
支持的数据 |
|
网络带宽 | 须大于等于100 Mb/s。 |
业务要求 |
|
接入方式 |
|
其他限制 |
|
Amazon RDS Oracle为源
限制项 | 说明 |
支持的版本 | 支持10g、11g、12c、18c、19c版本。 |
支持的架构 |
|
支持的数据 |
|
网络带宽 | 须大于等于100 Mb/s。 |
业务要求 |
|
接入方式 |
|
其他限制 |
|
Oracle为目标
限制项 | 说明 |
支持的版本 | 支持10g、11g、12c、18c、19c版本。 |
支持的架构 |
|
网络带宽 | 须大于等于100 Mb/s。 |
接入方式 |
|
其他限制 |
|
数据库配置
Oracle为源的全量任务:无需在源库执行特殊配置。
Oracle为源的增量任务:由于需要获取增量变更,需在Oracle数据库中完成如下配置以抓取和解析源库日志。
Oracle为目标的全量或增量任务:无需在目标库执行特殊配置。
自建Oracle为源
开启日志归档模式
检查源库是否已经开启归档模式。
archive log list;
说明若Database log mode为Archive Mode则表示已开启归档模式,请执行开启补充日志。
归档日志保留时间必须大于等于3天。
重启数据库。
重要为避免影响您的业务使用,请在业务低峰期操作。
shutdown immediate; startup mount;
开启日志归档模式。
alter database archivelog; alter database open;
检查日志归档配置是否生效。
archive log list;
开启补充日志
目前DTS支持开启库级别补充日志和仅开启表级别补充日志两种模式,您可以根据业务需求,选择开启库级别补充日志或者表级别补充日志。
开启库级别补充日志:DTS任务运行更为稳定。
开启表级别补充日志:迁移粒度为库时,不支持迁移使用DDL新增的、且未开启补充日志的表,更节约源Oracle数据库的磁盘空间。
开启库级别补充日志
检查库级别补充日志是否开启。
SELECT supplemental_log_data_min, supplemental_log_data_pk,supplemental_log_data_ui FROM v$database;
如下所示为已开启库级别补充日志,无需向下执行。
SUPPLEME SUP SUP -------- --- --- IMPLICIT YES YES
开启库级别最小补充日志。
alter database add supplemental log data;
开启库级主键、唯一键补充日志。
alter database add supplemental log data (primary key,unique index) columns;
检查库级别补充日志是否开启。
SELECT supplemental_log_data_min, supplemental_log_data_pk,supplemental_log_data_ui FROM v$database;
开启表级别补充日志
打开最小补充日志。
alter database add supplemental log data;
开启表级补充日志(两者选其一)。
开启表级别主键补充日志
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数据库的磁盘空间。
开启库级别补充日志
检查库级别补充日志是否开启。
SELECT supplemental_log_data_min, supplemental_log_data_pk,supplemental_log_data_ui FROM v$database;
如下所示为已开启库级别补充日志,无需向下执行。
SUPPLEME SUP SUP -------- --- --- IMPLICIT YES YES
打开强制日志模式。
exec rdsadmin.rdsadmin_util.force_logging(p_enable => true);
开启库级主键、唯一键补充日志。
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD', 'PRIMARY KEY'); exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD', 'UNIQUE');
开启表级别补充日志
开启表级别全字段补充日志。
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD', 'ALL');
开启表级别主键补充日志。
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;
后续步骤
附录
DTS任务对Oracle数据类型和字符集的支持如下所示。
数据类型
支持 | 不支持 |
|
|
字符集
支持 | 不支持 |
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 | 其余类型的字符集 |