OGG表级同步

OGG可以做全库的同步,也可用来做部分表的同步。下面介绍的案例就是一个基于表的同步。
需要注意的事项:
1,表级别同步也需要开启 FORCE LOGGING ADD SUPPLEMENTAL LOG DATA
2,expdp导出前确源端认字符集
3,expdp导出前记录源端当前的SCN
4,impdp导入前确认目标端字符集
5,启动复制进程时采用源端记录的SCN

实验开始:
source ogg 目录:  /u02/orcl/ogg
target ogg 目录:  /u01/orcl/ogg

一、确认字符集
1. 确认源端字符集
[ora102@cdbsym135]%[/u02]export ORACLE_SID= ORASYM
[ora102@cdbsym135]%[/u02]echo $NLS_LANG
AMERICAN_AMERICA.ZHS16GBK
SQL> select * from nls_database_parameters;

PARAMETER                                                    VALUE
------------------------------------------------------------ ------------------------------
NLS_LANGUAGE                                                 SIMPLIFIED CHINESE
NLS_TERRITORY                                                CHINA
NLS_CURRENCY                                                 ?
NLS_ISO_CURRENCY                                             CHINA
NLS_NUMERIC_CHARACTERS                                       .,
NLS_CHARACTERSET                                             AL32UTF8
NLS_CALENDAR                                                 GREGORIAN
NLS_DATE_FORMAT                                              DD-MON-RR
NLS_DATE_LANGUAGE                                            SIMPLIFIED CHINESE
NLS_SORT                                                     BINARY
NLS_TIME_FORMAT                                              HH.MI.SSXFF AM

2. 确认目标端字符集(目标端的instance name与源端不同)
[ora102@cdbsym3]%[/u02/mydump]export ORACLE_SID= data
[ora102@cdbsym3]%[/u02/mydump]echo $NLS_LANG
AMERICAN_AMERICA.ZHS16GBK

SQL> select * from nls_database_parameters;

PARAMETER                                                    VALUE
------------------------------------------------------------ ----------
NLS_LANGUAGE                                                 AMERICAN
NLS_TERRITORY                                                AMERICA
NLS_CURRENCY                                                 $
NLS_ISO_CURRENCY                                             AMERICA
NLS_NUMERIC_CHARACTERS                                       .,
NLS_CHARACTERSET                                             AL32UTF8
NLS_CALENDAR                                                 GREGORIAN
NLS_DATE_FORMAT                                              DD-MON-RR
NLS_DATE_LANGUAGE                                            AMERICAN
NLS_SORT                                                     BINARY
NLS_TIME_FORMAT                                              HH.MI.SSXF

二,修改OGG参数文件中的字符集设置
1. 源端停止ogg抽取进程、投递进程
GGSCI (cdbsym135) 2> stop extsym
GGSCI (cdbsym135) 4> stop dpesym
GGSCI (cdbsym135) 5> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           
EXTRACT     STOPPED     DPESYM      00:00:00      00:00:06    
EXTRACT     STOPPED     EXTSYM      00:00:00      00:00:14    

2. 删除源端队列文件
[ora102@cdbsym135]%[/u02/orcl/ogg/dirdat]ls
ym000001
[ora102@cdbsym135]%[/u02/orcl/ogg/dirdat] rm -rf ym*

3. 源端EXTRACT修改字符集为AMERICAN_AMERICA.AL32UTF8
   之前的字符集为AMERICAN_AMERICA.ZHS16GBK
