GoldenGate配置執行個體:RHEL 4.7下的Oracle 10g RAC到單一實例的單向同步(三)

來源:互聯網
上載者:User
資料初始化(initial data load)

在進行同步以前,要先對目標端的資料進行初始化
線上遷移有幾種方法,這裡採取比較靠譜的兩種:通過資料庫工具(expdp/impdp)和通過檔案匯入到replicat。我們將這兩種方法分別應用在兩組抽取/複製對應的4個資料庫使用者上。w1ext對應的dycommondatabase20使用者和dyulcentermanage使用前者,w2ext對應的dyacdb34和dyulcenterm_bak使用後者。

通過expdp/impdp來遷移初始資料

流程圖如下:

準備工作

1. 禁用DDL的抽取和複製
在extract和replicat參數中將ddl去掉。實際上,若能保證在expdp匯出資料期間不會有ddl操作,可以忽略此項
2. 在replicat中使用HANDLECOLLISIONS參數。每一個目標表都必須由一個主鍵或唯一鍵。如果沒有,使用KEYCOLS選項來代替,如果不能指定,祈禱不會出現兩條完全一樣的記錄吧...

在源端和目標端開啟MANAGER

在源端和目標端執行ggsci命令start mgr,啟動manager進程

在源端,開啟extract進程
GGSCI (rac1) 35> start ext w1ext

Sending START request to MANAGER ...
EXTRACT W1EXT starting

GGSCI (rac1) 36> start ext w1extdp

Sending START request to MANAGER ...
EXTRACT W1EXTDP starting

GGSCI (rac1) 37> info all

Program Status Group Lag Time Since Chkpt

MANAGER RUNNING
EXTRACT RUNNING W1EXT 00:00:00 00:00:05
EXTRACT RUNNING W1EXTDP 00:00:00 02:00:51
EXTRACT STOPPED W2EXT 00:00:00 01:54:09
EXTRACT STOPPED W2EXTDP 00:00:00 01:50:00

在源端,執行expdp匯出資料

首先需要在來源資料中建立一個directory:

SQL> create directory expdpdir as '/bak/expdpdata';

Directory created.

執行匯出:
[oracle@rac1 ~]$ expdp system/aaa directory=expdpdir dumpfile=w1data_%U.dmp logfile=w1data.log schemas=dycommondatabase20, dyulcentermanage parallel=4

將初始資料匯入到目標資料庫

先通過ftp將expdp匯出的檔案拷貝到目標主機上:

目標端:
[oracle@ggdb ~]$ ftp 192.168.47.241
Connected to 192.168.47.241.
……
ftp> cd /bak/expdpdata
250 Directory successfully changed.
ftp> lcd /bak/impdpdata
Local directory now /bak/impdpdata
ftp> bin
200 Switching to Binary mode.
ftp> mget w1*

建立directory:
SQL> create directory impdpdir as '/bak/impdpdata';

Directory created.

需要的資料表空間也要先建立好

資料匯入:
impdp system/aaa directory=impdpdir dumpfile=w1data_%U.dmp logfile=w1data_impdp.log schemas=dycommondatabase20, dyulcentermanage parallel=4


由於資料庫版本是10.2.0.4,需要在目標庫中禁用我們要同步的使用者中的觸發器
SQL>

begin
for x in (select owner,trigger_name from dba_triggers
where owner in ('DYCOMMONDATABASE20', 'DYULCENTERMANAGE'))
loop
execute immediate 'alter trigger '||x.owner||'.'||x.trigger_name||' disable';
end loop;
end;

/

在目標端,啟動複製進程

impdp匯入結束之後,啟動複製進程

GGSCI (ggdb) 51> start rep dyrep

Sending START request to MANAGER ...
REPLICAT DYREP starting

通過info replicat dyrep 命令來查看複製的狀態

在目標端的資料變化追上initial-load結束的時間點後,關閉handlecollisions參數: 先使用SEND REPLICAT命令使之對運行中的replicat生效,然後修改參數檔案,使其在下一次啟動時生效。

