CentOS6u9 Oracle11g RAC 搭建部署(八)OGG测试

简单说明:

依据《CentOS6u9 Oracle 11g 静默安装手工建库统一配置方案》
和《CentOS6u9 Oracle11g 内存策略选择和大页内存优化》
以及《CentOS6u9 Oracle11g 单机OGG灾备部署测试》
搭建11g单机OGG灾备环境,只做OGG的预部署部分

相应统计信息如下:
    A端:11g单机,IP 192.168.77.100,SID orcl,字符集 utf8,测试账号 test1
    B端:11g RAC,IP 192.168.77.11 ,SID orcl,字符集 utf8,测试账号 test2

实验设计:
    实验1:配置11g单机到11g RAC的测试账号test1的灾备同步
    实验2:配置11g RAC到11g单机的测试账号test2的灾备同步

实验1:

1° A端创建测试账号test1,模拟生产

su - oracle
# 创建测试用业务账号,赋权,创建测试sequence和测试table
sqlplus / as sysdba
create user test1 identified by test1 default tablespace users;
grant connect,resource to test1;
grant select on v_$session to test1;
grant select on v_$sesstat to test1;
grant select on v_$statname to test1;
grant execute on sys.dbms_lock TO test1;
conn test1/test1
create table test1(id number);
create sequence seq_test1
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;
exit
# 创建脚本,并行执行,模拟生产
cat >/tmp/test1.sh<<EOFALL
sqlplus -s test1/test1<<EOF
begin
  for i in 1..100000 loop
    insert into test1 values(seq_test1.nextval);
    commit;
    dbms_lock.sleep(1);
  end loop;
end;
/
EOF
EOFALL
for i in $(seq 10);do bash /tmp/test1.sh & done

2° A端配置,创建配置抽取进程:

su - oracle
# 创建目录,将抽取同步数据放在自己专有的目录内
mkdir /ggs/dirdat_test1
# 创建抽取进程配置文件
cd /ggs/dirprm
cat >exttest1.prm<<EOF
EXTRACT exttest1
setenv (ORACLE_SID=orcl)
setenv (NLS_LANG=AMERICAN_AMERICA.UTF8)
SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/db_1")
USERID ggs, PASSWORD ggs
THREADOPTIONS MAXCOMMITPROPAGATIONDELAY 20000
REPORT AT 01:59
DYNAMICRESOLUTION
DDL include objname "TEST1.*"
ddloptions addtrandata,report
-- 只抽取业务账号的DDL,动态添加trandata
reportrollover at 02:00
discardfile ./dirrpt/exttest1.dsc,append,megabytes 10
gettruncates
numfiles 3000
EXTTRAIL ./dirdat_test1/et
dynamicresolution
BR BROFF
--- table
table test1.*;
--- sequence
sequence test1.*;
EOF
# 配置启动抽取进程
cd /ggs
./ggsci
dblogin userid ggs,password ggs
add trandata test1.*
info trandata test1.*
add extract exttest1,tranlog,begin now
add exttrail ./dirdat_test1/et, extract exttest1
start exttest1
info exttest1
exit

3° A端配置,创建配置发送进程:

su - oracle
# 在B端创建对应的目录,配置发送进程时会将文件放入该目录中
ssh oracle@192.168.77.11 'mkdir /ggs/dirdat_test1'
cd /ggs/dirprm
cat >puptest1.prm<<EOF
EXTRACT puptest1
setenv (ORACLE_SID="orcl1")
setenv ( NLS_LANG = AMERICAN_AMERICA.UTF8 )
passthru
REPORT AT 01:59
reportrollover at 02:00
RMTHOST 192.168.77.11, MGRPORT 8000, compress
RMTTRAIL ./dirdat_test1/rt
dynamicresolution
numfiles 3000
---table
table test1.*;
---sequence
sequence test1.*;
EOF
# 配置启动发送进程
# 确认目标端mgr进程已启动
ssh oracle@192.168.77.11 'netstat -tupln|grep 8000'
cd /ggs
./ggsci
add extract puptest1,exttrailsource ./dirdat_test1/et
add rmttrail ./dirdat_test1/rt,extract puptest1
start puptest1
info puptest1
exit
# 确认目标端接收到了文件
ssh oracle@192.168.77.11 'ls -l /ggs/dirdat_test1/rt*'

