by你好我是李白
v$transaction视图中事务开始时间都晚于捕获时间之后,查询select
to_char(current_scn) from v$database;选取一个SCN,然后在确保SCN之前所有的数据都同步到中间库之后,可以将DG断开。
(1) 如果是10g之前的版本,如果数据量较大,则可以使用RMAN在中
间库不完全恢复到选取的SCN,然后使用exp人为分割大表启动多个exp进程,启用并发加快导出数据速度。 (2) 10g以后的版本使用expdp配合FLASHBACK_SCN=
将数据导出。 b.没有中间库时,在源端先开启捕获,保证v$transaction视图中所有事务开始时间都在捕获时间之后,然后选取scn,使用exp/expdp进行基于该scn导出,在目标端导入。
注:目标数据库FK、job、trigger的处理,正常的job与schedule job必须都禁用掉,使用如下语句生成批量禁用语句,然后执行。
SQL>select 'alter table \\and owner in('HR') order by status,owner;
SQL>select 'alter trigger \dba_triggers where owner in('HR') order by status,owner; 禁用目标端job:
SQL>alter system set job_processes=0 scope=both sid=’*’;
3.4 reconcile队列数据
在目标端,使用sp_ctrl控制台,reconcile目标端post队列中激活源端config开启capture到选取的SCN之间的数据,以保证开启post之后,SharePlex可以将之后数据对接,保证数据一致性。 sp_ctrl (cluster1vip:2100)>qstatus sp_ctrl (cluster1vip:2100)>help reconcile
sp_ctrl (cluster1vip:2100)> reconcile queue datamove for o.wahaha-o.honor1 scn 698767
sp_ctrl (cluster1vip:2100)>qstatus
注:数据泵导入导出的时候,reconcile时scn一般需要加1,rman until scn方式恢复的不需要加1.
by你好我是李白
3.5开启目标端post
sp_ctrl (cluster1vip:2100)>start post sp_ctrl (cluster1vip:2100)>qstatus sp_ctrl (cluster1vip:2100)>show sync
使用sqlplus查看数据同步情况,同步完成之后,查看源端与目标端数据是否一致。
3.6目标端FK,job,trigger处理
如果使用SharePlex做容灾镜像复制,目标端FK,job,trigger则禁止,直到需要切换到灾备库时启用。
如果使用SharePlex做数据迁移,则需要在迁移完成之后启用FK,job,trigger。
4.SharePlex其他复制说明
4.1 DDL复制
? 在级联复制中,DDL复制只从源端到中间端,不包含中间段到目标段。 ? 默认SharePlex开启Truncate TABLE与ALTER TABLE to ADD COLUMNS
or DROP COLUMNS的DDL复制。 注:默认DDL配置受参数SP_OCT_REPLICATE_DDL参数影响,1为ALTER TABLE,2为TRUNCATE TABLE,3为ALTER TABLE与TRUNCATE TABLE,默认为3
? 默认SharePlex的AUTO_ADD特性会自动捕获在激活配置文件(前提是新
建的对象在配置文件中使用通配符等方式匹配)之后创建的表与索引,并自动复制到目标端,将对象加入复制列表,维护对象以后的DDL与DML。 注:默认AUTO_ADD受SP_OCT_AUTOADD_ENABLE参数影响,默认为1,即ENABLE
? 如果需要开启TRIGGER,SYNONYM,GRANT的复制,需要设置以下参数
为1 DDL command CREATE/DROP TRIGGER Set this parameter to 1 SP_OCT_REPLICATE_TRIGGER by你好我是李白
CREATE/DROP SYNONYM GRANT SP_OCT_REPLICATE_SYNONYM SP_OCT_REPLICATE_GRANT ? 如果需要开启SEQUENCE,MATERIALIZED VIEW复制,需要设置一下参数
为1 前提:1.保证SP_OCT_AUTOADD_ENABLE参数设置为1. DDL to auto-add CREATE / DROP SEQUENCE CREATE / DROP MATERIALIZED VIEW* ? SharePlex可以复制不包含在激活的配置文件内的对象的DDL,但是不会复
制任何数据,因为没有激活的配置文件包含对象。
SP_OCT_REPLICATE_ALL_DDL设置为1。
SP_OCT_AUTOADD_MV Parameter to set to 1 SP_OCT_AUTOADD_SEQ Additional requirements Set the SP_OCT_TARGET_COMPATIBILITY parameter to at least 8.6.3 Set the SP_OCT_TARGET_COMPATIBILITY parameter to at least 8.6.3 4.2 异构复制map columns
环境:RedHat6 Oracle11.2.0.4 SharePlex9.0 注意事项:
1.源库的所有列必须映射给目标端的列,名称可以不同,目标表的列数量可以多于源库表的列数量。
2.在配置了列映射的表中使用ALTER TABLE增加列是不被支持的。 样例配置文件:
sp_ctrl (11rac1:2300)> view config hr_20170708 datasource:o.source
by你好我是李白
#source tables target tables routing map
#splex.demo_src splex.demo_dest target_system@o.target_sid hr.employees hr.employees 192.168.204.112@o.target hr.test (id,name) hr.coltest (nu,last_name) 192.168.204.112@o.target
4.3 级联复制
? 级联复制情境
1.源库允许有超过1024个复制路由,则可以通过发送到中间系统,通过广播的方式,分发给目标系统。
2.源库由于防火墙限制或者其他因素导致无法直接建立与目标端的连接,则可以使用级联复制。
注:使用级联复制,即使源库无法连接目标端,源端也要能解析目标端的主机。 ? 级联复制要求
1. 在所有系统中创建相同SharePlex用户名用户。 2. 在目标端禁用影响DML操作的触发器。
3. 排除SharePlex用户的DML与DDL复制,配置文件中对象以外的表可
以有DML与DDL操作,但不能影响复制队列。
4. 如果序列在目标端是不需要的,则不要复制序列,复制序列会造成复制
迟缓。因为序列用来在插入操作时产生列的键值,而值会复制到目标端,所以序列可以不复制。
4.3.1中间系统为数据库,有post情况下级联复制
? 配置注意事项:
1. 在所有系统的数据库中,必须有相同名称的SharePlex的用户。 2. 触发器必须在在中间库与目标库中禁用。
by你好我是李白
3. SharePlex不支持从中间库到目标库的DDL复制,只支持源库到中间库
的DDl复制,所以在中间库需要禁用掉SP_OCT_REPLICATE_DDL与SP_OCT_REPLICATE_ALL_DDL两个参数。 4. 需要在源库与中间库创建两个配置文件。
5. 源库与中间库开启归档,防止在捕获完成之前联机重做日志被清除。
? 配置样例:
Example on source system Datasource:o.oraA
hr.emphr.emp2hostB@o.oraB hr.salhr.sal2hostB@o.oraB cust.%cust.%hostB@o.oraB
Example on intermediary system Datasource:o.oraB
hr.emphr.emp2hostC@o.oraC
hr.salhr.sal2hostD@o.oraD+hostE@r.mssE cust.%cust.%!cust_partitions ? 需要配置参数
如果中间库是Oracle,需要设置参数SP_OCT_REPLICATE_POSTER为1,默认为0,参数设置为0时,SharePlex的capture将忽略post进程的活动。
4.3.2中间系统为pass-through
? 配置前提
1. Oracle数据库下,创建Oracle实例以及在/etc/oratab或者windows注
册表中指定对应ORACLE_SID,数据库可以为空。 2. 不支持DDL复制
3. 只需要在源端创建一个配置文件即可。