同步链路手册-Oracle链路限制、数据库配置和账号授权

简介: DTS链路手册-Oracle篇-Oracle链路限制、数据库配置和账号授权

数据库限制和数据库配置

自建Oracle为源

数据库限制

数据库版本、架构限制

  • 支持Oracle数据库版本有10G、11G、12C、18C和19C。
  • 支持单节点、rac实例架构。
  • 支持12C及以上版本的租户式和非租户式架构;

数据库配置限制

  • 增量限制
  • 数据库已开启ARCHIVELOG(归档模式),并且必须保证归档日志保留3天以上。
  • 数据库已开启Supplemental Logging。

数据库接入方式限制

  • 支持自建Oracle数据库的公、私网ip接入。
  • 支持RAC架构下ScanIP、单节点的VIP或者物理IP接入。
  • 支持专线的方式接入,其中不支持RAC节点ScanIP专线接入。
  • 支持ADG主、备库方式接入。
  • 支持AWS RDS4Oracle为源接入。

迁移对象限制

  • 待迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致同步链路延迟、甚至目标数据库中出现重复数据。
  • 如果您的自建Oracle版本为12c及以上,待迁移表的名称长度需不超过30个字节。

其他限制

  • 执行数据迁移前需评估源库和目标库的性能,同时建议业务低峰期执行数据迁移。否则全量数据迁移时,DTS会占用源库一定读资源,可能导致数据库的负载上升。
  • Oracle为源支持写入字符集与数据库字符集不一致的场景,需要额外设置参数source.column.encoding。

数据库配置

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角色
  • 精细授权
  • 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


相关文章
|
17天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
56 7
|
1月前
|
存储 Oracle 关系型数据库
Dataphin常见问题之想要周期执行任务如何解决
Dataphin是阿里云提供的一站式数据处理服务,旨在帮助企业构建一体化的智能数据处理平台。Dataphin整合了数据建模、数据处理、数据开发、数据服务等多个功能,支持企业更高效地进行数据治理和分析。
|
1月前
|
Java 数据库连接 数据库
hibernate正向生成数据库表以及配置——TestStu.java
hibernate正向生成数据库表以及配置——TestStu.java
18 1
|
1月前
|
Java 数据库连接 数据库
hibernate正向生成数据库表以及配置——Teacher.hbm.xml
hibernate正向生成数据库表以及配置——Teacher.hbm.xml
13 1
|
1月前
|
Java 数据库连接 数据库
hibernate正向生成数据库表以及配置——Teacher.java
hibernate正向生成数据库表以及配置——Teacher.java
11 0
|
1月前
|
Java 数据库连接 数据库
hibernate正向生成数据库表以及配置——Student.java
hibernate正向生成数据库表以及配置——Student.java
10 0
|
1月前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(3)
Oracle数据库基本概念理解(3)
18 2
|
17天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
41 5
|
1月前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(2)
Oracle数据库基本概念理解(2)
13 1
|
9天前
|
存储 Oracle 关系型数据库
Oracle的模式与模式对象:数据库的“城市规划师”
【4月更文挑战第19天】在Oracle数据库中,模式是用户对象的集合,相当于数据库的城市规划,包含表、视图、索引等模式对象。模式对象是数据存储结构,如表用于存储数据,视图提供不同查看角度,索引加速数据定位。良好的模式与模式对象设计关乎数据效率、安全和稳定性。规划时需考虑业务需求、性能、安全和可扩展性,以构建高效数据库环境,支持企业业务发展。

推荐镜像

更多