ApressExpertOracleGoldenGate - BasicReplication (2)

snowdba發表於2014-11-10
接上篇ApressExpertOracleGoldenGate - BasicReplication (1)
http://blog.itpub.net/29047826/viewspace-1323516/


確認管理程式狀態


管理程式用來管理所有其他程式和資源。在啟動抽取程式和複製程式之前,我們需要確保源端和目標端的管理程式處於執行狀態。它是所有程式中第一個啟動的。如果管理程式沒有執行是無法啟動複製程式的。在最基本的管理程式引數檔案中需要包含埠號(port number)

GGSCI (server) 1> edit params MGR
-------------------------------------------------------------------
-- GoldenGate Manager
-------------------------------------------------------------------
port 7840

透過INFO MGR命令可以確認管理程式是否在執行
GGSCI (sourceserver) 1> info manager

Manager is running (IP port sourceserver.7840).

如果GoldenGate管理程式沒有執行,可以使用下面的命令:

GGSCI (sourceserver) 1> start manager


接下來開始配置GoldenGate Local Extract

配置Local Extract

現在已經確定管理程式處於執行狀態,讓我們配置Local Extract。為此我們需要配置一個引數檔案用來捕獲HR Sechma下的所有DML變化。

然我們從這個事例的Local Extract引數開始

GGSCI (sourceserver) 1> edit params LHREMD1
Extract LHREMD1

-------------------------------------------------------------------
-- Local extract for HR schema
-------------------------------------------------------------------

SETENV (NLS_LANG = AMERICAN_AMERICA.AL32UTF8)
USERID GGER@SourceDB, PASSWORD userpw
ExtTrail dirdat/l1
Table HR.*;


EXTRACT

我們可以使用Extract引數來定義抽取組。給抽取組起一個便於理解的名字,當出現問題需要迅速停止程式,重新啟動程式的操作顯得格外重要。
  • 程式型別,抽取程式、投遞程式或者複製程式
  • 正如human resources、payroll、rales或者billing應用程式使用這個程式。
  • 程式所在的環境是可能是開發環境也可能是生產環境。
  • 如果抽取程式組被命名為LHREMD1,讓我們看看命名的依據。L表示Local Extract。HREM表示HR shcema下的應用程式employee表。D表示執行在開發環境,1表示該應用程式下的第一個抽取程式組。我們可以增加並行提取組來提升效能。

SETENV

我們可以使用SETENV引數來覆蓋預設的環境設定引數。在這個演示用例中明確的指定了NLS_LANG為AMERICAN_AMERICA.AL32UTF8。 如果NLS_LANG不正確,會導致複製失敗。對於Local Extract,NLS_LANG引數需要和源端資料庫字符集相匹配。可以透過下面的SQL語句來確認資料庫字符集。

SQL> select * from v$nls_parameters where parameter like '%NLS_CHARACTERSET%';

PARAMETER          VALUE
----------------- ----------
NLS_CHARACTERSET  US7ASCII


使用SETENV引數還可以向NLS_LANG新增環境變數。例如,Oracle資料庫的ORACLE_HOME,ORACLE_SID。 在這個例子中我們用源端資料庫的網路TNS別名來替代環境變數。

SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.1.0")
SETENV (ORACLE_SID = "SourceDB")

USERID

之前我們為Goldengate建立了訪問資料庫的使用者,並賦予了正確的許可權。使用USERID引數我們可以指定Goldengate連線源端資料庫所需的使用者名稱和密碼。其中密碼可以採取加密的方式。

注意:Extract引數需要寫在配置檔案的開始位置。

接下來讓我們看看EXTTRAIL引數

我們可以使用EXTTRAIL引數來,指定兩個字母來命名local Extract檔案,儲存已經提交的事物。在這個例子中,trial檔案保留Local Extract從HR事物中抽取的變化。然後再由投遞程式透過網路傳送到目標端伺服器。

trail檔案通常被寫在GoldengGate軟體安裝目錄下的dirdat目錄。在這個例子中,我們給trail檔案命名為l1。GoldenGate自動在字母后面補充6為數字作為序列的完整檔名。比如在dirdat目錄下的第一個trail檔案的名字為l1000000,當這個檔案被寫滿,Goldengate會建立下一個trail檔名為l1000001,然後是l1000002以此類推。

TABLE

使用TABLE引數來指定源端需要獲取變換的表。該引數是一個符合引數,含有許多的選項來提供我們過濾資料行,匹配資料列,轉換資料等等。現在我們保持簡單的配置,讓Goldengate抽取HR schema下所有表的資料變化。可以採用萬用字元*號來完成這個設定。這樣比列出每一個HR下要複製的表名方便的多。這個設定的前提是源端和目標端HR schema下所有結構都相同。

