数据库限制和数据库配置
自建Oracle为源
数据库限制
数据库版本、架构限制 |
|
||
数据库配置限制 |
|
||
数据库接入方式限制 |
|
||
迁移对象限制 |
|
||
其他限制 |
|
数据库配置
Oracle为源链路全量迁移无需在源库执行特殊配置。
Oracle为源的增量链路,需要抓取、解析源端日志以获取增量变更,需要客户在Oracle数据库中完成如下配置。
1)开启日志归档模式
DTS增量运行过程中,需要抓取源库online redolog或者archived redolog(如果online redolog找不到需要的增量日志,会自动查找archived redolog),因此需要在源库开启日志归档模式,如下介绍了检查、开启归档日志的步骤。
第一步:检查源库是否已经开启归档模式(如果已经开启跳过后续步骤)
archive log list;
第二步:mount方式重启数据库(此过程需要重启数据库,客户根据实际情况操作)
shutdown immediate; startup mount;
第三步:开启日志归档模式
alter database archivelog; alter database open;
第四步:检查日志归档配置是否生效
archive log list;
2)开启补充日志
DTS在增量同步时,还需要开启源库补充日志。目前DTS支持开启库级别补充日志和仅开启表级别补充日志两种模式,开启库级别补充日志,DTS任务运行更为稳定;开启表级别补充日志,不支持整库迁移中新建未开启补充日志的表,则更节约源Oracle数据库的磁盘空间。
模式一:检查、开启库级别补充日志:
检查库级别补充日志是否开启 SELECT supplemental_log_data_min, supplemental_log_data_pk,supplemental_log_data_ui FROM v$database; 开启库级最小补充日志 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 database add supplemental log data (primary key,unique index) columns; 开启表级补充日志(两者选其一) : 1.alter table table_name add supplemental log data (primary key) columns; 2.alter table table_name add supplemental log data (all) columns;
AWS RDS4Oracle为源
AWS RDS4Oracle为源数据库限制与自建Oracle一致,目前仅支持10G、11G、12C、18C、19C版本(12C以上版本仅支持非租户式架构)。但是DTS增量迁移在数据库配置上有所区别,如下详细介绍配置操作。
数据库配置
1)开启日志归档模式
第一步:查看并设置归档日志保留时间
exec rdsadmin.rdsadmin_util.show_configuration; exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours', 72)
2)开启补充日志
AWS RDS4Oracle为源链路同样支持两种模式:库级别和表级别补充日志。
模式一:检查、开启库级别补充日志:
检查库级别补充日志是否开启 SELECT supplemental_log_data_min, supplemental_log_data_pk,supplemental_log_data_ui FROM v$database; 打开强制日志模式。 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为目标
链路限制
数据库版本、架构限制 |
1.支持Oracle数据库版本有10G、11G、12C、18C和19C。 2.支持单节点、rac实例架构。 3.支持12C及以上版本的租户式和非租户式架构; |
||
数据库接入方式限制 |
1.支持自建Oracle数据库的公、私网ip接入。 2.支持RAC架构下ScanIP、单节点的VIP或者物理IP接入。 3.支持专线的方式接入,其中不支持RAC节点ScanIP专线接入。 4.支持ADG主、备库方式接入。 5.支持AWS RDS4Oracle为源接入。 |
||
其他限制 |
1.执行数据迁移前需评估目标库的性能,同时建议业务低峰期执行数据迁移。否则全量数据迁移时,DTS会占用目标库一定网络资源和写资源,可能导致数据库的负载上升。 2.由于DTS全量数据迁移并发执行insert操作,会导致目标数据库表产生部分碎片,因此全量迁移完成后目标数据库存储空间会比源实例库大。 |
数据库配置
Oracle为目标库的链路,全量迁移、增量迁移无需在目标库执行特殊配置。
数据库账号权限准备
Oracle作为源
DTS迁移过程中,需要创建数据采集账号并授权。结构和全量迁移,需要给数据采集账号授予DBA角色或者精细化授权,增量迁移需要抓取源端日志,需要授予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; --授予权限:create session select granted_role from user_role_privs; --授予角色:connect、dba
结构迁移、全量精细授权
#创建数据库账号(以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; 校验命令(使用新建账号登陆):select * from user_role_privs; -- 授予系统权限 grant select any table to rdsdt_dtsacct; 校验命令(使用新建账号登陆):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; 校验命令(使用新建账号登陆):select * from user_role_privs; -- 授予系统权限 grant select any table to rdsdt_dtsacct; grant select any transaction to rdsdt_dtsacct; 校验命令(使用新建账号登陆):select * from user_sys_privs; -- 授予对象权限 -- 普通对象 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; -- ADG备库接入,需要给予该视图权限;主库接入不需要 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; 校验命令(使用新建账号登陆):select * from user_tab_privs;
Oracle 12G~19G(非租户式)
#创建数据库账号(以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; 校验命令(使用新建账号登陆):select * from user_role_privs; -- 授予系统权限 grant select any table to rdsdt_dtsacct; grant select any transaction to rdsdt_dtsacct; 校验命令(使用新建账号登陆):select * from user_sys_privs; -- 授予对象权限 -- 普通对象 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; -- ADG备库接入,需要给予该视图权限;主库接入不需要 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; 校验命令(使用新建账号登陆):select * from user_tab_privs;
Oracle 12G~19G(租户式)
#切换至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; 校验命令(使用新建账号登陆):select * from user_role_privs; -- 授予系统权限 grant select any table to rdsdt_dtsacct; grant select any transaction to rdsdt_dtsacct; 校验命令(使用新建账号登陆):select * from user_sys_privs; -- 授予对象权限 -- 普通对象 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; -- ADG备库接入,需要给予该视图权限;主库接入不需要 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; 校验命令(使用新建账号登陆):select * from user_tab_privs; #切换至CDB$ROOT,并在如下两种方式选其一,进行账号创建并授权 alter session set container = <CDB$ROOT>; 方式一:创建C##开头的全局账号(以C##rdsdt_dtsacct为例)并进行授权 create user c##rdsdt_dtsacct identified by rdsdt_dtsacct; grant create session to c##rdsdt_dtsacct; grant connect to c##rdsdt_dtsacct; grant logmining to c##rdsdt_dtsacct; grant execute_catalog_role to c##rdsdt_dtsacct; grant select on v_$logmnr_contents to c##rdsdt_dtsacct; grant execute on sys.dbms_logmnr to c##rdsdt_dtsacct; grant select on v$database to rdsdt_dtsacct; 方式二:创建数据库账号(以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;
AWS RDS4Oracle 10G、11G、12C、18C、19C(非租户)接入方式
#创建数据库账号(以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; 校验命令(使用新建账号登陆):select * from user_role_privs; -- 授予系统权限 grant select any table to rdsdt_dtsacct; grant select any transaction to rdsdt_dtsacct; 校验命令(使用新建账号登陆):select * from user_sys_privs; -- 授予对象权限 -- 系统视图 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'); 校验命令(使用新建账号登陆):select * from user_tab_privs;
Oracle作为目标
DTS迁移过程中,需要创建数据复制账号并授权,结构迁移需要给数据采集账号授予DBA角色,全量迁移和增量迁移需要给数据采集账号授予resource角色。
结构迁移 |
全量迁移 |
增量迁移 |
DBA角色 |
resource角色 |
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; --授予权限:create session select granted_role from user_role_privs; --授予角色:connect、dba
全量迁移、增量迁移授予resoure权限
#创建数据库账号(以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; --授予权限:create session select granted_role from user_role_privs; --授予角色:connect、resource