GoldenGate複製3:異構跨平臺跨版本支持DDL的oracle複製

之前寫過的兩篇goldengate的操作實驗:

1:  http://blog.csdn.net/bamuta/article/details/25703847 

2:  http://blog.csdn.net/bamuta/article/details/25704037


一.說明:

1.    本次要完成的OGG複製的特點

1)      異構平臺:linux到windows

2)      跨版本:11.2.0.1到10.2.01

3)      支持DDL

4)      同數據:oracle到oracle

5)      不同字符集

6)      不同的schema

 

2.    兩端環境對比

 

源端(單實例)

目標端(單實例)

hostname

pera205

Dev_88

OS

RHEL5.7_64位

Win2003server_64位

ip

192.168.20.205

192.168.20.88

database

11.2.0.1

10.2.0.1

ogg

fbo_ggs_Linux_x64_ora11g_64bit.tar

ggs_Windows_x86_ora10g_32bit.zip

字符集

AL32UTF8

ZHS16GBK

Schema

Pera

Peragg

 

 

 

 

3.    關於DDL

         Oracle的DDL複製本是基於數據庫全局trigger來實現,而dml是基於redo,DDL和DML的複製是相互獨立的,DDL複製和DML複製相互不影響。

 

配置ddl支持

grant execute on utl_file to ggs;

禁用recyclebin

運行必要的腳本:

sqlplus "/as sysdba"

@ marker_setup.SQL
@ddl_setup.SQL
@role_setup.SQL
 
@ ?/rdbms/admin/dbmspool
@ddl_pin
 
還需要在各個參數文件中加以下內容

DDL INCLUDE ALL

 

4.    清理過期的trail文件:

經過了半天時間在源端(./dirdat)和目標端(D:\oracle\product\ggs10\dirdat)分別都產生了2.5個G的trail文件。如果時間過得更久,產生的會更多,無疑對空間是個挑戰。

 

         目標端修改mgr

port 7809

PURGEOLDEXTRACTSD:\oracle\product\ggs10\dirdat\rt*, USECHECKPOINTS, MINKEEPHOURS 2

 

源端

PURGEOLDEXTRACTS /home/oracle/app/gg11/dirdat/ex*,USECHECKPOINTS, MINKEEPHOURS 2

 

 

二.實施過程

1---3爲安裝部分,源端與目標端機器均需要相同操作。

 

1.      操作步驟簡介:

1)      源端:正常運行的生產庫,生產數據均在1個用戶pera下。

2)      目標端:安裝數據庫軟件,並創建相應表空間(略)

3)      兩端GoldenGate安裝配置

4)      啓動驗證程序

5)      Init load:源端以flashback_scn的方法導出pera下的所有表。並在目標端導入。

6)      目標端使用aftercsn啓動replicat進程。

7)      完成ddl支持

2.      源端linux上安裝OGG

1)     配置數據庫

源端啓用歸檔:

SQL> archive log list

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     295

Next log sequence to archive   298

Current log sequence           298

源端啓用supplementlog:

目標端可以不用打開

SQL> Select supplemental_log_data_minfrom V$database;

SQL> Alterdatabase add supplemental log data;

SQL> alter system switch logfile;

SQL> Select supplemental_log_data_minfrom V$database;

 

SUPPLEME

--------

YES

 

由於Oracle中每行記錄是由rowid來唯一標識的,但是邏輯複製(如goldengate,stream等)源端和目標端數據庫的數據塊的結構可能完全不一樣,Rowid無法定位。所以使用了supplement log後,就可以精準定位每一條記錄,解決了該問題。

源端啓用force  log:

SQL> Select name,open_mode,force_logging,supplemental_log_data_minfrom V$database;

SQL> alter database force logging;

SQL> Select name,open_mode,force_logging,supplemental_log_data_min fromV$database;

創建管理用戶:

SQL> create tablespace ggs datafile'/home/oracle/app/oradata/pera205/ggs01.dbf' size 100m;

SQL> create user ggs identified by ggsdefault tablespace ggs;

SQL> grant dba to ggs;

grant execute on utl_file to ggs;

 

 

可以不用直接給dba僅限,給僅僅需要的權限,dba用戶會帶來安裝問題。具體參考官方文檔。

 