注意TABLE引數結束後需要一個寫一個 ;號

新增Extract

現在我們已經配置了Extract引數,下一步新增抽取程式組(Extract)。可以透過GGSCI輸入下面的命令

GGSCI (sourceserver) > ADD EXTRACT LHREMD1, TRANLOG, BEGIN NOW
GGSCI (sourceserver) > ADD EXTTRAIL dirdat/l1, EXTRACT LHREMD1, MEGABYTES 100

第一個命令ADD EXTRACT,使用引數檔案中配置的名稱LHREMD1來建立。Extract新增後會在源端trail檔案中建立checkpoint和資料庫事務的執行進度。ADD EXTRACT後面的TRANLOG引數命令告訴OGG使用源端資料庫的事務日誌。在Oracle資料庫中redo logs就是源。BEGIN NOW的意思是Extract一開始啟動,抽取程式就立刻從源端抽取變化。我們也可以任意指定一個時間戳,或是一個佇列檔案號(trail-file number)來啟動抽取程式。

ADD EXTTRAIL命令將本地佇列檔案(local extract trail file)分配給提取程式HREMD1,並規定其大小為100MB。佇列檔案的預設大小為10MB。考略到效能方面受到的影響,我們應該給佇列檔案設定一個滿足事務量的尺寸來避免OGG頻繁建立它。

一點提示:我們可以將ADD EXTRACT這樣的命令寫入diroby目錄下的obey file。然後在GGSCI命令列提示符後面執行obey檔案。在以後需要重新執行或是要修改命令的時候可以有所參考。

現在來看看如何啟動和停止抽取程式(Extract)

啟動和停止抽取程式

在新增了抽取程式後,我們需要啟動它開始捕獲資料變化,如下例所示:
GGSCI (sourceserver) > START EXTRACT LHREMD1


停止程式使用下面的命令。當你需要修改配置引數時,需要停止程式,修改引數,重新啟動程式。這時候就會用到這個命令。
GGSCI (sourceserver) > STOP EXTRACT LHREMD1

確認抽取程式

當抽取程式啟動後,可以透過INFO EXTRACT命令來確認狀態其狀態為running。如果是STOPPRD或者ABENDED就由問題了。

GGSCI (sourceserver) 2> info extract LHREMD1

EXTRACT    LHREMD1  Last Started 2011-01-15 13:53  Status RUNNING
Checkpoint Lag      00:00:00 (updated 00:00:08 ago)
Log Read Checkpoint  Oracle Redo Logs

                    2011-01-17 22:55:08  Seqno 3261, RBA 7135232

如果抽取程式沒有執行,我們需要從OGG錯誤日誌中查詢問題。錯誤日誌名為ggserr.log存放在OGG軟體的預設安裝目錄下。Linux下通常為$OGG_HOME/ggserr.log

如果抽取程式不能啟動,先看看是否有明顯的錯誤,比如OGG訪問資料的user ID和密碼是否正確,或者寫錯了引數檔案。同時確認一下源端資料庫是否處於執行狀態。

從INFO命令可以看到源端抽取程式處於RUNNING狀態。Checkpoint log是寫入佇列檔案中的最後一個檢查點和這個記錄被OGG執行的時間延遲。目前狀況下還沒有任何延遲。如果出現了數值很大的checkpoint lag,就意味著系能出現問題了或者是抽取程式在獲取一個大容量的資料變化。這時候可以檢視源端Oracle的redo日誌最後的檢查點讀取時間(read checkpoint time),事務日誌的序列號Seqno,和該事務日誌的RBA。

在INFO命令後面加上DETAIL選項可以看到更多有關抽取程式的資訊。透過這個命令能找到一些有用的報表,這些報表提供了更多的有用資訊

GGSCI (sourceserver) 3> info ext LHREMD1, detail

EXTRACT    LHREMD1  Last Started 2011-01-15 13:53  Status RUNNING
Checkpoint Lag      00:00:00 (updated 00:00:01 ago)
Log Read Checkpoint  Oracle Redo Logs

                    2011-01-17 22:57:50  Seqno 3262, RBA 138240
  Target Extract Trails:

Remote Trail Name
dirdat/l1
Extract Source

/data/SourceDB/database/redo01_01.rdo
/data/SourceDB/database/redo01_01.rdo
/data/SourceDB/database/redo01_01.rdo
/data/SourceDB/database/redo02_01.rdo
Not Available

Seqno 3

RBA    Max MB
1489      100
End

