goldengate 單向DDL

datapeng發表於2013-12-07
GoldenGate幾個重要程式介紹:
Manager:是GoldenGate的控制程式,執行在源端和目標端上。它主要作用有以下幾個方面:啟動、監控、重啟Goldengate的其他程式,報告錯誤及事件,分配資料儲存空間,釋出閥值報告等。在目標端和源端有且只有一個manager程式;
 
Extract:執行在資料庫源端,負責從源端資料表或者日誌中捕獲資料。
初始時間裝載階段:在初始資料裝載階段,Extract程式直接從源端的資料表中抽取資料
同步變化捕獲階段:初始資料同步完成以後,Extract程式負責捕獲源端資料的變化(DML和DDL);
 
Pump(可選):執行在資料庫源端,其作用是將源端產生的本地trail檔案,把trail以資料塊的形式透過TCP/IP 協議傳送到目標端,這通常也是推薦的方式。pump程式本質是extract程式的一種特殊形式,如果不使用trail檔案,那麼extract程式在抽取完資料以後,直接投遞到目標端,生成遠端trail檔案。如果要使用pump,必須配置本地trail,否則不用;
 
Collector:與 Pump程式對應 的叫Server Collector程式,這個程式不需要引起我的關注,因為在實際操作過程中,無需我們對其進行任何配置,所以對我們來說它是透明的。它執行在目標端,其任務就是把Extract/Pump投遞過來的資料重新組裝成遠端trail檔案;
 
Replicat:通常我們也把它叫做應用程式。執行在目標端,是資料傳遞的最後一站,負責讀取目標端trail檔案中的內容,並將其解析為DML或DDL語句,然後應用到目標資料庫中;


Trail:該檔案是gg自己抓捕資訊的檔案,是一個OS檔案,存放在./dirdat/下,以X00000命名,N順序1,2,3…此檔案用完可配置引數自動刪除;


注:安裝GoldenGate源端和目標端版本必須一致。


1、環境準備並安裝GoldenGate
1.1 資料庫準備情況
1) 源伺服器
IP地址:192.168.1.181
資料庫:10.2.0.5 64 bit
SID: orcl 
作業系統版本:Redhat 5.6 64 bit
ogg版本:fbo_ggs_Linux_x64_ora10g_64bit.tar
說明:前提條件是資料庫已經準備方式安裝完畢。
2) 目標伺服器(11gRAC 只掛載主節點)(多節點部署由於在目前還沒嘗試)
IP地址:192.168.1.41
資料庫:11.2.0.3.0 64 bit
SID: rac1
作業系統版本:Redhat 5.8 64 bit
ogg版本:fbo_ggs_Linux_x64_ora11g_64bit.tar
說明:前提條件是資料庫已經準備方式安裝完畢。
1.2. 下載OGG軟體並解壓安裝
1) 配置源伺服器
root使用者下:
mkdir -p /u01/app/oracle/ogg
chown -R oracle:oinstall /u01/app/oracle/ogg
chmod -R 755 /u01/app/oracle/ogg
oracle使用者下執行:
unzip ogg112101_fbo_ggs_Linux_x64_ora10g_64bit.zip 
tar -xvf fbo_ggs_Linux_x64_ora10g_64bit.tar


2) 配置目標伺服器
root使用者下:
mkdir -p /u02/app/oracle/ogg
chown -R oracle:oinstall /u02/app/oracle/ogg
chmod -R 755 /u02/app/oracle/ogg
oracle使用者下執行:
unzip ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip
tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar
 
1.3. 準備OGG環境變數
#配置源伺服器與目標伺服器的環境變數:
vi /home/oracle/.bash_profile
增加如下一行:
export GGATE=$ORACLE_BASE/ogg
export PATH=$ORACLE_BASE/ogg/10.0:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_BASE/ogg/10.0:$LD_LIBRARY_PATH
生效環境變數
source /home/oracle/.bash_profile