GGSCI (ggdb) 57> SEND REPLICAT w1rep, NOHANDLECOLLISIONS

Sending NOHANDLECOLLISIONS request to REPLICAT W1REP ...
W1REP No tables found matching GOLDENGATE.* to set NOHANDLECOLLISIONS.

然後修改dyrep參數檔案,去掉handlecollisions參數

通過檔案到replicat方式來遷移初始資料

流程圖如下所示

expdp/impdp的優勢之一就是匯入很快,而通過檔案到replicat的方式,需要一條一條地應用到目標庫中,因此匯入是最慢的

準備工作

1. 禁用DDL的抽取和複製
2. 確認目標端表是空的
3. 禁用外鍵及check約束
4. 在replicat中使用HANDLECOLLISIONS參數
5. 可以刪除大表中的索引以加快匯入速度,匯入結束後再重建索引

在源端和目標端開啟MANAGER

在源端和目標端執行ggsci,開啟manager
start mgr
這一步在上面已經做過了,就不再重複

配置初始化extract

在源端,添加一個extract,並配置參數

GGSCI (rac1) 1> add extract einit,sourceistable
EXTRACT added.

參數說明:
1.SOURCEISTABLE:將來源資料庫中指定的表中的所有記錄匯出到指定的檔案中,一般用於initial-data load
2. RMTFILE:目標檔案的路徑。設定最大檔案數和最大檔案大小,否則當檔案超過2GB時會出錯

GGSCI (rac1) 2> edit params einit

EXTRACT einit
SOURCEISTABLE
USERID GOLDENGATE, PASSWORD GOLDENGATE
RMTHOST 192.168.47.211, MGRPORT 5898
RMTFILE /opt/gg/trails/initdata,purge,maxfiles 100,megabytes 1024
TABLE dyacdb34.*;
TABLE dyulcenterm_bak.*;

在目標庫中建立資料表空間、使用者及表結構

在匯入資料以前,需要準備好這個容器
我們使用expdp來匯出,不匯出表中的資料:

源端:
[oracle@rac1 ~]$ expdp system/aaa directory=expdpdir dumpfile=w2data.dmp logfile=w2data.log schemas= DYACDB34,DYULCENTERM_BAK exclude=table_data,table_statistics

目標端:
[oracle@ggdb ~]$ ftp 192.168.47.241
Connected to 192.168.47.241.
……
ftp> cd /bak/expdpdata
250 Directory successfully changed.
ftp> lcd /bak/impdpdata
Local directory now /bak/impdpdata
ftp> bin
200 Switching to Binary mode.
ftp> mget w2*

匯入使用者及其表結構:
[oracle@ggdb ~]$ impdp system/aaa directory=impdpdir dumpfile=w2data.dmp logfile=w2data_imp.log schemas=DYACDB34,DYULCENTERM_BAK

禁用約束:
SQL>
begin
for x in (select owner,table_name,constraint_name from dba_constraints where owner in ('DYACDB34', 'DYULCENTERM_BAK') and constraint_type in ('C','R')) loop
execute immediate 'alter table '||x.owner||'.'||x.table_name||
' disable constraint '||x.constraint_name;
end loop;
dbms_output.put_line('ok');
end;
/

禁用觸發器:
SQL>
begin
for x in (select owner,trigger_name from dba_triggers
where owner in ('DYACDB34', 'DYULCENTERM_BAK'))
loop
execute immediate 'alter trigger '||x.owner||'.'||x.trigger_name||' disable';
end loop;
end;
/

在源端,開啟抽取進程

GGSCI (rac1) 3> start ext w2ext
Sending START request to MANAGER ...
EXTRACT W2EXT starting

GGSCI (rac1) 4> start ext w2extdp
Sending START request to MANAGER ...
EXTRACT W2EXTDP starting

GGSCI (rac1) 5> info all

Program Status Group Lag Time Since Chkpt

MANAGER RUNNING
EXTRACT RUNNING W1EXT 00:00:00 00:00:08
EXTRACT RUNNING W1EXTDP 00:00:00 00:00:05
EXTRACT RUNNING W2EXT 02:58:57 00:00:04
EXTRACT RUNNING W2EXTDP 00:00:00 03:03:40

