OGG_windows搭建實驗

lusklusklusk發表於2016-08-29

windows解除安裝Oracle GoldenGate產品的方法

1、進入源或目標GG配置目錄,輸入以下命令:

    gg> stop *

    gg> stop mgr

2、刪除Oracle GoldenGate目錄

3、執行windows命令,執行sc delete [服務名]

此伺服器名就是./GLOBALS中的MGRSERVNAME

ggsci>install addservice其實就是呼叫OGG目錄中的mgr.exe

 

 

 

標準搭建步驟

實驗環境介紹

源和目標在同一臺伺服器上,因為伺服器安裝了DB客戶端和DB server,所以ggsci預設找DB客戶端的tns,為了不引起問題,在DB客戶端和DB servertns中都加入了luxusluxus2

源:win7+ORACLE_11GR1_win32db_nameluxus+OGG_11GR1_win32

目標:win7+ORACLE_11GR1_win32db_nameluxus2+OGG_11GR1_win32

 

 

1.  解壓OGG_11GR1_win32OGGd:\gg\luxusOGG目標d:\gg\luxus2

2.  源庫luxus保證

alter database archivelog;

select force_logging from v$database; yes

開啟方式:alter database force logging;

select supplemental_log_data_min from v$database; yes

開啟方式:alter database add supplemental log data;

alter system set recyclebin=off scope=spfile

3.  源庫luxus和目標庫luxus2都執行如下

create user ggs identified by ggs default tablespace users temporary tablespace temp;

grant dba to ggs; //建立goldengate管理使用者

conn ggs/ggs

create table demo(id number primary key,ename varchar2(10)); //建立測試表,生產環境不用這這樣建立這樣的測試表

4.  OGG源端cd d:\gg\luxus執行ggsci後,執行create subdirs

5.  OGG目標端cd d:\gg\luxus2執行ggsci後,執行create subdirs

6.  OGG源端ggsciedit params ./GLOBALS輸入MGRSERVNAME ggsource

7.  exit退出源ggsciinstall addservice

8.  ggsciedit params mgr輸入port 7809

9.       ggsciedit params eiextt輸入

EXTRACT EIEXTT

USERID ggs@luxus, PASSWORD ggs

EXTTRAIL ./dirdat/tt

TABLE ggs.*;

TABLE schemaname.*;

做好了DDL的配置的情況下,以上紅色兩行只是相對於對源庫和目標庫對一個初始化,以後源庫新增使用者,新使用者下新增的物件都會自動同步到目標庫。

10.ggsci執行add extract eiextt,tranlog,begin now

11.ggsci執行add exttrail ./dirdat/tt,extract eiextt, megabytes 5

12.ggsci執行edit params epmptt輸入

EXTRACT EPMPTT

PASSTHRU

RMTHOST localhost,MGRPORT 7909

RMTTRAIL ./dirdat/tt

TABLE ggs.*;

TABLE schemaname.*;

做好了DDL的配置的情況下,以上紅色兩行只是相對於對源庫和目標庫對一個初始化,以後源庫新增使用者,新使用者下新增的物件都會自動同步到目標庫。

13.ggsci執行add extract epmptt,exttrailsource ./dirdat/tt

14.ggsci執行add rmttrail ./dirdat/tt,extract epmptt,megabytes 5

15.目標ggsci執行edit params ./GLOBALS輸入

MGRSERVNAME ggtarget

CHECKPOINTTABLE ggs.ggschkpt

16.exit退出目標ggsciinstall addservice

17.目標ggsci執行edit params mgr輸入

port 7909

18.目標ggsci執行dblogin userid ggs@luxus2,password ggs

add checkpointtable ggs.ggschkpt

add replicat poratt,exttrail ./dirdat/tt,checkpointtable ggs.ggschkpt

19.目標ggsci執行edit param poratt輸入

replicat poratt

userid ggs@luxus2, password ggs

assumetargetdefs

reperror default, discard

discardfile ./dirrpt/poratt.dsc, purge