1.4. 配置日誌模式
# 配置源伺服器日誌模式,目標伺服器不用配置(非雙向)
1) 檢視規檔與日誌模式
sqlplus / as sysdba
select log_mode,supplemental_log_data_min,force_logging from v$database;


2) 配置為規檔模式
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
alter system set log_archive_dest_1='location=/u01/archive' scope=both;


3) 配置日誌模式(開啟強制規檔與補充日誌模式)
alter database add supplemental log data;  
alter database force logging; 


4)檢視配置結果:
SQL> select log_mode,supplemental_log_data_min,force_logging from v$database;
LOG_MODE     SUPPLEME FOR
------------ -------- ---
ARCHIVELOG   YES      YES
1.5. 建立GoldenGate使用者帳號
1) 源伺服器配置
su - oracle
sqlplus /nolog
conn / as sysdba;
create tablespace tbs_ogg datafile '/u01/app/oracle/oradata/orcl/tbs_ogg.dbf' size 10m autoextend on next 10m;
create user ogg identified by ogg default tablespace tbs_ogg temporary tablespace TEMP quota unlimited on tbs_ogg;
grant connect,resource to ogg;
grant create session,alter session to ogg;
grant select any dictionary,select any table to ogg;
grant alter any table to ogg;
grant flashback any table to ogg;
grant execute on dbms_flashback to ogg;


2) 目標伺服器配置
su - oracle
sqlplus /nolog
conn / as sysdba;
create tablespace tbs_ogg datafile '/u02/app/oracle/oradata/rac1/tbs_ogg.dbf' size 10m autoextend on next 10m;
create user ogg identified by ogg default tablespace tbs_ogg temporary tablespace TEMP quota unlimited on tbs_ogg;
grant connect,resource to ogg;
grant create session,alter session to ogg;
grant select any dictionary,select any table to ogg;
grant alter any table to ogg;
grant flashback any table to ogg;
grant execute on dbms_flashback to ogg;
grant insert any table to ogg;
grant delete any table to ogg;
grant update any table to ogg;


或者直接
grant connect,resource to ogg;
grant dba to ogg;
1.6. 安裝GoldenGate軟體
(1) 配置源伺服器
su - oracle
cd /u01/app/oracle/ogg
./ggsci  
GGSCI (test) 1> create subdirs


Creating subdirectories under current directory /u01/app/oracle/ogg
Parameter files                /u01/app/oracle/ogg/dirprm: already exists
Report files                   /u01/app/oracle/ogg/dirrpt: created
Checkpoint files               /u01/app/oracle/ogg/dirchk: created
Process status files           /u01/app/oracle/ogg/dirpcs: created
SQL script files               /u01/app/oracle/ogg/dirsql: created
Database definitions files     /u01/app/oracle/ogg/dirdef: created
Extract data files             /u01/app/oracle/ogg/dirdat: created
Temporary files                /u01/app/oracle/ogg/dirtmp: created
Stdout files                   /u01/app/oracle/ogg/dirout: created


(2) 配置目標伺服器
su - oracle
cd /u02/app/oracle/ogg
./ggsci
GGSCI (rac1) 1> create subdirs


Creating subdirectories under current directory /u02/app/oracle/ogg
Parameter files                /u02/app/oracle/ogg/dirprm: already exists
Report files                   /u02/app/oracle/ogg/dirrpt: created
Checkpoint files               /u02/app/oracle/ogg/dirchk: created
Process status files           /u02/app/oracle/ogg/dirpcs: created
SQL script files               /u02/app/oracle/ogg/dirsql: created
Database definitions files     /u02/app/oracle/ogg/dirdef: created
Extract data files             /u02/app/oracle/ogg/dirdat: created
Temporary files                /u02/app/oracle/ogg/dirtmp: created
Stdout files                   /u02/app/oracle/ogg/dirout: created


