达梦数据复制软件(简称 DMDRS)是一种用于同构数据库、异构数据库以及各种数据管理系统之间的数据复制软件。DMDRS 采用模块化的设计,通过灵活配置不同的功能模块,实现多功能的数据复制服务,以满足多种场景下的数据复制业务需求。
基于数据复制业务的应用场景,DMDRS 提供数据迁移、数据同步、数据分发和数据转换等功能,而且数据同步功能还支持一对一、双向、一对多、多对一、级联同步、环形同步和 DMDRS 主备等多种同步拓扑结构。
数据迁移是指将源数据库的全量数据一次性迁移到目标数据库,适用于同构或异构数据库之间的数据迁移,一般用于源数据库在静态的情况下进行数据迁移的场景。数据迁移提供稳定、高效的数据库全量数据迁移,并且支持故障以后进行断点续传的功能。
数据同步是指通过全量数据装载和增量数据同步的组合来实现数据复制功能,实现源数据库在动态的场景下和目标数据库数据的一致性,适用于同构或异构数据库之间的数据实时同步。
全量数据装载是指将源数据库的全量数据装载到目标数据库,使源数据库和目标数据库数据保持一致。
增量数据同步是指通过数据同步技术将源数据库的增量数据实时同步到目标数据库,保证源数据库和目标数据库增量数据的一致性。
在同构数据库的场景下,支持将源数据库的同步或异步备份还原到目标数据库后,再通过 DMDRS 的增量数据同步功能实现源数据库和目标数据库增量数据的实时同步。
数据分发是指将源数据库的全量数据和增量数据先保存到流存储后再分发到目标端,一般适用于将一个数据库的数据复制到多个数据库的应用场景。一般用于大规模数据量的数据传输,可以有效降低源数据库服务器负载,减少对源数据库系统的影响。
数据转换是指对数据库的全量数据和增量数据进行自定义转换,数据转换功能可用于数据迁移、数据同步和数据分发等场景,满足多样化的数据转化需求。
DMDRS 产品采用模块化的设计,通过灵活配置不同的功能模块,实现多功能的数据复制服务,以满足多种场景的数据复制业务需求。DMDRS 产品架构如下图所示。
DMDRS 产品模块包括 Manager 管理模块、CPT 模块、DSS 模块、EXEC 模块、CVT 模块和 SCHED 模块。
Manager 管理模块是 DMDRS 服务的管理模块,启动 DMDRS 服务后,Manager 管理模块开始运行,主要提供客户端监听、其他功能模块的加载和维护以及执行控制台命令等功能。
根据自定义配置,加载 CPT 模块、DSS 模块、EXEC 模块和 SCHED 模块,实现不同的功能。
根据模块名称管理唯一标识的模块。
启动监听线程,监听客户端连接。
启动授权校验线程,校验 License 信息。
接收并执行控制台命令。
清理功能模块。
CPT 模块主要实现源数据库的全量数据装载以及增量数据实时捕获、解析和投递。CPT 模块主要提供数据装载、添加同步表、日志捕获、日志解析和消息投递等功能。
基于源数据库接口,查询抽取源数据库的数据发送至目标 DMDRS 服务,目标 DMDRS 把数据同步到目标数据库,实现数据装载。
查询待同步表及部分数据库系统表的结构定义信息,并将其保存在本地磁盘。DMDRS 在同步数据时,需要根据相匹配的同步表字典信息来解析日志中的表增量操作。
基于优化的日志扫描算法,实时日志增量捕获,保存在分析队列中。
提取分析队列中的日志数据,将其解析为 DMDRS 内部统一的消息格式体,保存在投递队列中。
提取投递队列中的消息数据将其整理后保存在发送队列中,等待网络模块进行网络发送。
DSS 模块具备高可靠、高吞吐量的流存储和分发功能。DSS 模块接收 CPT 模块发送的数据,并根据 Topic 主题将消息分类流式持久化存储在不同的 Topic 中,供下一级数据服务访问使用。
根据 Topic 主题进行分类消息存储,实现数据分发。
采用多线程并发 IO 读写、内存池、数据页缓存等技术,实现高性能的流式存储。
基于数据页缓存、优化的页淘汰算法和高效的内存管理等技术手段,实现高吞吐量的数据访问。
支持基于任意消费点和消费规则进行数据的消费。
支持主备架构,保障高可靠性,避免单点故障问题。
EXEC 模块主要功能为接收 CPT 模块发送的全量装载数据或者增量同步数据,在目标数据库进行应用,实现数据实时同步。同时,EXEC 模块也可以从 DSS 流式存储中获取同步数据并应用到目标数据库。
支持分组缓存执行功能,通过装载分组、等待分组和执行分组等实现全量数据装载与增量数据同步同时执行的数据同步。
支持多线程并行执行入库,实现高效的数据同步。
支持数据转换功能,与 CVT 模块结合使用,实现实时的数据清洗转换同步。
支持分组执行功能,实现不同分组对应不同的执行策略,满足多样化的同步执行需求。
基于表粒度的同步及高效的检查点算法,解决长事务执行引起的同步阻塞问题。
CVT 模块通过 DRS 语言实现自定义编程式编写数据转换规则和逻辑,实现数据清洗转换的功能。CVT 模块从 CPT 模块或者 EXEC 模块中获取数据,并按照预先定义的转换规则及逻辑,以单个操作作为最小单元进行数据清洗转换。DRS 语言提供了流程转换定义、转换逻辑语法定义和丰富的内置转换函数等。
支持编程式的转换逻辑规则编写。
提供丰富的转换处理函数,如数据函数、字符串函数、时间日期函数等。
复杂的转换数据结构支持,如 HASH 和 B 树,实现键值对的存储。
支持关联查询,可以自定义关联查询条件在第三方库上获取关联数据。
SCHED 模块主要提供定时自动执行功能调度任务,实现定时执行 CVT 脚本、定时删除多 CPT 归档、定时服务守护、定时数据装载、定时数据同步、定时静态数据校验和定时动态数据校验等调度功能。
Console 远程控制工具是基于 TCP/IP 的 DMDRS 远程控制工具。
连接 DMDRS 服务,管理服务中的模块,包括启动和停止模块。
监控 DMDRS 服务的运行情况,包括查看统计信息和查看装载信息等。
查看和修改配置参数。
查看命令帮助信息。
shutdown immediate
startup mount
alter database archivelog;
alter system set db_recovery_file_dest='';
alter system set log_archive_dest='/oradata/arch';
shutdown immediate;
startup
select supplemental_log_data_min from v$database;
select supplemental_log_data_all from v$database;
alter database add supplemental log data;
alter database add supplemental log data (ALL) columns;
为了保证源DMDRS能正常解析DDL日志操作,需关闭源数据库回收站功能,重启数据库生效。
alter system set recyclebin=off deferred;
请源数据库管理员和目标数据库管理员分别创建数据库同步用户DMDRS,并赋予同步所需权限。建议源数据库DMDRS用户不赋予DBA权限,赋予同步所需的最小权限即可,建议目标数据库DMDRS用户赋予DBA权限,如果不能赋予DBA权限,为确保同步的正确性,需赋予DMDRS用户同步所需的最小权限
SQL> create user DMDRS identified by "DMdrs123";
SQL> grant dba to dmdrs;
在配置和运行DMDRS服务前,需要对DMDRS做如下准备工作。
在配置DMDRS服务前,需规划DMDRS服务的Manager管理模块的端口号,包括源DMDRS、目标DMDRS服务、DMDSS服务和DMDSSA服务的Manager管理模块的端口号。
注意
不同的应用场景,DMDRS所包括的DMDRS服务不同。不同的服务如果部署在同一台服务器上,必须确保不同服务的Manager管理模块的端口号的唯一性。
DMDRS运行用户需要以下权限:
• Windows:运行用户具有管理员权限。
• Linux/Unix系统:运行用户具有DMDRS服务所在目录及子目录的读、写和执行权限。源DMDRS的运行用户应同数据库归档文件目录属同一用户组,该用户组对归档文件所在目录及子目录有读权限。
DMDRS服务 IP地址和端口 站点号 连接数据库
源DMDRS 192.168.0.21: 5345 1 源数据库 Oracle 192.168.20.21:1521
网络服务名:ora11g
目标DMDRS 192.168.20.22: 5345 2 目标数据库DM8
192.168.20.22:5247
目录类型 目录名 目录示例
源数据库 数据库归档文件目录 /home/oracle/arch
源DMDRS服务 安装目录 /home/oracle/dmdrs5
执行程序目录 /home/oracle/dmdrs5/bin
配置文件路径 /home/oracle/dmdrs5/bin/cpt.xml
服务脚本模板目录 /home/oracle/dmdrs5/bin/service_template
服务脚本目录 /home/oracle/dmdrs5/bin
console远程控制工具 /home/oracle/dmdrs5/bin/drcsl
目标DMDRS服务 安装目录 /home/dmdba/dmdrs5
执行程序目录 /home/dmdba/dmdrs5/bin
配置文件路径 /home/dmdba/dmdrs5/bin/exec.xml
服务脚本模板目录 /home/dmdba/dmdrs5/bin/service_template
服务脚本目录 /home/dmdba/dmdrs5/bin
console远程控制工具 /home/dmdba/dmdrs5/bin/drcsl
“达梦数据融合管理平台”:简称 DMDFM 是达梦为解决大型数据复制、数据集成项目的管理运维问题而推出的一款集安装配置、设计管理、监控运维于一体的软件。使用 DMDFM 可以快速安装配置达梦数据复制软件(DMDRS)、达梦数据集成软件(DMDIS)以及达梦数据校验软件(DMDVS),支持各种复杂拓扑结构同步链路的拖拽设计,支持监控大量的数据链路,极大地提升大型项目的实施和运维效率。
代理:DMDFM 通过代理来进行管理、监控和实现各项功能。
如果 DMDFM 已在其它服务器安装,那么本服务器只需安装代理。例如:需要部署 Oracle 到 DM 的数据同步,在目的端 DM 服务器已部署了 DMDFM,那么在源端 Oracle 服务器上只需部署代理指定 DMDFM 的 IP 即可。本文以 2 个组件都安装为例。
[dmdba@dsc2 opt]$ ./dmdrs_rev176693_x86_rh6_64_20241206.bin -i
[oracle@ora11g opt]$ ./dmdrs_rev176693_x86_rh6_64_20241206.bin -i
在目标DMDRS服务的配置文件目录,打开并修改exec.xml配置文件,修改后配置文件如下所示。
[dmdba@dsc2 bin]$ vim 1.txt
[dmdba@dsc2 bin]$ mv 1.txt exec.xml
<?xml version="1.0" encoding="GB18030"?>
<drs>
<base>
<mgr_port>5345</mgr_port>
<siteid>2</siteid>
</base>
<exec>
<name>exec_dm8</name>
<login>
<dbtype>DM8</dbtype>
<server>192.168.0.22</server>
<user>DMDRS</user>
<pwd>DMdrs123</pwd>
<port>5247</port>
</login>
</exec>
</drs>
在源DMDRS服务的配置文件目录,打开并修改cpt.xml配置文件,修改后配置文件如下所示。
[oracle@ora11g bin]$ vim 1.txt
[oracle@ora11g bin]$ mv 1.txt cpt.xml
cd /home/dmdrs/dmdrs5/bin/conf_sample
<?xml version="1.0" encoding="GB18030"?>
<drs>
<base>
<mgr_port>5345</mgr_port>
<siteid>1</siteid>
</base>
<cpt>
<name>cpt_oracle</name>
<ddl_mask>OBJ:OP</ddl_mask>
<login>
<dbtype>Oracle</dbtype>
<server>ora11g</server>
<user>DMDRS</user>
<pwd>dmdrs123</pwd>
</login>
<send>
<ip>192.168.0.22</ip>
<port>5345</port>
<target_name>exec_dm8</target_name>
<map>
<item>.==.</item>
</map>
</send>
</cpt>
</drs>
cd /home/dmdba/dmdrs5/bin/service_template
cp TemplateService ../DrsService
cd ..
vim DrsService
INSTALL_HOME=/home/dmdba/dmdrs5
PROG_DIR=/home/dmdba/dmdrs5/bin
CONF_PATH=/home/dmdba/dmdrs5/bin/exec.xml
EXEC_PROG_NAME=drsvr
SERVICE_TYPE_NAME="drs server"
./DrsService start
cd /home/oracle/dmdrs5/bin/service_template
cp TemplateService ../DrsService
cd ..
vim DrsService
INSTALL_HOME=/home/oracle/dmdrs5
PROG_DIR=/home/oracle/dmdrs5/bin
CONF_PATH=/home/oracle/dmdrs5/bin/cpt.xml
EXEC_PROG_NAME=drsvr
SERVICE_TYPE_NAME="drs server"
./DrsService start
./drcsl cpt_rac.xml
Connect
alter cpt_oracle set lsn
Start
alter cpt_oracle add table "sch.name='BINGO' and tab.name='T1'"
@/home/oracle/dmdrs5/bin2/scripts/ddl_sql_ora.sql
Oracle上需要修改:1、触发器加 “/”。2、授权to drs改为实际用户。
[oracle@ora11g bin]$ ./drcsl cpt.xml
CSL> connect
CSL> start
alter cpt_oracle add table "sch.name='BINGO' "
DMDRS服务 IP地址和端口 站点号 连接数据库
源DMDRS 192.168.0.23: 5345 1 源数据库DM8
192.168.20.23:5247
目标DMDRS 192.168.20.22: 5345 2 目标数据库DM8
192.168.20.22:5247
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmdem/data/archi,TYPE=LOCAL,FILE_SIZE=256,SPACE_LIMIT=40960';
ALTER DATABASE OPEN;
call sp_set_para_value(1,'RLOG_APPEND_LOGIC',1);
set define off;
start /home/dmdba/dmdrs5/bin/scripts/ddl_sql_dm8.sql
SQL> create user DMDRS identified by "DMdrs123";
SQL> grant dba to dmdrs;
cd /home/dmdba/dmdrs5/bin/
vi cpt.xml
<?xml version="1.0" encoding="GB18030"?>
<drs>
<base>
<mgr_port>5345</mgr_port>
<siteid>1</siteid>
<lang>ch-utf8</lang>
</base>
<cpt>
<name>cpt_dm8</name>
<login>
<dbtype>DM8</dbtype>
<server>192.168.0.23</server>
<user>DMDRS</user>
<pwd>DMdrs123</pwd>
<port>5247</port>
</login>
<load>
<enable>1</enable>
<threads>128<threads>
<nets>2</nets>
</load>
<ddl_mask>OBJ:OP</ddl_mask>
<char_code>UTF-8</char_code>
<parse_thr>8</parse_thr>
<send>
<ip>192.168.0.22</ip>
<port>5345</port>
<comperss>1</comperss>
<target_name>exec_dm8</target_name>
<map>
<item>.==.</item>
</map>
</send>
</cpt>
</drs>
cd /home/dmdba/dmdrs5/bin/service_template
cp TemplateService ../DrsService
cd ..
vim DrsService
INSTALL_HOME=/home/dmdba/dmdrs5
PROG_DIR=/home/dmdba/dmdrs5/bin
CONF_PATH=/home/dmdba/dmdrs5/bin/exec.xml
EXEC_PROG_NAME=drsvr
SERVICE_TYPE_NAME="drs server"
./DrsService start
[dmdba@dsc2 bin]$ ./drcsl cpt.xml
CSL> connect
CSL> alter cpt_dm8 set lsn
CSL> start
CSL> alter cpt_dm8 add table "sch.name='BINGO1'"
DMDRS服务 IP地址和端口 站点号 连接数据库
源DMDRS 192.168.0.23: 5346 1 源数据库Mysql
192.168.20.23:3306
目标DMDRS 192.168.20.22: 5345 2 目标数据库DM8
192.168.20.22:5247
[dmdba@dsc2 ~]$ echo 'PATH=$PATH:/usr/local/mysql/bin' >> .bash_profile
vi /etc/my.cnf
[mysqld]
server-id=1
log_bin=mysql-bin
binlog_format=row
max_allowed_packet=100M
create database bingo3; --创建测试库
use bingo3; --进入测试库
create table T1(id int ,name varchar(20)); --创建dameng测试表
insert into T1 values (1,'bingo'); --插入测试数据
grant all privileges on bingo3.* to 'bingo3'@'%' IDENTIFIED BY '123456'; --创建远程连接的用户并设置密码
flush privileges; --重新加载权限表
grant all on . to 'bingo3'@'%'
[dmdba@dsc2 bin]$ vim cpt_mysql.xml
<?xml version="1.0" encoding="GB18030"?>
<drs>
<base>
<mgr_port>5346/mgr_port>
<siteid>1</siteid>
</base>
<cpt>
<name>cpt_mysql</name>
<login>
<dbtype>mysql</dbtype>
<server>192.168.0.23</server>
<dbname>RESOURCES</dbname>
<user>bingo3</user>
<pwd>123456</pwd>
<port>3306</port>
</login>
<send>
<ip>192.168.0.22</ip>
<port>5345</port>
<target_name>exec_dm8</target_name>
<map>
<item>RESOURCES.==RESOURCES.</item>
</map>
</send>
</cpt>
</drs>
[dmdba@dsc2 bin]$ cp ./service_template/TemplateService ./DrsService_mysql
[dmdba@dsc2 bin]$ vim DrsService_mysql
INSTALL_HOME=/home/oracle/dmdrs5
PROG_DIR=/home/oracle/dmdrs5/bin
CONF_PATH=/home/oracle/dmdrs5/bin/cpt_mysql.xml
EXEC_PROG_NAME=drsvr
SERVICE_TYPE_NAME="drs server"
[dmdba@dsc2 bin]$ ./DrsService_mysql start
./drcsl cpt_mysql.xml
CSL> connect
CSL> alter cpt_mysql set lsn
CSL> start
注意:这里的报错是因为,bingo3权限不足。
-- ## 基础权限
-- 需要创建会话权限
GRANT CONNECT TO DMDRS;
-- ## 装载权限
-- 需要非同步用户下待装载表/序列上的查询权限
GRANT SELECT ON <待装载表/序列的模式名>.<待装载表/序列的表名>TO DMDRS;
-- 需要系统表、系统字典和动态视图的查询权限
GRANT SELECT ON SYS.OBJ$ TO DMDRS;
GRANT SELECT ON SYS.TAB$ TO DMDRS;
GRANT SELECT ON SYS.USER$ TO DMDRS;
GRANT SELECT ON SYS.NTAB$ TO DMDRS;
GRANT SELECT ON SYS.SEG$ TO DMDRS;
GRANT SELECT ON SYS.EXTERNAL_TAB$ TO DMDRS;
GRANT SELECT ON DBA_CONS_COLUMNS TO DMDRS;
GRANT SELECT ON DBA_CONSTRAINTS TO DMDRS;
GRANT SELECT ON SYS.COLTYPE$ TO DMDRS;
GRANT SELECT ON SYS.TYPE$ TO DMDRS;
GRANT SELECT ON SYS.ATTRIBUTE$ TO DMDRS;
GRANT SELECT ON SYS.COLLECTION$ TO DMDRS;
GRANT SELECT ON SYS.PARTOBJ$ TO DMDRS;
GRANT SELECT ON SYS.COM$ TO DMDRS;
GRANT SELECT ON V_$DATABASE TO DMDRS;
GRANT SELECT ON SYS.CON$ TO DMDRS;
GRANT SELECT ON SYS.IND$ TO DMDRS;
GRANT SELECT ON SYS.COL$ TO DMDRS;
GRANT SELECT ON SYS.CCOL$ TO DMDRS;
GRANT SELECT ON SYS.TS$ TO DMDRS;
GRANT SELECT ON SYS.DEFERRED_STG$ TO DMDRS;
GRANT SELECT ON SYS.SUBPARTCOL$ TO DMDRS;
GRANT SELECT ON SYS.SEQ$ TO DMDRS;
GRANT SELECT ON DBA_INDEXES TO DMDRS;
GRANT SELECT ON DBA_IND_COLUMNS TO DMDRS;
GRANT SELECT ON SYS.PARTCOL$ TO DMDRS;
GRANT SELECT ON SYS.DEFSUBPART$ TO DMDRS;
GRANT SELECT ON SYS.SOURCE$ TO DMDRS;
GRANT SELECT ON SYS.TYPED_VIEW$ TO DMDRS;
GRANT SELECT ON SYS.VIEW$ TO DMDRS;
GRANT SELECT ON SYS.SYN$ TO DMDRS;
GRANT SELECT ON "SYS"."ALL_SYNONYMS_TREE" TO DMDRS;
GRANT SELECT ON DBA_EXTENTS TO DMDRS;
GRANT SELECT ON SYS.SNAP$ TO DMDRS;
GRANT SELECT ON V$PARAMETER TO DMDRS;
GRANT SELECT ON SYS.TRIGGER$ TO DMDRS;
GRANT SELECT ON SYS.V_$THREAD TO DMDRS;
GRANT SELECT ON V_$DATABASE_INCARNATION TO DMDRS;
GRANT SELECT ON V_$TRANSACTION to DMDRS;
GRANT SELECT ON V_$LOCKED_OBJECT to DMDRS;
GRANT SELECT ON DBA_PART_INDEXES to DMDRS;
-- Oracle 12c及以上版本且带有容器的数据库需要容器视图的查询权限
GRANT SELECT ON V_$CONTAINERS TO DMDRS;
-- 需要锁表权限
GRANT LOCK ANY TABLE TO DMDRS;
-- 装载使用FLASHBACK掩码,需要闪回权限
GRANT FLASHBACK ANY TABLE to DMDRS;
-- ## 同步权限
-- 需要获取系统SCN权限
GRANT EXECUTE ON DBMS_FLASHBACK TO DMDRS;
-- 需要系统表、系统字典和动态视图的查询权限
GRANT SELECT ON SYS.COL$ TO DMDRS;
GRANT SELECT ON SYS.LOB$ TO DMDRS;
GRANT SELECT ON SYS.TABPART$ TO DMDRS;
GRANT SELECT ON SYS.TABCOMPART$ TO DMDRS;
GRANT SELECT ON SYS.LOBFRAG$ TO DMDRS;
GRANT SELECT ON V_$LOGFILE TO DMDRS;
GRANT SELECT ON V_$LOG TO DMDRS;
GRANT SELECT ON V_$ARCHIVED_LOG TO DMDRS;
GRANT SELECT ON SYS.CDEF$ TO DMDRS;
GRANT SELECT ON SYS.TABSUBPART$ TO DMDRS;
GRANT SELECT ON SYS.CCOL$ TO DMDRS;
GRANT SELECT ON SYS.TS$ TO DMDRS;
GRANT SELECT ON SYS.TYPE$ TO DMDRS;
GRANT SELECT ON SYS.ATTRIBUTE$ TO DMDRS;
GRANT SELECT ON SYS.COLLECTION$ TO DMDRS;
GRANT SELECT ON V_$SESSION TO DMDRS;
GRANT SELECT ON V_$SESSTAT TO DMDRS;
GRANT SELECT ON V_$STATNAME TO DMDRS;
-- 源DMDRS主备需要数据库实例的查询权限
GRANT SELECT ON V_$INSTANCE TO DMDRS;
GRANT SELECT ON GV_$INSTANCE TO DMDRS;
-- 若需要同步XMLTYPE类型的数据,需要将XDB模式下XDB$TTSET、表名开头为X$NM和X$QN的表的查询权限赋予用户。若使用可插拔数据库,管理员用户需先切换到可插拔数据库再授权
GRANT SELECT ON XDB.XDB$TTSET TO DMDRS;
GRANT SELECT ON XDB.<以X$NM开头的表名> TO DMDRS;
GRANT SELECT ON XDB.<以X$QN开头的表名> TO DMDRS;
-- ## 基础权限
-- 启动时需要在目标数据库中创建辅助表和辅助存储过程
GRANT RESOURCE TO DMDRS;
-- 在连接数据库时需要创建会话
GRANT CONNECT TO DMDRS;
-- 启动时需要查询数据库的相关参数信息
GRANT SELECT ON V_$INSTANCE TO DMDRS;
GRANT SELECT ON V_$PARAMETER TO DMDRS;
-- ## 装载相关权限
-- 需要如下系统表、系统字典及动态视图的查询权限
GRANT SELECT ON SYS.OBJ$ TO DMDRS;
GRANT SELECT ON SYS.USER$ TO DMDRS;
GRANT SELECT ON SYS.COL$ TO DMDRS;
GRANT SELECT ON SYS.COLTYPE$ TO DMDRS;
GRANT SELECT ON SYS.CCOL$ TO DMDRS;
GRANT SELECT ON SYS.CDEF$ TO DMDRS;
GRANT SELECT ON SYS.ATTRCOL$ TO DMDRS;
GRANT SELECT ON DBA_IND_COLUMNS TO DMDRS;
GRANT SELECT ON DBA_INDEXES TO DMDRS;
-- ## 同步相关权限
-- 需要如下系统表、系统字典及动态视图的查询权限
GRANT SELECT ON SYS.IND$ TO DMDRS;
GRANT SELECT ON SYS.SEQ$ TO DMDRS;
GRANT SELECT ON DBA_TAB_SUBPARTITIONS TO DMDRS;
GRANT SELECT ON DBA_CONSTRAINTS TO DMDRS;
-- 目标DMDRS主备需要数据库实例的查询权限
GRANT SELECT ON GV_$INSTANCE TO DMDRS;
-- ## 装载与同步相关权限
-- 需要非同步用户模式下已存在的待同步表/序列的操作权限
GRANT INSERT ON <目标表的模式名>.<目标表名> TO DMDRS;
GRANT UPDATE ON <目标表的模式名>.<目标表名> TO DMDRS;
GRANT DELETE ON <目标表的模式名>.<目标表名> TO DMDRS;
GRANT SELECT ON <目标序列的模式名>.<目标序列名> TO DMDRS;
-- 需要非同步用户模式下未存在的表/序列的数据的操作权限。也可以在目标同步表创建后,同上行所述单独为每张表赋予操作权限
GRANT INSERT ANY TABLE TO DMDRS;
GRANT UPDATE ANY TABLE TO DMDRS;
GRANT DELETE ANY TABLE TO DMDRS;
GRANT SELECT ANY TABLE TO DMDRS;
GRANT SELECT ANY SEQUENCE TO DMDRS;
-- 需要非同步用户模式下对象的DDL权限
GRANT CREATE ANY <对象类型> TO DMDRS;
GRANT ALTER ANY <对象类型> TO DMDRS;
GRANT DROP ANY <对象类型> TO DMDRS;
-- ## 基础权限
-- 启动时需要在目标数据库中创建辅助表和辅助存储过程
GRANT RESOURCE TO DMDRS;
-- 插入、删除、更新数据时,需要数据操作权限
GRANT PUBLIC TO DMDRS;
-- 启动时需要查询数据库的相关参数信息
GRANT SOI TO DMDRS;
-- ## 装载、同步相关权限
-- 需要如下系统表、系统字典及动态视图的查询权限
GRANT SVI,VTI TO DMDRS;
-- ## 装载与同步相关权限
-- 需要非同步用户模式下已存在的待同步表/序列的操作权限
GRANT INSERT ON <目标表的模式名>.<目标表名> TO DMDRS;
GRANT UPDATE ON <目标表的模式名>.<目标表名> TO DMDRS;
GRANT DELETE ON <目标表的模式名>.<目标表名> TO DMDRS;
GRANT SELECT ON <目标序列的模式名>.<目标序列名> TO DMDRS;
-- 需要非同步用户模式下未存在的表/序列的数据的操作权限。也可以在目标同步表创建后,同上行所述单独为每张表赋予操作权限
GRANT INSERT ANY TABLE TO DMDRS;
GRANT UPDATE ANY TABLE TO DMDRS;
GRANT DELETE ANY TABLE TO DMDRS;
GRANT SELECT ANY TABLE TO DMDRS;
GRANT SELECT ANY SEQUENCE TO DMDRS;
-- 需要非同步用户模式下对象的DDL权限
GRANT CREATE ANY <对象类型> TO DMDRS;
GRANT ALTER ANY <对象类型> TO DMDRS;
GRANT DROP ANY <对象类型> TO DMDRS;
-- 需要赋予同步用户辅助存储过程的执行权限以及非同步用户下模式所属用户的存储过程的创建权限
GRANT EXECUTE ON PROCEDURE "DRS_$DDL_SQL_PROC" TO DMDRS;
GRANT CREATE PROCEDURE TO <非同步用户下模式所属的用户>;
文章
阅读量
获赞