禁用recyclebin

如果啓用DDL 支持,必須關閉recyclebin。

Ifthe recyclebin is enabled, the Oracle GoldenGate DDL trigger session receivesimplicitrecycle bin DDL operations that cause the trigger to fail.

 

SQL> alter system set recyclebin=off scope=spfile;

 

 

2)     軟件解壓

[oracle@pera205 gg11]$ pwd

/home/oracle/app/gg11

[oracle@pera205 gg11]$ tar -xvffbo_ggs_Linux_x64_ora11g_64bit.tar

 

3)     環境變量:

新增:

 

export GG_HOME=/home/oracle/app/gg11

PATH=$GG_HOME

LD_LIBRARY_PATH=$GG_HOME:$ORACLE_HOME/lib

4)     安裝GoldenGate

 

[oracle@pera205 gg11]$ pwd

/home/oracle/app/gg11

[oracle@pera205 gg11]$ ggsci

GGSCI (pera205) 1>create subdirs

 

3.      目標端windows上安裝OGG

1)     配置數據庫

 

SQL> archive log list

數據庫日誌模式             非存檔模式

自動存檔             禁用

存檔終點           USE_DB_RECOVERY_FILE_DEST

最早的聯機日誌序列     2137

當前日誌序列           2139

 

SQL> Select name,open_mode,force_logging,supplemental_log_data_minfrom V$database;

 

NAME     OPEN_MODE  FOR SUPPLEME

--------- ---------- --- --------

PERA     READ WRITE NO  NO

 

創建管理用戶:

SQL> create tablespace ggs datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PERA\ggs01.dbf'size 100m;

SQL> create user ggs identified by ggsdefault tablespace ggs;

SQL> grant dba to ggs;

 

--給golden gate數據庫用戶授予能執行ddl安裝腳本的權限。

grant execute on utl_file to ggs;

 

禁用recyclebin

如果啓用DDL 支持,必須關閉recyclebin。但是在目標端可以不用關閉。

SQL> alter system set recyclebin=off scope=spfile;

 

創建新的目標用戶

SQL> create tablespace peragg datafile

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PERA\peragg01.dbf'size 100m;

SQL> create user peragg identified by peraggdefault tablespace peragg;

SQL> grant dba to peragg;

 

 

 

2)     軟件解壓

解壓到了D:\oracle\product\ggs10

 

3)     環境變量:

新增:

 

  

4)     安裝GoldenGate

D:\oracle\product\ggs10>ggsci.exe

系統無法執行指定的程序。

--需要安裝Visual C++ 2005 SP1 Redistributable Package(x86)

D:\oracle\product\ggs10>ggsci.exe

 

Oracle GoldenGate Command Interpreter forOracle

Version 11.1.1.1.2OGGCORE_11.1.1.1.2_PLATFORMS_111004.2100

Windows (optimized), Oracle 10g on Oct  5 2011 00:50:35

 

Copyright (C) 1995, 2011, Oracle and/or itsaffiliates. All rights reserved.

 

GGSCI (dev_88) 1> create subdirs

 

 

4.      配置GG

------下面兩步兩端都需要配置。

1)     GLOBALS參數配置

 

> edit params ./globals

GGSCHEMA ggs

 

2)     配置mgr進程

> edit paramsmgr

port 7809

加外,爲了清理過期trail文件,源端加入:

PURGEOLDEXTRACTS /home/oracle/app/gg11/dirdat/ex*,USECHECKPOINTS, MINKEEPHOURS 2

目標端加入:

PURGEOLDEXTRACTSD:\oracle\product\ggs10\dirdat\rt*, USECHECKPOINTS, MINKEEPHOURS 2

 

> start mgr

> info all

 

3)     源端配置DDL

SQL> @marker_setup.sql;

Enter GoldenGate schema name:ggs

SQL> @ddl_setup

Enter GoldenGate schema name:ggs

Enter mode of installation:INITIALSETUP

SQL> @role_setup

Enter GoldenGate schema name:ggs

SQL> @ddl_enable

 

Trigger altered.

 

SQL> @marker_status.sql

Please enter the name of a schema for theGoldenGate database objects:ggs

SQL> @?/rdbms/admin/dbmspool.sql;