注1:ogg_11.1.1.1.2,ogg_11.2.x.x.1顯示建立的檔案目錄列表結構不一樣。
上為ogg11.2版本的建立的內容。
1.7. 配置源、目標資料庫一致
配置源與目標資料一致性可以採用很多方法,可以採用oracle的方式來完成。
本方式採用imp方式來實現初始資料表一致。


這裡我建立了一個測試使用者(建立使用者過程略)
conn oggtest/oggtest


create table dept as select * from scott.dept;(源端和目標端)
2、GoldenGate DML同步源端配置
配置思路:
1) 先配置DML同步
2) 再配置DDL同步
cd /u01/app/oracle/ogg
./ggsci
2.1. 源MGR程式
1) 編輯主程式組
edit params mgr


port 7809
dynamicportlist 7800-8000
autorestart extract *,retries 5,waitminutes 2,resetminutes 5
說明:
port 指定mgr程式通訊埠
dynamicportlist 表示mgr程式可以為源與目的端動態通訊指定埠
autorestart extract 表示自動重啟extract程式組,每2分鐘嘗試重啟所有程式,重試5次,每5分鐘清零。
配置引數後,重啟mgr程式生效
2) 啟動主管理程式
start mgr
2.2. 配置Extract程式組 (源端)
1) 編輯配置檔案
edit params SEXTR01


extract SEXTR01
dynamicresolution
setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK) 
userid ogg,password ogg  
exttrail /u01/app/oracle/ogg/dirdat/et  
table oggtest.*; 
說明:
extract SEXTR01定義extract程式名字
dynamicresolution 
setenv設定環境變數
userid 登入資料庫
exttrail指定本地trail檔案地址
table 定義同步的表


2) 新增抽取程式
add extract SEXTR01, tranlog,begin now


3) 新增本地trail檔案
add exttrail /u01/app/oracle/ogg/dirdat/et,extract SEXTR01
說明:
建立本地trail檔案,主extract程式負責寫這部分檔案,pump負責把這部分檔案傳到目標伺服器端。
4) 啟動服務
start extract SEXTR01


2.3. 配置Pump程式組
1) 編輯配置檔案
edit params SPUMP01


extract SPUMP01
dynamicresolution
passthru
rmthost 192.168.1.41,mgrport 7809,compress
rmttrail /u02/app/oracle/ogg/dirdat/pt (目標端地址)
table oggtest.*;


2) 新增pump程式
add extract SPUMP01,exttrailsource /u01/app/oracle/ogg/dirdat/et


3) 新增遠端trail檔案
add rmttrail /u02/app/oracle/ogg/dirdat/pt,extract SPUMP01
說明: 指定遠端trail檔案(這裡容易犯錯筆者在第一次安裝這裡寫成本地地址,程式一直起不來,所有這裡應該是目標端地址)


4) 啟動pump程式
start extract SPUMP01
3、GoldenGate DML同步目標端配置
cd /u02/app/oracle/ogg
./ggsci
3.1. 目標端MGR程式
1) 編輯配置檔案
edit params mgr


port 7809
dynamicportlist 7800-8000
autostart er *
autorestart extract *, waitminutes 2, resetminutes 5
lagreporthours 1
laginfominutes 3
lagcriticalminutes 5
purgeoldextracts /u02/app/oracle/ogg/dirdat/rt*, usecheckpoints, minkeepdays 3


2) 啟動
start mgr
3.2. 新增檢查表
說明: 當我們在GLOBALS 檔案裡指定了預設的checkpoint 之後,新的Replicat groups 在建立時會自動使用這個引數,不需要其他指令
1) 編輯全域性配置檔案
edit params ./GLOBALS 


CHECKPOINTTABLE ogg.checkpoint
2)exit # 這裡需要退出ggsci終端 


3) 新增checkpoint表
./ggsci  
GGSCI (rac1) 1> dblogin userid ogg,password ogg
Successfully logged into database.