4° A端配置,配置directory,数据泵导出测试账号test1,发送到B端:

su - oracle
mkdir /home/oracle/dmp
sqlplus / as sysdba
create directory dmp as '/home/oracle/dmp';
exit
# 查询出当前的SCN,建议在业务低峰时期进行数据同步操作
CUR_SCN=$(echo 'select to_char(current_scn) from v$database;'|sqlplus -s / as sysdba|grep '[0-9]')
# 数据泵导出,根据SCN导出
expdp \'/ as sysdba\' directory=dmp dumpfile=test1.dmp schemas=test1 FLASHBACK_SCN=${CUR_SCN}
scp /home/oracle/dmp/test1.dmp oracle@192.168.77.11:/tmp/

5° B端配置,配置directory,数据泵导入测试业务账号,禁用外键等:

su - oracle
mkdir /home/oracle/dmp 
sqlplus / as sysdba
create directory dmp as '/home/oracle/dmp';
exit
cp /tmp/test1.dmp /home/oracle/dmp
impdp \'/ as sysdba\' directory=dmp dumpfile=test1.dmp

# 跑脚本,禁用外键、触发器等对象
# 参见《CentOS6u9 Oracle11g 单机OGG灾备部署测试》

6° B端配置,创建配置应用进程:

su - oracle
# 创建应用进程配置文件
cd /ggs/dirprm
cat >reptest1.prm<<EOF
REPLICAT reptest1
SETENV (ORACLE_SID = orcl1)
SETENV (NLS_LANG = "American_America.UTF8")
USERID ggs,PASSWORD ggs
sqlexec "Alter session set constraints=deferred"
REPORT AT 01:59
reportrollover at 02:00
--handlecollisions
DBOPTIONS SUPPRESSTRIGGERS
DBOPTIONS DEFERREFCONST
DDL include objname "test1.*"
--ddlerror 1403 ignore
DDLERROR DEFAULT abend
DDLSUBST 'enable' WITH 'disable' INCLUDE OBJTYPE 'trigger', OPTYPE alter
DDLSUBST 'enable' WITH 'disable' INCLUDE INSTR 'ZGLT_CASCADE', OPTYPE alter, OBJTYPE 'CONSTRAINT'
reperror default,abend
--reperror default,discard
discardfile ./dirrpt/reptest1.dsc,append, megabytes 100
assumetargetdefs
checksequencevalue
allownoopupdates
dynamicresolution
numfiles 3000
--HANDLECOLLISIONS
mapexclude test1.SYS_JOURNAL_*;
map test1.*, target test1.*;
EOF
# 配置启动抽取进程
cd /ggs
./ggsci
dblogin userid ggs,password ggs
add checkpointtable ggs.rep_test1_ckpt
-- 此处的检查点表的命名也要符合一定规则
add replicat reptest1,exttrail ./dirdat_test1/rt,checkpointtable ggs.rep_test1_ckpt
start reptest1, aftercsn 258236
info reptest1
exit

7° B端监控测试表,测试:

for i in $(seq 10)
do
  echo 'select max(id) from test1.TEST1;'|sqlplus -s / as sysdba
  sleep 1
done

实验2:

1° B端创建测试账号test2,模拟生产

su - oracle
# 创建测试用业务账号,赋权,创建测试sequence和测试table
sqlplus / as sysdba
create user test2 identified by test2 default tablespace users;
grant connect,resource to test2;
grant select on v_$session to test2;
grant select on v_$sesstat to test2;
grant select on v_$statname to test2;
grant execute on sys.dbms_lock TO test2;
conn test2/test2
create table test2(id number);
create sequence seq_test2
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;
exit
# 创建脚本,并行执行,模拟生产
cat >/tmp/test2.sh<<EOFALL
sqlplus -s test2/test2<<EOF
begin
  for i in 1..100000 loop
    insert into test2 values(seq_test2.nextval);
    commit;
    dbms_lock.sleep(1);
  end loop;