Begin

  2011-01-15 13:53  2011-01-17 22:57
  2011-01-13 22:29  2011-01-15 13:53
  2011-01-05 02:13  2011-01-13 22:29
  2010-12-16 15:28  2011-01-05 02:13

* Initialized *  2010-12-16 15:28

Current directory

Report file
Parameter file
Checkpoint file
Process file
Stdout file
Error log

/gger/ggs

/gger/ggs/dirrpt/LHREMD1.rpt
/gger/ggs/dirprm/LHREMD1.prm
/gger/ggs/dirchk/LHREMD1.cpe
/gger/ggs/dirpcs/LHREMD1.pce
/gger/ggs/dirout/LHREMD1.out
/gger/ggs/ggserr.log


最後使用stats命令來顯示抽取程式已經捕獲了多少個DML變化。在本例中,才程式開始到現在已經處理了4個插入語句,2個刪除語句。

GGSCI (sourceserver) 2> stats ext LHREMD1
Sending STATS request to EXTRACT LHREMD1 ...
Start of Statistics at 2011-01-18 18:50:38.
Output to /gger/ggs/dirdat/l1:

Extracting from HR.EMPLOYEES to HR.EMPLOYEES:

*** Total statistics since 2011-01-15 13:54:52 ***
        Total inserts                                4.00
        Total updates                                0.00
        Total deletes                                2.00
        Total discards                              0.00
        Total operations                            6.00


抽取程式我們就說到這,下面開始投遞程式。

開啟投遞程式

現在抽取程式已經啟動,我們可以繼續配置,新增並開啟投遞程式。首先注意一個概念,投遞程式也是抽取程式的一種,它從源端的佇列檔案讀取資料後透過網路傳送到目標端並建立遠端佇列(remote trail)。

在這個例子中,我們配置的投遞程式讀取已經被LHREMD1抽取到L1佇列中的資料,再透過網路投遞到目標端,由複製程式Replicat接收後執行

投遞程式的配置

在GGSCI使用下面的命令來編輯引數檔案


GGSCI (sourceserver) 1> edit params PHREMD1
Extract PHREMD1

-------------------------------------------------------------------
-- Data Pump extract for HR schema
-------------------------------------------------------------------

PassThru

RmtHost targetserver, MgrPort 7840
RmtTrail dirdat/l2

Table HR.* ;

現在讓我們來看看每個引數的具體含義。同抽取程式一樣,投遞程式的配置引數也有很多個。我們這裡只介紹本例相關的引數。

EXTRACT

從第一個關鍵字Extract就可以看出投遞程式其實也是抽取程式的一種。後面的引數為該程式的名字PHREMD1。和抽取程式一樣,該名字不要超過8個字元。在本例中抽取程式PHREMD1的命名含義為:P表示data pump,也就是投遞程式。其它部分和抽取程式的引數含義相同。


小提示:投遞程式不需要指定SETENV。只有抽取程式和複製程式的引數中才需要新增此引數。

接下來看看PASSTHRU引數

PASSTHRU

如果源端和目標端的資料結構一致,不需要做過濾、欄位對映這些操作的話可以為投遞程式配置PASSTHRU引數。OGG認為表一致的概念是列明相同,資料型別相同,語義相同和出現的額順序也相同。使用PASSTHRU可以使OGG不再從資料庫中查詢表定義資訊,繞過此步驟的好處是可以提升效能。

RMTHOST

PASSTHRU和MGRPORT是目標端伺服器的地址和管理程式正在使用的埠號。它告訴投遞程式將源端佇列傳送目的地。我們需要源端到目標端管理程式的埠是暢通的。有時候,可能會需要在引數檔案中制定多個目標端,將佇列檔案傳送到不同的伺服器。

RMTTRAIL

我們可以使用MGRPORT為投遞程式命名遠端佇列檔名,和源端佇列檔案一樣也是由2個字母開頭。在這個例子中,使用l2來表示遠端的佇列。源端的使用l1.投遞程式從L1源端佇列讀取資料後投遞到目標端的l2佇列檔案。遠端佇列檔案的名字也是有6個字母來不全l2後面的名字,如l2
000000,然後是l2000001,l2000002以此類推。

TABLE


TABLE引數又一次出現,和抽取程式中的描述一樣。在本例中,使用萬用字元為制定投遞範圍是HR shcema下所有表。如果需要可以在這裡過濾、轉換要傳送的資料。

投遞程式的新增

現在我們已經設定了投遞程式引數,下一步來新增投遞程式。