GGSCI (rac1) 2> add checkpointtable ogg.checkpoint
Successfully created checkpoint table ogg.checkpoint.


3.3. 配置目標端Peplicat程式組
1) 編輯配置檔案
edit params repl


replicat repl
userid ogg,password ogg
assumetargetdefs
reperror default,discard
discardfile /u02/app/oracle/ogg/dirrpt/repl.dsc,append,megabytes 50
dynamicresolution
map oggtest.*, target oggtest.*;


2) 新增複製程式
add replicat repl,exttrail /u02/app/oracle/ogg/dirdat/pt, CHECKPOINTTABLE ogg.checkpoint


3) 啟動程式
start repl


3.4. 可以檢視checkpoint狀態
su - oracle
sqlplus ogg/ogg
SQL> select tname from tab;  
TNAME  
-------------------------------------  
CHECKPOINT                     TABLE
CHECKPOINT_LOX                 TABLE
select * from checkpoint;
注1:ogg_11.1.1.1.2只有CHECKPOINT一張表。
注2:ogg_11.2.x.x.1有CHECKPOINT,CHECKPOINT_LOX兩張表。
3.5. DML配置測試
進入源端
conn oggtest/oggtest
select * from dept;
insert into dept values (50,'alex','wuhan');
commit;


進入目標端
conn oggtest/oggtest
select * from dept;
SQL> select * from dept;


    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
        50 alex           wuhan    (複製成功)
看到這裡就成功了
4、 GoldenGate DDL同步配置
4.1. 支援DDL複製執行指令碼
# 伺服器源端配置
1) 指定資料庫模式
./ggsci  
GGSCI (test) 1> edit param ./GLOBALS 
GGSCI (test) 2> view param ./GLOBALS  
ggschema ogg
GGSCI (test) 3> stop mgr 
2) oralce 10gR2資料庫需要關閉回收站。
su - oracle
cd /u01/app/oracle/ogg
sqlplus / as sysdba;
alter system set recyclebin=off scope=both;


注:
禁用recycle bin
對於11g: 需要重啟才能生效
ALTER SYSTEM SET recyclebin = OFF scope=spfile;
對於10g:
Alter system set recyclebin=off scope=both;


3) 安裝DDL物件
進入到ogg目錄登陸到sqlplus:
SQL> grant dba to ogg;
SQL> @marker_setup     說明: 均指定使用者ogg
SQL> @ddl_setup        說明: 11.1.1.2需要手動輸入 ogg,INITIALSETUP,yes
SQL> @role_setup  
SQL> grant GGS_GGSUSER_ROLE to ogg;
SQL> @ddl_enable
SQL> @marker_status.sql
注1: 執行dbmspool包將在資料庫中建立DBMS_SHARED_POOL包,之後ddl_pin包需要用到
SQL> @?/rdbms/admin/dbmspool.sql
Package created.
Grant succeeded.
View created.
Package body created.
注2: 執行ddl_pin.sql透過dbms_shared_pool.keep儲存過程將DDLReplication相關物件keep在共享池中,以保證這些物件不要RELOAD,提升效能。
SQL> @ddl_pin.sql ogg
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
指令碼說明:
marker_setup  --該指令碼安裝marker系統,這部分為啟用DLL支援所必備,執行該指令碼時會提示輸入GoldenGate管理帳戶schema名.
ddl_setup  --執行該指令碼要確認關閉掉所有ORACLE會話,未被關閉的會話會以列表形式顯示,執行過程中會要求希望物件屬主,並選擇安裝模式。如果是初次安裝就選擇“INITIALSETUP”,該模式假設當前沒有任何GoldenGate DDL物件存在,如果存在則會刪除並重建。如果是重新安裝,則應該選擇“NORMAL”.
role_setup --該操作會重建DDL同步所需的許可權,授予GoldenGate中的DDL物件以DML許可權.
ddl_enable  --啟用DDL觸發器,以捕獲DDL操作.
要提高DDL觸發器的效能,可以透過ddl_pin指令碼,該指令碼會將觸發器使用的包載入到記憶體,以此提高效率。該指令碼執行時需要引用dbms_shared_pool系統包,因此在使用ddl_pin指令碼前需要確保dbms_shared_pool可用。
@?/rdbms/admin/dbmspool.sql