在源端,啟動initial-load extract

[goldengate@rac1 ~]$ cd $GG_HOME
[goldengate@rac1 goldengate]$ ./extract paramfile dirprm/einit.prm reportfile /opt/gg/einit.log

通過查看報告檔案監控抽取的過程和結果,直到抽取結束

配置初始化replicat

在目標端,添加一個replicat,並配置參數

GGSCI (rac2) 1> add replicat rinit,specialrun
REPLICAT added.

參數說明:
1. SPECIALRUN:一次性的匯入,不會產生checkpoint。一般用於通過檔案到replicat的初始資料的載入,或者批量進行更新同步
2. EXTFILE:指定資料所在檔案的路徑,檔案名稱需要輸入全稱
3. ASSUMETARGETDEFS:由於源和目標資料需要同步的表的結構一致,指定該參數以提高效率

GGSCI (rac2) 2> edit params rinit

REPLICAT rinit
SPECIALRUN
USERID GOLDENGATE,PASSWORD GOLDENGATE
EXTFILE /opt/gg/trails/initdata000000
ASSUMETARGETDEFS
MAP DYACDB34.* , TARGET DYACDB34.* ;
MAP DYULCENTERM_BAK.* , TARGET DYULCENTERM_BAK.* ;

在目標端,啟動initial-load replicat

[goldengate@ggdb goldengate]$ cd $GG_HOME
[goldengate@ggdb goldengate]$ ./replicat paramfile dirprm/rinit.prm reportfile /opt/gg/rinit.log

我的測試環境中由於產生了3個extfile,需要修改rinit參數檔案,將extfile檔案名稱修改,再執行2次。也可以增加兩個specialrun的replicat來同時執行。匯入結束後注意查看產生的日誌,確保沒有出現錯誤

在目標端,啟動複製進程

在initial-load replication結束之後,啟動複製進程

GGSCI (ggdb) 51> start rep w2rep

Sending START request to MANAGER ...
REPLICAT W2REP starting

通過info replicat w2rep 命令來查看複製的狀態

在目標端的資料變化追上initial-load結束的時間點後,關閉handlecollisions參數: 先使用SEND REPLICAT命令使之對運行中的replicat生效,然後修改參數檔案,使其在下一次啟動時生效。

GGSCI (ggdb) 57> SEND REPLICAT w2rep, NOHANDLECOLLISIONS

Sending NOHANDLECOLLISIONS request to REPLICAT W2REP ...
W2REP No tables found matching GOLDENGATE.* to set NOHANDLECOLLISIONS.

然後修改w2rep參數檔案,去掉handlecollisions參數

重新啟用目標資料庫中匯入資料前禁用的約束:

SQL>
begin
for x in (select owner,table_name,constraint_name from dba_constraints where owner in ('DYACDB34', 'DYULCENTERM_BAK') and constraint_type in ('C','R')) loop
  execute immediate 'alter table '||x.owner||'.'||x.table_name||
    ' enable constraint '||x.constraint_name;
end loop;
dbms_output.put_line('ok');
end;
/

可以試著在來源資料庫中進行一些ddl或dml操作,在目標端使用ggsci命令stats或在資料庫中查看更改是否被應用了。

這裡GoldenGate就配置完成了

GoldenGate配置執行個體:RHEL 4.7下的Oracle 10g RAC到單一實例的單向同步(一)

http://blog.csdn.net/wildwave/article/details/7053768

GoldenGate配置執行個體:RHEL 4.7下的Oracle 10g RAC到單一實例的單向同步(二)

http://blog.csdn.net/wildwave/article/details/7056362

GoldenGate配置執行個體:RHEL 4.7下的Oracle 10g RAC到單一實例的單向同步(三)

http://blog.csdn.net/wildwave/article/details/7056451

GoldenGate配置執行個體:RHEL 4.7下的Oracle 10g RAC到單一實例的單向同步(四)
http://blog.csdn.net/wildwave/article/details/7056500

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.