end;
/
EOF
EOFALL
for i in $(seq 10);do bash /tmp/test2.sh & done

2° B端配置,创建配置抽取进程:

su - oracle
# 创建目录,将抽取同步数据放在自己专有的目录内
mkdir /ggs/dirdat_test2
# 创建抽取进程配置文件
cd /ggs/dirprm
cat >exttest2.prm<<EOF
EXTRACT exttest2
setenv (ORACLE_SID=orcl1)
setenv (NLS_LANG=AMERICAN_AMERICA.UTF8)
SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/db_1")
USERID ggs, PASSWORD ggs
TRANLOGOPTIONS ASMUSER sys@ASM,ASMPASSWORD oracle
THREADOPTIONS MAXCOMMITPROPAGATIONDELAY 20000
REPORT AT 01:59
DYNAMICRESOLUTION
DDL include objname "TEST2.*"
ddloptions addtrandata,report
-- 只抽取业务账号的DDL,动态添加trandata
reportrollover at 02:00
discardfile ./dirrpt/exttest2.dsc,append,megabytes 10
gettruncates
numfiles 3000
EXTTRAIL ./dirdat_test2/et
dynamicresolution
BR BROFF
--- table
table test2.*;
--- sequence
sequence test2.*;
EOF
# 配置启动抽取进程
cd /ggs
./ggsci
dblogin userid ggs,password ggs
add trandata test2.*
info trandata test2.*
add extract exttest2,tranlog,begin now,threads 2
add exttrail ./dirdat_test2/et, extract exttest2
start exttest2
info exttest2
exit

3° B端配置,创建配置发送进程:

su - oracle
# 在B端创建对应的目录,配置发送进程时会将文件放入该目录中
ssh oracle@192.168.77.100 'mkdir /ggs/dirdat_test2'
cd /ggs/dirprm
cat >puptest2.prm<<EOF
EXTRACT puptest2
setenv (ORACLE_SID="orcl")
setenv ( NLS_LANG = AMERICAN_AMERICA.UTF8)
passthru
REPORT AT 01:59
reportrollover at 02:00
RMTHOST 192.168.77.100, MGRPORT 8000, compress
RMTTRAIL ./dirdat_test2/rt
dynamicresolution
numfiles 3000
---table
table test2.*;
---sequence
sequence test2.*;
EOF
# 配置启动发送进程
# 确认目标端mgr进程已启动
ssh oracle@192.168.77.100 'netstat -tupln|grep 8000'
cd /ggs
./ggsci
add extract puptest2,exttrailsource ./dirdat_test2/et
add rmttrail ./dirdat_test2/rt,extract puptest2
start puptest2
info puptest2
exit
# 确认目标端接收到了文件
ssh oracle@192.168.77.100 'ls -l /ggs/dirdat_test2/rt*'

4° B端配置,数据泵导出测试账号test2,发送到A端:

# 查询出当前的SCN,建议在业务低峰时期进行数据同步操作
su - oracle
CUR_SCN=$(echo 'select to_char(current_scn) from v$database;'|sqlplus -s / as sysdba|grep '[0-9]')
# 数据泵导出,根据SCN导出
expdp \'/ as sysdba\' directory=dmp dumpfile=test2.dmp schemas=test2 FLASHBACK_SCN=${CUR_SCN}
scp /home/oracle/dmp/test2.dmp oracle@192.168.77.100:/tmp/

5° A端配置,数据泵导入测试业务账号,禁用外键等:

su - oracle
cp /tmp/test2.dmp /home/oracle/dmp
impdp \'/ as sysdba\' directory=dmp dumpfile=test2.dmp
# 跑脚本,禁用外键、触发器等对象
# 参见《CentOS6u9 Oracle11g 单机OGG灾备部署测试》

6° A端配置,创建配置应用进程:

su - oracle
# 创建应用进程配置文件
cd /ggs/dirprm
cat >reptest2.prm<<EOF
REPLICAT reptest2
SETENV (ORACLE_SID = orcl)
SETENV (NLS_LANG = "American_America.UTF8")
USERID ggs,PASSWORD ggs
sqlexec "Alter session set constraints=deferred"
REPORT AT 01:59
reportrollover at 02:00
--handlecollisions
DBOPTIONS SUPPRESSTRIGGERS
DBOPTIONS DEFERREFCONST
DDL include objname "test2.*"
--ddlerror 1403 ignore
DDLERROR DEFAULT abend
DDLSUBST 'enable' WITH 'disable' INCLUDE OBJTYPE 'trigger', OPTYPE alter
DDLSUBST 'enable' WITH 'disable' INCLUDE INSTR 'ZGLT_CASCADE', OPTYPE alter, OBJTYPE 'CONSTRAINT'
reperror default,abend
--reperror default,discard
discardfile ./dirrpt/reptest2.dsc,append, megabytes 100
assumetargetdefs
checksequencevalue
allownoopupdates
dynamicresolution
numfiles 3000
--HANDLECOLLISIONS
mapexclude test2.SYS_JOURNAL_*;
map test2.*, target test2.*;
EOF
# 配置启动抽取进程
cd /ggs
./ggsci
dblogin userid ggs,password ggs
add checkpointtable ggs.rep_test2_ckpt
add replicat reptest2,exttrail ./dirdat_test2/rt,checkpointtable ggs.rep_test2_ckpt
start reptest2, aftercsn 428545
info reptest2
exit

7° A端监控测试表,测试:

for i in $(seq 10)
do
  echo 'select max(id) from test2.TEST2;'|sqlplus -s / as sysdba
  sleep 1
done

回滚:

1° A端操作:

su - oracle
# 关闭抽取和发送进程
cd /ggs
./ggsci
dblogin userid ggs,password ggs
stop *
delete EXTRACT EXTTEST1
delete EXTRACT PUPTEST1
delete REPLICAT REPTEST2
delete checkpointtable ggs.rep_test2_ckpt!
exit

# 删除进程配置文件,删除数据文件目录
rm -rf /ggs/dirprm/exttest1.prm
rm -rf /ggs/dirprm/puptest1.prm
rm -rf /ggs/dirprm/reptest2.prm
rm -rf /ggs/dirdat_test1/ /ggs/dirdat_test2/
rm -rf /ggs/dirrpt/*

# 删除测试账号
ps -ef|grep test1.sh|grep -v grep|awk '{print $2}'|xargs kill -9
sqlplus -s / as sysdba
set heading off feedback off
spool /tmp/kill_session.sql
select 'alter system kill session '''||SID||','||SERIAL#||''';'
  from v$session where SCHEMANAME='TEST1';
spool off
@/tmp/kill_session.sql
drop user test1 cascade;
exit;

# 删除导出文件和脚本
rm -rf /home/oracle/dmp/* /tmp/test1.sh /tmp/test2.dmp

2° B端操作:

su - oracle
# 关闭抽取和发送进程
cd /ggs
./ggsci
dblogin userid ggs,password ggs
stop *
delete EXTRACT EXTTEST2
delete EXTRACT PUPTEST2
delete REPLICAT REPTEST1
delete checkpointtable ggs.rep_test1_ckpt !
exit

# 删除进程配置文件,删除数据文件目录
rm -rf /ggs/dirprm/exttest2.prm
rm -rf /ggs/dirprm/puptest2.prm
rm -rf /ggs/dirprm/reptest1.prm
rm -rf /ggs/dirdat_test1/ /ggs/dirdat_test2/
rm -rf /ggs/dirrpt/*

# 删除测试账号
ps -ef|grep test2.sh|grep -v grep|awk '{print $2}'|xargs kill -9
sqlplus -s / as sysdba
set heading off feedback off
spool /tmp/kill_session.sql
select 'alter system kill session '''||SID||','||SERIAL#||''';'
  from v$session where SCHEMANAME='TEST2';
spool off
@/tmp/kill_session.sql
drop user test2 cascade;
exit;

# 删除导出文件和脚本
rm -rf /home/oracle/dmp/* /tmp/test2.sh /tmp/test1.dmp

[TOC]

猜你喜欢

转载自blog.csdn.net/zwjzqqb/article/details/80659756
今日推荐