map ggs.*, target ggs.*;

map schemaname.*, target schemaname.*;

做好了DDL的配置的情況下,以上紅色兩行只是相對於對源庫和目標庫對一個初始化,以後源庫新增使用者,新使用者下新增的物件都會自動同步到目標庫。

20.源庫ggsci執行dblogin userid ggs@luxus,password ggs

add trandata ggs.*

add trandata schemaname.*

做好了DDL的配置的情況下,以上兩行只是相對於對源庫和目標庫對一個初始化,以後源庫新增使用者,新使用者下新增的物件都會自動同步到目標庫。

21.源端ggsci執行start mgrstart *

檢查是否正常啟動的命令為ggsci>status mgrggsci>status *

22.目的端ggsci執行start mgrstart *

檢查是否正常啟動的命令為ggsci>status mgrgsci>status *

 

上述配置只是配置了dml相關(只要commit後就會同步到目標庫,不管目標庫是否歸檔模式),如果源庫增加一張表,壓根不會同步到目標庫

 

 

DDL的標準配置新增如下

1.  源例項luxus下執行SQL> GRANT EXECUTE ON utl_file TO ggs;

2.  源和目標都關閉所有程式和服務

ggsci>stop mgr

ggsci>stop *

3.       ggsci下執行EDIT PARAMS ./GLOBALS新增如下

GGSCHEMA ggs

GGSCHEMA schemaname

4.  源例項luxusd:\gg\luxus\sqlplus / as sysdba執行如下

SQL> @marker_setup.sql

SQL> @ddl_setup.sql

SQL> @role_setup.sql

SQL> GRANT GGS_GGSUSER_ROLE to ggs;

SQL> @ddl_enable.sql

SQL> @marker_status.sql

SQL> exit

5.  目標例項luxus2d:\gg\luxus2\sqlplus / as sysdba執行如下

SQL> @marker_setup.sql

SQL> @ddl_setup.sql

6.  ggsci下執行edit params eiextt新增如下(必須加,否則就不會捕獲ddl的相關資訊,只會捕獲dml相關資訊)

DDL INCLUDE ALL

7.  源和目標ggsci啟動所有程式和服務

ggsci>start mgr

ggsci>start *

後面新增的表沒有主鍵也可以正常同步到目標庫,且新建使用者後新使用者的表會自動同步到目標庫,不再需要重新對引數檔案新增map schemaname.*, target schemaname.*;且新增使用者及使用者許可權都會自動同步到目標庫

 

 

源端的捕獲程式對資料的存放路徑,放在了源端



源端的傳輸程式對資料的存放路徑,放到了目標端


 

 

 

 

 

源端配置檔案資訊

mgr程式配置檔案./GLOBALS的配置

MGRSERVNAME ggsource

GGSCHEMA ggs

 

EXTRACT抽取程式名為Eiextt的配置

EXTRACT EIEXTT

USERID ggs@luxus, PASSWORD ggs

EXTTRAIL ./dirdat/tt

DDL INCLUDE ALL

TABLE ggs.demo;

TABLE ggs.*;

 

EXTRACT傳輸程式名為Epmptt的配置

EXTRACT EPMPTT

PASSTHRU

RMTHOST localhost,MGRPORT 7909

RMTTRAIL ./dirdat/tt

TABLE ggs.demo;

TABLE ggs.*;

 

 

 

目標端配置檔案資訊

mgr程式配置檔案./GLOBALS的配置

MGRSERVNAME ggtarget

CHECKPOINTTABLE ggs.ggschkpt

 

replicat複製程式名為poratt的配置

replicat poratt

userid ggs@luxus2, password ggs

assumetargetdefs

reperror default, discard

discardfile ./dirrpt/poratt.dsc, purge

map ggs.demo, target ggs.demo;

map ggs.*, target ggs.*;

 

 

實驗中遇到的故障及解決方法

1.  源端的傳輸程式中也加入了DDL INCLUDE ALL一段配置後,報錯如下