EXTRACT extsym
--setenv (NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")
setenv (NLS_LANG=" AMERICAN_AMERICA.AL32UTF8 ")
userid ogg,password ogg_123
GETTRUNCATES
REPORTCOUNT EVERY 1 MINUTES, RATE
numfiles 5000
DISCARDFILE ./dirrpt/extsym.dsc,APPEND,MEGABYTES 1000
DISCARDROLLOVER AT 3:00
WARNLONGTRANS 2h,CHECKINTERVAL 3m
EXTTRAIL ./dirdat/ym,MEGABYTES 200
DYNAMICRESOLUTION
TRANLOGOPTIONS EXCLUDEUSER ogg
TRANLOGOPTIONS  RAWDEVICEOFFSET  0
TRANLOGOPTIONS  CONVERTUCS2CLOBS
--TRANLOGOPTIONS altarchivelogdest primary instance amlstms1 /u11/arch/amlstms, altarc
hivelogdest  instance  amlstms2 /u10/arch/anlstms

table SYMBOLS.RB_AIO_ACCT_STATS;
table SYMBOLS.RB_MEMO_TRAN;
table SYMBOLS.RB_RESTRAINTS;
table SYMBOLS.DP2_RECV_MSG;
table SYMBOLS.DP2_SEND_MSG;
table SYMBOLS.RB_ACCT_STATS;
table SYMBOLS.RB_INT_DETAIL;
table SYMBOLS.RB_TRAN_HIST;
table SYMBOLS.RB_TRAN_DEF;
table SYMBOLS.RB_ACCT_BAL_TYPE;
table SYMBOLS.RB_ACCT;
table SYMBOLS.RB_CASH_RELATION;
table SYMBOLS.FM_BRANCH_TBL;

4. 目标端停止ogg抽取进程、投递进程
GGSCI (cdbsym3) 4>  stop repsym

5. 目标端删除队列文件
[ora102@cdbsym3]%[/u01/orcl/ogg/dirdat]ls
ym000001
[ora102@cdbsym3]%[/u01/orcl/ogg/dirdat] rm -rf ym*


6. 目标端REPLICAT修改字符集为AMERICAN_AMERICA.AL32UTF8
   之前的字符集为AMERICAN_AMERICA.ZHS16GBK
REPLICAT repsym

USERID ogg,PASSWORD  ogg_123
--SETENV (NLS_LANG = "AMERICAN_AMERICA.ZHS16GBK")
setenv (NLS_LANG=" AMERICAN_AMERICA.AL32UTF8 ")
SQLEXEC "ALTER SESSION SET CONSTRAINTS=DEFERRED"
REPORT AT 01:59
REPORTCOUNT EVERY 1 MINUTES, RATE
REPORTROLLOVER AT 02:00
REPERROR DEFAULT, ABEND
--numfiles 5000
--GROUPTRANSOPS 10000
--HANDLECOLLISIONS
assumetargetdefs
DISCARDFILE ./dirrpt/repsym.dsc, APPEND, MEGABYTES 1000
DISCARDROLLOVER AT 02:00
GETTRUNCATES
ALLOWNOOPUPDATES

map SYMBOLS.RB_AIO_ACCT_STATS, target dbp.RB_AIO_ACCT_STATS;
map SYMBOLS.RB_MEMO_TRAN, target dbp.RB_MEMO_TRAN;
map SYMBOLS.RB_RESTRAINTS, target dbp.RB_RESTRAINTS;
map SYMBOLS.DP2_RECV_MSG, target dbp.DP2_RECV_MSG;
map SYMBOLS.DP2_SEND_MSG, target dbp.DP2_SEND_MSG;
map SYMBOLS.RB_ACCT_STATS, target dbp.RB_ACCT_STATS;
map SYMBOLS.RB_INT_DETAIL, target dbp.RB_INT_DETAIL;
map SYMBOLS.RB_TRAN_HIST, target dbp.RB_TRAN_HIST;
map SYMBOLS.RB_TRAN_DEF, target dbp.RB_TRAN_DEF;
map SYMBOLS.RB_ACCT_BAL_TYPE, target dbp.RB_ACCT_BAL_TYPE;
map SYMBOLS.RB_ACCT, target dbp.RB_ACCT;
map SYMBOLS.RB_CASH_RELATION, target dbp.RB_CASH_RELATION;

三,重新创建源端EXTRACT进程、DATA PUMP进程和目标端的REPLICAT进程
源端删除抽取进程、删除投递进程
GGSCI (cdbsym135) > dblogin userid ogg, password ogg_123
GGSCI (cdbsym135) >  delete extsym
GGSCI (cdbsym135) > delete dpesym

源端创建抽取进程 extsym
GGSCI (cdbsym135) > add extract extsym,tranlog,begin now
GGSCI (cdbsym135) > add exttrail ./dirdat/ym,extract extsym,megabytes 200

源端创建投递进程 dpesym
GGSCI (cdbsym135) > add extract dpesym,exttrailsource ./dirdat/ym
GGSCI (cdbsym135) > add rmttrail ./dirdat/ym,extract dpesym ,megabytes 200

源端启动EXTRACT,DATA PUMP进程
start extsym
start dpesym

目标端删除复制进程repsym
GGSCI (cdbsym3) 4> dblogin userid ogg,password ogg_123
GGSCI (cdbsym3) 5> delete repsym

目标端创建复制进程repsym
GGSCI (cdbsym3) 6>  add replicat repsym exttrail ./dirdat/ym, checkpointtable ogg.checktable

四、禁用目标端的trigger、外键级联删除约束、job
1. 目标端查看DBP是否有开启的trigger
SQL> select owner,trigger_name,status from dba_triggers where owner=' DBP ' and status='ENABLED';

禁用DBP下所有trigger
declare
v_sql varchar2(2000);
CURSOR c_trigger IS SELECT 'alter trigger '||owner||'.'||trigger_name||' disable' from dba_triggers where owner in ('DBP');
BEGIN
OPEN c_trigger;
LOOP
FETCH c_trigger INTO v_sql;
EXIT WHEN c_trigger%NOTFOUND;
execute immediate v_sql;
end loop;
close c_trigger;
end;
/

2. 查看DBP下是否存在外键级联删除约束
select distinct constraint_type from dba_constraints where owner='DBP';

禁用DBP下所有外键级联删除约束
declare
v_sql varchar2(2000);
CURSOR c_trigger IS SELECT 'alter table '||owner||'.'||table_name||' disable constraint '||constraint_name from dba_constraints where constraint_type=' R ' and owner in (' DBP ');
BEGIN
OPEN c_trigger;
LOOP
FETCH c_trigger INTO v_sql;
EXIT WHEN c_trigger%NOTFOUND;
execute immediate v_sql;
end loop;
close c_trigger;
end;
/

五,源端准备expdp
1. 查看当前scn

SQL> col GET_SYSTEM_CHANGE_NUMBER for 999999999999999999
SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER
------------------------
           12509239693613


2. 确认expdp的DIRECTORY_NAME
SQL> select * from dba_directories;

OWNER                          DIRECTORY_NAME
------------------------------ ------------------------------
DIRECTORY_PATH
----------------------------------------
SYS                            MYDUMP
/u04/dump_dir

3. 编辑expdp脚本,修改当前scn
[ora102@cdbsym135]%[/home/ora102]cd /u04/dump_dir
[ora102@cdbsym135]%[/u04/dump_dir]ll
total 6318072
-rwxrwxrwx    1 ora102   dba             606 Feb 05 15:38 expdp.sh
-rw-r--r--    1 ora102   dba              28 Feb 05 15:30 include.par
-rw-r--r--    1 ora102   dba            3548 Feb 05 15:41 symbols_20150205.log
-rw-r-----    1 ora102   dba      3234836480 Feb 05 15:41 symbols_20150205_01.dump

mv expdp_orasym_20150204. expdp_orasym_20150205.sh
vi expdp_orasym_20150205.sh

expdp userid=\'/ as sysdba\' directory=mydump logfile=symbols_20150205.log dumpfile=sy
mbols_20150205_%U.dump tables=SYMBOLS.RB_AIO_ACCT_STATS,SYMBOLS.RB_MEMO_TRAN,SYMBOLS.R
B_RESTRAINTS,SYMBOLS.DP2_RECV_MSG,SYMBOLS.DP2_SEND_MSG,SYMBOLS.RB_ACCT_STATS,SYMBOLS.R
B_INT_DETAIL,SYMBOLS.RB_TRAN_HIST,SYMBOLS.RB_TRAN_DEF,SYMBOLS.RB_ACCT_BAL_TYPE,SYMBOLS
.RB_ACCT,SYMBOLS.RB_CASH_RELATION,SYMBOLS.FM_BRANCH_TBL,SYMBOLS.FM_SYSTEM,SYMBOLS.FM_T
AX_RATE,SYMBOLS.RB_BASE_ACCT_STATS,SYMBOLS.RB_ACCT_ATTACH,SYMBOLS.DP2_CNAPS_BANK,SYMBOLS.FM_REF_CODE,SYMBOLS.RB_RESTRAINT_TYPE flashback_scn= 12509239693613

4. 指定字符集为AMERICAN_AMERICA.AL32UTF8
[ora102@cdbsym135]%[/home/ora102]export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
[ora102@cdbsym135]%[/home/ora102]nohup expdp_orasym_20150205.sh &

5. 将源端导出的dmp文件scp到目标端
[ora102@cdbsym135]%[/u04/dump_dir]scp sym* 10.66.204.19:/u02/mydump

六,目标端准备impdp
1. 目标端修改impdp脚本
注意:REMAP_SCHEMA=SYMBOLS:DBP
schema为DBP

export ORACLE_SID=data
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
impdp userid=\'/ as sysdba\' directory=mydump logfile=symbols_20150205_impdp.log dumpfile=symbols_20150205_%U.dump REMAP_SCHEMA=SYMBOLS:DBP table_exists_action=replace parfile=include.par

parfile内容如下:
[ora102@cdbsym3]%[/u02/mydump]cat include.par
exclude=trigger
exclude=CONSTRAINT
exclude=COMMENT
exclude=STATISTICS
exclude=grant

2. 目标端执行impdp导入
[ora102@cdbsym3]%[/u02/mydump]impdp userid=\'/ as sysdba\' directory=mydump logfile=symbols_20150205_impdp.log dumpfile=symbols_20150205_%U.dump REMAP_SCHEMA=SYMBOLS:DBP table_exists_action=replace parfile=include.par

3. 目标端启动REPLICAT进程
GSCI (cdbsym3) 1> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           
REPLICAT    STOPPED     REPSYM      00:00:00      06:06:32 
 
sGSCI (cdbsym3) 2> tart repsym aftercsn 12509239693613

整个实验结束

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29047826/viewspace-1429439/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29047826/viewspace-1429439/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值