SQL> @ddl_pin.sql

Enter value for 1: ggs

 

 

4)     源端 add trandata

源端創建驗證表。

 

SQL> conn pera/pera

SQL> create table check_test

   (id number,

   name varchar2(30));

 

 

GGSCI (pera205) 13> dblogin userid ggs,password ggs

Successfully logged into database.

 

GGSCI (pera205) 14> add trandata pera.*

 

這一步時,部分表遇到以下問題:這個問題是缺少主鍵,可以忽略。

 

2014-05-09 17:07:19  WARNING OGG-00869  No unique key is defined for tableERM_USER_MAJOR. All viable columns will be used to represent the key, but maynot guarantee uniqueness.  KEYCOLS may beused to define the key.

 

???

                       

--下面報錯針對一張臨時表,忽略即可。

2014-07-2316:32:28  WARNING OGG-00706  Failed to add supplemental log group on tablePERA.RDM_MONITOR_STATISTICS_TEMP due to ORA-14450: attempt to access atransactional temp table already in use, SQL ALTER TABLE"PERA"."RDM_MONITOR_STATISTICS_TEMP" ADD SUPPLEMENTAL LOGGROUP "GGS_RDM_MONITOR_STA_144259"("TASK_ID","GROUP_ID","GROUP_NAME","GROUP_PATH","MODEL_ID","FINISHED_WB_COUNT","ALL_WB_COUNT",".

 

 

----如果一張表,其列的數量超過33列(含),且沒有primary key的話,則在執行add trandata命令時,會報OGG-01387錯誤,這個錯誤需要手工修復

 

2014-07-2316:32:35  WARNING OGG-01387  Table PERA.RDM_PERMISSION_DATA has no validkey columns, added unconditional supplemental log group for all table columns.

 

 

以下SQL可以檢查哪些表的supplement log失敗。

select owner,table_name  

     from all_tables  

    where owner in ('PERA')  

      and table_name not in (select distinct table_name  

                               from dba_log_group_columns  

                              where owner in ('PERA'));  

 

需要手動如下操作

 

 

alter table RDM_PERMISSION_DATA add supplemental log group ggs_pera_1(col1,col2,...,col33) always;

alter table RDM_PERMISSION_DATA add supplemental log group ggs_pera_2(col34,col35...,col40) always;

 

 

 

 

5)     源端 extract 進程文件

 

GGSCI (pera205) 6> edit params ex1

EXTRACT ex1

SETENV (NLS_LANG = AMERICAN_AMERICA.AL32UTF8

USERID ggs, password ggs

EXTTRAIL ./dirdat/ex

DDL INCLUDE ALL

TABLE pera.*;

 

GGSCI (pera205) 3> view params ex1

GGSCI (pera205) 4> add extract ex1,tranlog, begin now

EXTRACT added.

 

 

GGSCI (pera205) 5> add exttrail./dirdat/ex, extract ex1

EXTTRAIL added.

6)     源端pump 進程

 

GGSCI (pera205) 13> edit params dp1

EXTRACT dp1

USERID ggs,PASSWORD ggs

RMTHOST 192.168.20.88, MGRPORT 7809

RMTTRAIL D:\oracle\product\ggs10\dirdat\rt

DDL INCLUDE ALL

TABLE pera.*;

 

--DDL的其他寫法

  ddl include mapped objname pera.*;

DDL INCLUDE MAPPED

--最好別用ALL,ALL會傳遞過多的DDL信息,導致replication的時候容易失敗。

 

增加源端extract目錄

GGSCI (pera205) 7> add extract dp1exttrailsource ./dirdat/ex

EXTRACT added.

 

增加目錄端trail文件位置

GGSCI (pera205) 8> add rmttrail D:\oracle\product\ggs10\dirdat\rt,extract dp1

RMTTRAIL added.

 

7)     目標端 CHECKPOINT TABLE

GGSCI (DEV_88) 9> edit params ./GLOBALS

GGSCHEMA ggs

CHECKPOINTTABLE ggs.ggs_checkpoint

 

[oracle@DEV_88 gg11]$ ggsci

GGSCI (DEV_88) 1> dblogin userid ggs,password ggs

GGSCI (DEV_88) 4> add checkpointtable

 