解決方法:傳輸程式去掉DDL INCLUDE ALL這段配置後正常

2015-06-01 16:58:59  ERROR   OGG-00528  Oracle GoldenGate Capture for Oracle, EPMPTT.prm:  The DDL parameter is not supported for this data source. Please remove this parameter and all DDL operations will be propagated in pass-through (PASSTHRU) mode.

 

2.  在源中執行了ddlsql語句後,源schema產生了一些表,但是目標schema沒有表,導致replicat程式無法啟動,報錯如下

解決方法:把源中的資料expdpimpdp到目標庫才能正常啟動目標中的replicat程式,程式

2015-06-03 15:10:54  ERROR   OGG-00199  Oracle GoldenGate Delivery for Oracle, FUZHI.prm:  Table GGS.GGS_SETUP does not exist in target database.

2015-06-03 15:10:54  ERROR   OGG-01668  Oracle GoldenGate Delivery for Oracle, FUZHI.prm:  PROCESS ABENDING.

 

 

一些實驗過程中遇到的問題的問答

1.  A1A2兩表,源端和目標端的配置檔案中只配置了schema.A1A2更新後目標的A2會更新嗎(增刪改)

A2表不會更新,連新增都不會同步到目標的A2

 

2.  A1A2兩表,源端和目標端的配置檔案中配置了schema.*A2更新後目標的A2會更新嗎(增刪改)

增刪正常,改不行,如果想讓改也正常,必須在源庫中增加如下兩句,此下語句執行之前的的改不會同步到目標庫,執行之後產生的修改才會同步到目標庫

dblogin userid ggs@luxus,password ggs

add trandata schema.*

 

3.  A1A2兩表,源端和目標端的配置檔案中先配置schema.*,抽取程式配置檔案有有DDL INCLUDE ALL引數,複製程式配置檔案沒有DDL INCLUDE ALL引數,建立A3,並更新A3(增刪改),看目標A3更新嗎

正常更新

說明新增的表,不需要在源端重新執行一遍add trandata ggs.*即可正常改

 

4.  A1A2兩表,源端和目標端的配置檔案中先配置schema.A1,抽取程式配置檔案有DDL INCLUDE ALL引數,複製程式配置檔案沒有DDL INCLUDE ALL引數,建立A4,看目標建立A4嗎,並更新A4(增刪改),看目標A4更新嗎

A4表成功

但是A4表新增都不成功,更不要說什麼刪改了

 

5.  ddl配置好了的情況下,源的抽取程式去掉DDL INCLUDE ALL引數,源新增一個張A,會同步到目標庫嗎

不會同步過去

 

6.  DDL INCLUDE ALL的配置放在配置檔案什麼位置沒有什麼影響,可以放最上面也可以放最下面,也可以放中間,並不需要考慮在什麼適當位置增加下列內容:DDL INCLUDE ALL

 

7.  中的所有服務並退出ggsci,否則會報錯有session連線伺服器,yes or no進行選擇繼續還取消

 

8.  SQL>alter database add supplemental log data;將資料庫附加日誌開啟後還需要對每張表執行add trandata 嗎?

需要!

 

如果不執行add trandatainsert同步沒有問題(ORACLE資料庫),但是在同步updatedelete操作時,就會因為丟失主鍵報同步錯誤。不開啟表級的最小附加日誌,updateredo資訊不記錄沒有進行更新的欄位資訊,如主鍵不更新的話主鍵不記錄在redo中,所以會導致同步失敗。表級補全日誌需要在最小補全日誌開啟的情況下才起作用,只開啟最小補全日誌(alter database add supplemental log data;),redolog記錄的資訊還不夠全面,必須再使用add trandata開啟表級的補全日誌以獲得必要的資訊。

 

9.  源端和目標表可以*.*如此模糊配置所有schema.objects

不行

否則抽取程式、傳輸程式、複製程式都啟動不了,會報錯OGG-00259 Schema name cannot be wildcarded

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

相關文章