ddl_pin --執行ddl_pin指令碼需要指定GoldenGate管理員schema名稱.
然後,用於同步DDL操作的物件就建立完成了。


4.2. 修改extract程式的params檔案
# 伺服器源端配置
# source端修改extract程式的params檔案,新增"ddl include all"引數,重啟extract程式
1) 停止SEXTR01程式
GGSCI (test) 2> stop extract SEXTR01
2) 編輯配置檔案
GGSCI (test) 3> edit params SEXTR01
extract SEXTR01
dynamicresolution
setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
userid ogg,password ogg 
exttrail /u01/app/oracle/ogg/dirdat/et  
ddl include all   (新增)
ddloptions addtrandata, report (新增)
table oggtest.*; 
 
3)啟動mgr, SEXTR01程式
GGSCI (test) 4> start mgr 
GGSCI (test) 5> start extract SEXTR01


4) 檢視SEXTR01程式啟動情況
GGSCI (test) 6> info extract SEXTR01


4.3. 修改目標端replicat程式的params檔案
# 目標伺服器配置
# target端修改replicat程式的params檔案,
新增"ddlerror default ignore retryop maxretries 3 retrydelay 5" 等引數,重啟replicat程式
1) 停止mgr程式
GGSCI (rac1) 1> stop mgr
2) 停止repl程式
GGSCI (rac1) 1> stop replicat repl 
Sending STOP request to REPLICAT RORA_T1 ...  Request processed.


3) 編輯repl配置檔案
GGSCI (rac1) 1> edit params repl 
GGSCI (rac1) 2> view params repl
replicat repl
userid ogg,password ogg
assumetargetdefs
reperror default,discard
discardfile /u02/app/oracle/ogg/dirrpt/repl.dsc,append,megabytes 50
dynamicresolution
ddloptions report (新增)
ddlerror default ignore retryop maxretries 3 retrydelay 5 (新增)
ddlerror default discard (新增)
ddlerror default ignore retryop (新增)
map oggtest.*, target oggtest.*;


注: 說明目標端不需要配置DDL include all語句,不然的話,反而會出錯。
可以透過以下語句去掉不需要同步的表:
mapexclude oggtest.table1  -- 去掉的複製表


4) 啟動repl程式 
GGSCI (rac1) 4> start mgr   # 會自動啟動repl程式
GGSCI (rac2) 5> info replicat repl


4.4 測試
在源端oggtest使用者建立一個表,檢視目標端是否成功建立。
conn oggtest/oggtest
create table abc ( id integer , name char(10));
insert into abc values ( 1 , 'abc' );


登陸到目標端:
conn oggtest/oggtest


SQL> select * from tab;


TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
ABC                            TABLE
DEPT                           TABLE


SQL> select * from abc;


        ID NAME
---------- ----------
         1 abc




附: 解除安裝GG
Uninstalling Oracle GoldenGate from Linux or UNIX
1. Run the command shell.
2. (Suggested) Log on as the systemadministrator, or as a user with permission to issue Oracle GoldenGatecommands, and to delete files and directories from the operating system.
3. Change directories to the OracleGoldenGate installation directory.
4. Run GGSCI.
5. Stop all Oracle GoldenGate processes.
6. Stop the Manager process.
7. Exit GGSCI.
8. Remove the Oracle GoldenGate files byremoving the installation directory.
9. Drop any Oracle GoldenGate-relatedobjects from the database as needed.
                                                

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29371470/viewspace-1062622/,如需轉載,請註明出處,否則將追究法律責任。

相關文章