
SharePlex是一种基于分析oracle的redo log文件,把数据改变从一个Oracle数据库复制到另外一个或多个oracle数据库的逻辑数据复制软件。

SharePlex特点:
SharePlex架构图:


##源端
cat <<EOF>>/etc/hosts
10.211.55.110 orcl-rpt
EOF
##目标端
cat <<EOF>>/etc/hosts
10.211.55.100 orcl-rac01
EOF##源端
cat <EOF>/home/oracle/.bash_profile
export SP_SYS_HOST_NAME=orcl-rac01
export SP_SYS_VARDIR=/quest/vardir2300
export PATH=/quest/bin:$PATH
EOF
##目标端
cat <EOF>/home/oracle/.bash_profile
export SP_SYS_HOST_NAME=orcl-rpt
export SP_SYS_VARDIR=/quest/vardir2300
export PATH=/quest/bin:$PATH
EOF--开启归档模式
shutdown immediate
startup mount
alter database archivelog;
alter database open;
--开启补充日志
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;--源端执行
create user SPLEX2300 identified by SPLEX2300;
grant dba to SPLEX2300;
##源端&目标端:
mkdir /quest
chmod -R 755 /quest
chown -R oracle:oinstall /quest
##license

Notes:以上步骤,如若重建SharePlex,无需操作。
sp_cop -u2300 &##进入sp控制台
sp_ctrl
##设置参数
set param SP_OCT_REDUCED_KEY 2
set param SP_OPO_STOP_ON_DDL_ERR 0
set param SP_OPO_CONT_ON_ERR 1
set param SP_OCF_LOCK_WAIT_TIME 1
set param SP_OCF_THREAD_COUNT 30
set param SP_OCT_OLOG_USE_OCI 1##进入sp控制台
sp_ctrl
##停止同步
stop post

这里需要在源端主机配置/etc/hosts的orcl-rpt的解析,否则会激活失败。
##进入sp控制台
sp_ctrl
##查看config
list config
copy config ORA_config orcl_config
edit config orcl_config
##以下为配置文件内容
datasource:o.mesdb2
#source tables target tables routing map
expand TABLE_A.% LUCIFER.% orcl-rpt:q1@o.orcl
expand TABLE_B.% TEST.% orcl-rpt:q2@o.orclNotes:如若是重建splex,直接激活config即可。
activate config orcl_config nolock实际操作时,不建议这一步激活,一般是rman恢复到目标端之后recover database until scn 之前激活config。
select start_time from gv$transaction;
#!/bin/sh
source ~/.bash_profile
backtime=`date +"20%y%m%d%H%M%S"`
rman target / log=/dbbackup/logs/full_backup_$backtime.log<<EOF
run{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
crosscheck backup;
crosscheck archivelog all;
sql 'alter system archive log current';
delete noprompt expired backup;
delete noprompt obsolete device type disk;
backup database format '/dbbackup/backdata_%d_%T_%U';
backup current controlfile format '/dbbackup/cntrl_%s_%p_%s';
sql 'alter system archive log current';
backup archivelog all format '/dbbackup/archlog_%d_%T_%U';
crosscheck archivelog all;
crosscheck backup;
delete noprompt obsolete device type disk;
release channel c1;
release channel c2;
}
exit;
EOF
col current_scn format 9999999999999999
select current_scn from v$database;startup nomount;
##连接rman
rman target /
restore controlfile from '/dbbackup/cntrl_6428_1_6428.bak';
alter database mount;
run {
set newname for database to '/data/orcl/%b';
restore database;
switch datafile all;
};
recover database;backup archivelog from time "to_date('2020-9-22 00:00:00','YYYY-MM-DD hh24:mi:ss')" until time "to_date('2020-9-22 22:00:00','YYYY-MM-DD hh24:mi:ss')";
catalog start with '/dbbackup/archlog_MESDB_';
recover database until scn 63839836480;alter database open resetlogs;
##进入sp控制台
sp_ctrl
reconcile queue q1 for o.orcl1-o.orcl scn 63839836480
reconcile queue q2 for o.orcl1-o.orcl scn 63839836480
reconcile queue q3 for o.orcl1-o.orcl scn 63839836480
reconcile queue q4 for o.orcl1-o.orcl scn 63839836480
reconcile queue q5 for o.orcl1-o.orcl scn 63839836480Notes:如果reconcile hang住,可以在源端执行flush o.mesdb2来清洗队列管道,源端执行几次flush,目标端就要执行几次start post加1次,也可以单独对一个队列管道flush:flush o.orcl1 to orcl-rpt queue q1。
sqlplus splex2300/splex2300 @/quest/bin/cleanup.sql
--禁用trigger
SELECT 'alter trigger ' || owner || '.' || trigger_name || ' disable;' from dba_triggers where owner in ('SAJET','SMT','ERP','WIQ','SJ');
--禁用约束
SELECT 'alter table '||owner||'.'||table_name||' disable constraint '||constraint_name||';' from dba_constraints where constraint_type='R' and owner in ('SAJET','SMT','ERP','WIQ','SJ');
--禁用job
alter system set job_queue_processes=0;##进入sp控制台
sp_ctrl
##目标端开启同步
start post
##查看队列运行情况
show
qstatus
##查看日志
show log reverse至此,SharePlex已经搭建完成。