SQL> conn ggs/ggs

Connected.

SQL> select * from tab;

 

TNAME                          TABTYPE  CLUSTERID

------------------------------ -----------------

GGS_CHECKPOINT                 TABLE

 

8)     目標端 REPLICAT進程

GGSCI (DEV_88) 7> edit params rt1

REPLICAT RT1

SETENV (NLS_LANG = AMERICAN_AMERICA.AL32UTF8

ALLOWNOOPUPDATES

USERID ggs,PASSWORD ggs

ASSUMETARGETDEFS

DISCARDFILE ./discards.dsc, PURGE

DDL INCLUDE MAPPED

MAP pera.*, TARGET peragg.*;

 

GGSCI (dev_88) 4> add replicat rt1,exttrail D:\oracle\product\ggs10\dirdat\rt, checkpointtable ggs.ggs_checkpoint

REPLICAT added.

 

9)     源端創建驗證程序:

 

啓動驗證程序

 

declare

begin

for i in 1..100000 loop

insert into check_test values(i,'tan');

commit;

dbms_lock.sleep(1);

end loop;

end;

/

 

 

SQL> select * from check_test;

 

 

GGSCI (pera205) 7> info all

 

Program    Status      Group       Lag           Time Since Chkpt

 

MANAGER    RUNNING                                          

EXTRACT    STOPPED     DP1         00:00:00      02:00:09   

EXTRACT    STOPPED     EX1         00:00:00      02:02:02

 

GGSCI (DEV_88) 11> info all

 

Program    Status      Group       Lag           Time Since Chkpt

 

MANAGER    RUNNING                                          

REPLICAT   STOPPED     RT1         00:00:00      00:20:40 

1.    同步數據

 

1)     源端啓動extract,pump進程

 

GGSCI (pera205) 8> start ex1

GGSCI (pera205) 14> start dp1

GGSCI (pera205) 15> info all

 

Program    Status      Group       Lag           Time Since Chkpt

 

MANAGER    RUNNING                                          

EXTRACT    RUNNING     DP1         00:00:00      02:03:02   

EXTRACT    RUNNING     EX1         00:00:00      00:00:03   

 

此時先不用啓動目標端的replicat進程。

 

2)     使用exp/imp完成init load

用帶FLASHBACK_SCN 的expdp/impdp初始化

SQL> select current_scn from V$database;

 

CURRENT_SCN

-----------

588375128

 

exp system/oracle@pera205file=pera.20140724.dmp log=gg.log owner=pera    flashback_scn= 588375128  compress=n buffer=40960000

 

imp system/oracle file=pera.20140724.dmplog=imp.log fromuser=pera touser=peragg

 

3)     用SCN 啓動Replicat

 

GGSCI (DEV_88) 28> start rt1, aftercsn 588375128 

 

Sending START request to MANAGER ...

REPLICAT RT1 starting

 

GGSCI (DEV_88) 29> info all

Program    Status      Group       Lag           Time Since Chkpt

MANAGER    RUNNING                                          

REPLICAT   RUNNING     RT1         00:00:00      00:00:04   

 

2.    驗證:

DML驗證 通過

測試了數據傳遞、都能通過。(是通過前面創建的表check_test驗證的,驗證完後刪除)

DDL驗證  通過

對錶測試了create 、alter 、truncate、drop,都能正確傳遞到目標端。

字符集驗證通過

操作過程:源端插入漢字,查看字符編碼,在同步到目標端後,在目標端查看字符編碼再查看字符編碼。

源端驗證:

SQL> select dump('譚',1016) fromdual;

Typ=96 Len=3 CharacterSet=AL32UTF8:e8,b0,ad

SQL> select xid, dump(xname,1016) dumpfrom checks;

Typ=1 Len=3 CharacterSet=AL32UTF8: e8,b0,ad

 

目標庫字符正確的編碼

SQL> select dump('譚',1016) from dual;

 

DUMP('譚',1016)

-----------------------------------------

Typ=96 Len=2 CharacterSet=ZHS16GBK: cc,b7

目標庫驗證傳輸過來的漢字:

select xid, dump(xname,1016) dump fromchecks;

 

Typ=1 Len=2 CharacterSet=ZHS16GBK: cc,b7

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章