GGSCI (sourceserver) > ADD EXTRACT PHREMD1, EXTTRAILSOURCE dirdat/l1
GGSCI (sourceserver) > ADD RMTTRAIL dirdat/l2, EXTRACT PHREMD1, MEGABYTES 100

第一條命令ADD EXTRACT,使用配置檔案中的命令來建立一個投遞程式。ADD EXTRACT後面的EXTTRAILSOURCE命令告訴OGG投遞程式需要讀取的本地佇列在哪裡。本例的佇列目錄為dirdat/l1。投遞時間可以選擇立刻,或者制定一個時間戳,或者一個佇列檔案號。

ADD RMTTRAIL命令為遠端佇列dirdat/l2指定相對應的投遞程式PHREMD1,檔案大小為100MB。預設大小是10MB。為了效能我們適當做出調整,避免國語頻繁的建立新的遠端佇列檔案


GGSCI為我們提供了幫助手冊,例如hlep ADD EXTRACT

投遞程式的啟動與停止

在新增了投遞程式後,我們需要啟動它,開始處理源端佇列檔案的記錄。

GGSCI (sourceserver) > START EXTRACT PHREMD1

如果需要修改投遞程式的引數,需要使用下面的命令將程式停止,修改後再重新啟動。

GGSCI (sourceserver) > STOP EXTRACT PHREMD1

當投遞程式已經啟動後,可以透過INFO EXTRACT命令來確認其執行。
GGSCI (sourceserver) 2> info extract PHREMD1

EXTRACT    PHREMD1  Last Started 2011-01-14 10:25  Status RUNNING
Checkpoint Lag      00:00:00 (updated 00:00:01 ago)
Log Read Checkpoint  File dirdat/l1000001

                    2011-01-17 15:05:33.485076  RBA 977

我們看到此時的狀態為RUNNING,如果出現的時STOPPED或者ABENDED就出問題了。和抽取程式一樣需要從錯誤日誌中去查詢原因。有時候錯誤很簡單,就是引數檔案中寫錯或者源端的佇列檔案丟失,歸檔日誌丟失等。另外確保目標端的管理程式埠和源端資料庫暢通。

在INFO命令後面加上DETAIL選項可以看到更多有關抽取程式的資訊。透過這個命令能找到一些有用的報表,這些報表提供了更多的有用資訊

GGSCI (sourceserver) 3> info ext PHREMD1, detail

EXTRACT    PHREMD1  Last Started 2011-01-23 16:28
Checkpoint Lag      00:00:00 (updated 00:00:00 ago)
Log Read Checkpoint  File dirdat/l1000009

                    First Record  RBA 3431
  Target Extract Trails:

  Remote Trail Name
  dirdat/l2
  Extract Source                          Begin

Status RUNNING

  dirdat/l1000009
  dirdat/l1000009
  dirdat/l1000007
  dirdat/l1000005
  dirdat/l1000004
  dirdat/l1000004
  dirdat/l1000000

Current directory

Report file
Parameter file
Checkpoint file
Process file
Stdout file
Error log

2011-01-20 14:04  First Record
2011-01-14 10:22  2011-01-20 14:04
2011-01-12 10:59  2011-01-14 10:22
2011-01-07 08:38  2011-01-12 10:59
2011-01-07 08:38  2011-01-07 08:38

/gger/ggs/ora10

/gger/ggs/dirrpt/PHREMD1.rpt
/gger/ggs/dirprm/PHREMD1.prm
/gger/ggs/dirchk/PHREMD1.cpe
/gger/ggs/dirpcs/PHREMD1.pce
/gger/ggs/dirout/PHREMD1.out
/gger/ggs/ggserr.log

* Initialized *
* Initialized *

2011-01-07 08:38
First Record

最後透過stats命令可以看到投遞程式處理了多少個DML操作。

GGSCI (sourceserver) 2> stats ext PHREMD1
Sending STATS request to EXTRACT PHREMD1 ...
Start of Statistics at 2011-01-18 18:50:38.
Output to /gger/ggs/dirdat/l2:

Extracting from HR.EMPLOYEES to HR.EMPLOYEES:

Seqno        RBA
    4      1151

End

Max MB 100

CHAPTER 4 ■ BASIC REPLICATION

69

CHAPTER 4 ■ BASIC REPLICATION

*** Total statistics since 2011-01-15 13:54:52 ***
        Total inserts                                4.00
        Total updates                                0.00
        Total deletes                                2.00
        Total discards                              0.00
        Total operations                            6.00

在抽取程式和投遞程式都開啟後,我們將進入下一個環節,複製程式Replicat。由於篇幅今天就寫到這裡。

未完待續...

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