1. 程式人生 > 其它 >GoldenGate資料遷移的問題總結(一)(r10筆記第84天)

GoldenGate資料遷移的問題總結(一)(r10筆記第84天)

今天對GoldenGate的資料同步進一步做了測試,發現在一些模擬真實的場景中,需要考慮的因素要更多更為複雜。簡單同步幾條,幾百條資料的測試同步做驗證測試可以,但是很難測試出來一些潛在的問題,今天碰到了一些問題,基本都得到了解決。

首先要測試的這個環境資料要多一些。匯出了一個測試環境的資料進行OGG的複製演練。

test@TESTDB> select table_type from cat group by table_type
TABLE_TYPE
-----------
TABLE
VIEW
SYNONYM
SEQUENCE
test@TESTDB> select count(*)from cat;
  COUNT(*)
----------
       259

我覺得資料遷移裡面增量資料的遷移實在是太複雜了,一旦某個地方出錯,回滾的餘地都會很小。這個使用者下有不少的表,所以測試起來就會更加謹慎小心。為了不影響其它使用者,我先做了源端和目標端的配置。源端基於Solaris,10gR2,目標端基於Linux 64,11gR2

配置抽取程序

dblogin userid ogg_source,password oracle
add trandata test.*

edit params ext_test
  EXTRACT ext_test
  USERID ogg_source, PASSWORD oracle
  EXTTRAIL /export/home/oracle/ogg/ogg_10g/dirdat/tl
  TABLE test.*;

ADD EXTRACT ext_test, TRANLOG, BEGIN NOW
ADD EXTTRAIL /export/home/oracle/ogg/ogg_10g/dirdat/tl, EXTRACT ext_test
start ext_test
info ext_test

配置投遞程序

edit params dp_test
  EXTRACT dp_test
  PASSTHRU
  RMTHOST 10.127.133.125, MGRPORT 1530
  RMTTRAIL  /export/home/oracle/ogg/ogg_10g/dirdat/tl
  TABLE test.*; 

ADD EXTRACT dp_test,EXTTRAILSOURCE /export/home/oracle/ogg/ogg_10g/dirdat/tl
ADD RMTTRAIL /export/home/oracle/ogg/ogg_10g/dirdat/tl, EXTRACT dp_test

start dp_test
info dp_tes配置應用程序
dblogin userid ogg_target,password oracle

edit params rep_test
  REPLICAT REP_test
  USERID ogg_target, PASSWORD oracle
  ASSUMETARGETDEFS
  HANDLECOLLISIONS
  MAP test.*,TARGET test.*;

ADD REPLICAT rep_test, EXTTRAIL /export/home/oracle/ogg/ogg_10g/dirdat/tl,CHECKPOINTTABLE ogg_target.CHKPTAB
start rep_test為了簡單測試一下資料量大的情況下的同步情況,我選取了下面的幾個表資料,摘自impdp的日誌
. . imported "test"."SWD_DRAWCN"                         839.7 MB 11174310 rows
. . imported "test"."SWD_QDRAWCHECK"                     187.7 MB 9052277 rows
. . imported "test"."TL_SERVER_LOG"                      13.92 MB   61341 rows
. . imported "test"."SWD_DRAWCARD"                       8.129 MB  185044 rows

首先測試了delete的情況,看看源端,目標端的同步速率,整個過程持續了近40分鐘,其中大部分的時間都在源端,可見硬體老化還是很嚴重的,在目標端同樣的操作就快了不是一點半點。

問題1:抽取程序失敗

然後再次使用impdp在源端匯入資料,這個過程源端的抽取程序很可能會失敗,原因之一就是因為impdp需要建立一個臨時表,而我們在配置裡指定測試使用者下的表都要對映 。

2016-11-16 16:21:04  ERROR   OGG-00901  Failed to lookup object ID for table test.SYS_IMPORT_TABLE_01

.這個過程很容易,在Impdp完成後重啟抽取程序即可。

問題2:支援TRUNCATE

我對測試環境中的物件進行了檢查,發現有一個地方很可能出現問題,因為在線上庫中存在一個JOB,會先清空一箇中繼表資料,然後補入一部分資料,清空的操作是truncate,所以資料同步還是需要支援truncate操作,對於其它的DDL暫時先不動。

要實現識別truncate的操作,OGG已經做好了,需要在抽取程序和應用程序的引數配置,加入一個引數GETTRUNCATES即可。這樣就可以輕鬆同步資料了,使用truncate都可以自動同步,擺平了一個潛在的隱患。

問題3:投遞程序失敗

下午在大批量資料的測試場景中,發現投遞程序竟然自動停了。

2016-11-16 17:22:36  ERROR   OGG-01668  Oracle GoldenGate Capture for Oracle, dp_test.prm:  PROCESS ABENDING.
2016-11-16 17:22:53  INFO    OGG-01026  Oracle GoldenGate Capture for Oracle, ext_test.prm:  Rolling over remote file /export/home/o
racle/ogg/ogg_10g/dirdat/tl000059.--登入到目標端,發現數據庫直接hang住了。

[oracle@newtest ~]$ sqlplus n1/n1
^C ERROR:
ORA-02002: error while writing to audit trail
ORA-00604: error occurred at recursive SQL level 1
ORA-01013: user requested cancel of current operation

而問題的原因就是歸檔空間滿了。簡單清理後繼續測試。

問題4:trail檔案的清理

而後續繼續測試,發現另外一個問題擺上了日程,那就是對trail檔案的清理,其中一個方式就是在mgr中配置引數,設定一個範圍來刪除。

edit param mgr PURGEOLDEXTRACTS /export/home/oracle/ogg/ogg_10g/dirdat/tl*, USECHECKPOINTS, MINKEEPDAYS 2

問題5:無法停止replicat程序

如果在資料同步的過程中,停止replicat程序失敗,會直接影響資料同步的情況

GGSCI (newtest.oracle.com) 10> stop rep_test Sending STOP request to REPLICAT REP_test ... STOP request pending end-of-transaction (6158834 records so far)..

可以使用kill的方式終止

GGSCI (newtest.oracle.com) 9> info all Program Status Group Lag at Chkpt Time Since Chkpt MANAGER STOPPED REPLICAT STOPPED REP_1 00:00:00 00:00:34 REPLICAT RUNNING REP_test 00:31:32 01:01:07

GGSCI (newtest.oracle.com) 14> start mgr Manager started.

GGSCI (newtest.oracle.com) 17> kill replicat rep_test Sending KILL request to MANAGER ... Killed process (84166) for REPLICAT REP_test

小技巧:

在資料複製的過程中,如果想檢視源端目標端的同步情況,使用info得到的資訊是很籠統的,我們可以使用send的方式得到一個狀態資訊,這個資料是相對準確的。

GGSCI (newtest.oracle.com) 2> send rep_test, status Sending STATUS request to REPLICAT REP_test ... Current status: At EOF Sequence #: 48 RBA: 99999876 6158834 records in current transaction PENDING STOP request pending end-of-transaction (6158834 records so far)