OGG實現兩臺oracle資料庫的同步
內容如下:
1.配置資料庫資訊。
2.安裝golden gate.
3.配置golden gate.
4.測試同步情況
首先我們看看實驗環境
環境
源端是一個單例項
Oracle Enterprise 5 + ORACLE 10.2.0.4
IP :10.4.128.100
目標端是一個單例項
Oracle Enterprise 5 + ORACLE 10.2.0.4
IP :10.4.128.101
兩臺主機均已建立資料庫,sid分別為devdb 和 emrep
配置devdb 到 emrep的資料同步
1.配置資料庫資訊
在源端資料庫中開啟歸檔模式
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/archive1
Oldest online log sequence 180
Next log sequence to archive 181
Current log sequence 181
若處於非歸檔模式,則改為歸檔模式:
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.
在源端資料庫中開啟force logging
SQL> select force_logging from v$database;
FOR
---
NO
SQL> alter database force logging;
Database altered.
SQL> select force_logging from v$database;
FOR
---
YES
在源端資料庫中開啟supplemental log
SQL> select supplemental_log_data_min from v$database;
SUPPLEME
--------
NO
SQL> alter database add supplemental log data;
Database altered.
切換日誌,使更改生效
SQL> alter system switch logfile;
System altered.
SQL> select supplemental_log_data_min from v$database;
SUPPLEME
--------
YES
在源端資料庫中關閉回收站
官方的說明是,由於一個已知的問題,回收站會對DDL觸發器產生影響,因此需要關閉。由此可見,我們只需要在源庫中關閉回收站即可。
SQL> show parameter recyclebin
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
recyclebin string on
SQL> alter system set recyclebin=off;
System altered.
SQL> show parameter recyclebin
NAME TYPE VALUE
------------------------------------ -------------------------------
recyclebin string OFF
建立goldengate資料庫使用者(源和目標)
注意:源和目標端都需要
[oracle@rac1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Jan 9 11:56:28 2015
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 32bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> create tablespace goldengate;
Tablespace created.
SQL> create user goldengate identified by goldengate default tablespace goldengate;
User created.
SQL> grant connect,resource to goldengate;
Grant succeeded.
SQL> grant execute on utl_file to goldengate;
Grant succeeded.
SQL>
抽取程式使用的資料庫使用者需要額外的許可權,我們將這些許可權也授予資料庫使用者goldengate(在源端資料庫中執行)
SQL> exec dbms_streams_auth.grant_admin_privilege('GOLDENGATE');
PL/SQL procedure successfully completed.
SQL> grant insert on system.logmnr_restart_ckpt$ to goldengate;
Grant succeeded.
SQL> grant update on sys.streams$_capture_process to goldengate;
Grant succeeded.
SQL> grant become user to goldengate;
Grant succeeded.
SQL>
為了確保GoldenGate正常執行,特別是在目標端,賦予goldengate使用者DBA許可權:
SQL> grant dba to goldengate;
2.GoldenGate安裝環境
解壓goldengate安裝檔案到安裝目錄
安裝GoldenGate軟體很簡單,解壓即可
以goldengate使用者登入
[goldengate@rac1 goldengateMedia]$ mkdir /opt/gg/goldengate、
[goldengate@rac1 goldengateMedia]$ cp ggs_Linux_ora10g_.tar /opt/gg/goldengate
[goldengate@rac1 goldengateMedia]$ cd /opt/gg/goldengate
[goldengate@rac1 goldengate]$ tar -xvf ggs_Linux_ora10g.tar
配置環境變數
源端和目標端:
修改goldengate使用者的環境變數配置檔案(ORACLE_SID按實際情況修改)
cat>>/home/goldengate/.bashrc<
export ORACLE_HOME
ORACLE_SID=devdb
export ORACLE_SID
GG_HOME=/opt/gg/goldengate
export GG_HOME
PATH=\$ORACLE_HOME/bin:$GG_HOME:\$PATH
export PATH
LD_LIBRARY_PATH=\$ORACLE_HOME/lib:\$GG_HOME:\$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
EOF
應用剛剛修改的環境變數,然後進入GoldenGate安裝目錄,執行ldd ggsci,確定需要的庫檔案都能夠找到。如果出現共享庫檔案無法找到,例如libnnz10.so => not found,檢查LD_LIBRARY_PATH環境變數的設定
[goldengate@ggdb goldengate]$ source ~/.bashrc
[goldengate@ggdb goldengate]$ cd $GG_HOME
[goldengate@ggdb goldengate]$ ldd ggsci
我們可以認為ogg的安裝其實就是一個解壓。非常簡單。
3.配置goldengate
建立goldengate工作目錄
源端和目標端:
[goldengate@rac1 goldengate]$ cd $GG_HOME
[goldengate@rac1 goldengate]$ ./ggsci
GGSCI (rac1) 1> create subdirs
Creating subdirectories under current directory /opt/gg/goldengate
Parameter files /opt/gg/goldengate/dirprm: created
Report files /opt/gg/goldengate/dirrpt: created
Checkpoint files /opt/gg/goldengate/dirchk: created
……
GGSCI (gg1) 2> exit
建立trail檔案存放目錄
源和目標端:
[goldengate@rac1 ~]$ mkdir /opt/gg/trails
[goldengate@rac1 ~]$ ls -l /opt/gg | grep trails
配置MANAGER
源端和目標端:
DYNAMICPORTLIST中配置了GoldenGate(extract和replicat)程式使用的埠範圍
PORT引數指定MANAGER使用的埠
AUTORESTART引數使抽取/複製程式失敗後自動重啟
配置MANAGER的引數,PURGEOLDEXTRACTS引數指定:當根據checkpoint發現已經完成抽取和複製的trail檔案將被自動刪除,但保留最近10個。
PURGEDDLHISTORY和PURGEMARKERHISTORY分別刪除DDL歷史表和marker表中的過期資料,以控制它們不會變得過於龐大。
GGSCI (gg1) 1> edit params mgr
PORT 5898
PURGEOLDEXTRACTS /opt/gg/trails/w1*, USECHECKPOINTS, MINKEEPFILES 10
AUTORESTART ER *, RETRIES 3, WAITMINUTES 5
PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 5, FREQUENCYMINUTES 30
PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 5, FREQUENCYMINUTES 30
全域性引數設定
源端:
GGSCI (rac1) 2> edit params ./globals
GGSCHEMA goldengate
目標端:
建立一個checkpoint表
replicat透過這個表來維護trail檔案中的read position。這不是個必須的操作,如果沒有這個表,則透過一個磁碟檔案來維護
GGSCI (ggdb) 2> dblogin userid goldengate,password goldengate
Successfully logged into database.
GGSCI (ggdb) 3> add checkpointtable goldengate.chkpoint
Successfully created checkpoint table GOLDENGATE.CHKPOINT.
GGSCI (ggdb) 4> edit params ./globals
GGSCHEMA goldengate
CHECKPOINTTABLE goldengate.chkpoint
配置源端extract
為了避免primary extract受到網路的影響,我們在源端和目標端之間增加一個data pump,這樣的話,primary extract負責將資料從源資料中抽取出來,存在本地的trail檔案中,然後data pump程式負責將本地trail檔案中的資料傳輸到目標端的trail檔案裡。這樣能提高更高的靈活性和可用性(當源和目標端之間的網路出現故障時,primary extract會繼續抽取資料存到本地的trail中).
我們這裡要同步goldengate使用者下的所有表.
GGSCI (rac1) 4> add extract w1ext,tranlog,begin now
EXTRACT added.
GGSCI (rac1) 5> info all
Program Status Group Lag Time Since Chkpt
MANAGER STOPPED
EXTRACT STOPPED DYEXT 00:00:00 00:00:07
編輯w1ext的引數檔案:
1. EXTTRAIL引數指定該抽取程式對應的exttrail
2. DISCARDFILE引數指定一個檔案,用來記錄不能正常處理的記錄,這裡使用追加方式,最大為5MB
3. TRANLOGOPTIONS ALTARCHIVELOGDEST指定源資料庫歸檔所在的路徑。如果不確定,使用該SQL*Plus命令:show parameter log_archive_dest_1
4. TRANLOGOPTIONS ALTARCHIVEDLOGFORMAT指定了歸檔檔案的命名格式,可以透過SQL*Plus命令show parameter log_archive_format 來確定該格式
5. 由於源資料使用了ASM,這裡透過tranlogoptions asmuser來提供登入ASM例項的使用者名稱和密碼(使用者名稱必須是SYS)
6. DDL INCLUDE MAPPED表示只捕獲MAPPED範圍內的DDL操作
7. DDLOPTIONS ADDTRANDATA :當建立新的表時,自動為其啟用追加日誌
8. FETCHOPTIONS:MISSINGROW REPORT表示當extract需要獲取的行在源庫中無法定位時,extract程式繼續執行,相關的錯誤資訊會儲存在discardfile引數指定的檔案中;USESNAPSHOT表示extract使用flashback查詢來從undo從獲取一些資料,比如無法從redo中直接獲取的UDT、巢狀表、XMLtype以及9i中的LOB;NOUSELATESTVERSION使得extract當無法從undo中獲取資料時,忽略該條件而不是從源表中獲取當前值。
9. STATOPTIONS REPORTFETCH:使用ggsci命令stats時,顯示獲取的行的統計資訊
10. WARNLONGTRANS 1H, CHECKINTERVAL 5M:當發現超過1個小時的長事務時,會在錯誤日誌中產生一條warning,5分鐘檢測一次
GGSCI (rac1) 6> edit params w1ext
EXTRACT w1ext
USERID goldengate, PASSWORD goldengate
EXTTRAIL /opt/gg/trails/w1
DISCARDFILE w1extdsc,APPEND,MEGABYTES 5
DDL INCLUDE MAPPED
DDLOPTIONS ADDTRANDATA
FETCHOPTIONS, USESNAPSHOT, NOUSELATESTVERSION, MISSINGROW REPORT
STATOPTIONS REPORTFETCH
WARNLONGTRANS 1H, CHECKINTERVAL 5M
TABLE goldengate.*;
新增該extract對應的trail檔案,用來儲存抽取的資料。單個檔案大小設定為100MB
GGSCI (rac1) 7> add exttrail /opt/gg/trails/w1,extract w1ext, MEGABYTES 100
EXTTRAIL added.
新增secondary extract group,即data pump:
GGSCI (rac1) 8> ADD EXTRACT w1extdp, EXTTRAILSOURCE /opt/gg/trails/w1, BEGIN now
EXTRACT added.
編輯引數檔案
RMTHOST後面跟目標端的ip或主機名(需在hosts檔案中有對應ip解析)和manager程式的埠號;RMTTRAIL指定目標端的trail檔案所在位置
GGSCI (rac1) 9> edit params w1extdp
EXTRACT w1extdp
USERID GOLDENGATE, PASSWORD GOLDENGATE
RMTHOST 10.4.128.101, MGRPORT 5898
RMTTRAIL /opt/gg/trails/w1
DISCARDFILE w1extdpdsc,APPEND,MEGABYTES 5
TABLE goldengate.*;
新增該rmttrail
GGSCI (rac1) 10> add rmttrail /opt/gg/trails/w1,extract w1extdp, megabytes 100
RMTTRAIL added.
配置目標端replicat
回到目標端,使用goldengate使用者登入到ggsci命令列中,對應前面的兩組extract和data pump增加兩個replicat
GGSCI (ggdb) 6> add replicat w1rep,exttrail /opt/gg/trails/w1,checkpointtable goldengate.chkpoint
REPLICAT added.
這裡的handlecollisions引數在目標端資料初始化並同步之後去掉
編輯引數檔案:
1. assumetargetdefs:由於在這裡我們源端和目標端的表結構是完全一致的,因此使用這個引數來使replicat不用去檢視相關的定義檔案,從而提高效率
2. DDLOPTIONS REPORT:將ddl的具體資訊寫入到報告檔案中
3. BATCHSQL:將相似的SQL語句放到一個陣列中以加快執行速度。在normal模式下,repliat同一時間只應用一條sql語句。
4. DBOPTIONS DEFERREFCONST:將完整性約束推遲到replicat事務提交以後再檢測
5. 如果資料庫版本在10.2.0.5或11.2.0.2以後,可以使用DBOPTIONS SUPPRESSTRIGGERS在replicat會話中禁用觸發器。如果不是,應該在目標端資料庫中禁用觸發器(觸發器產生的DML操作會從源端同步到目標端)
6. DBOPTIONS LOBWRITESIZE :將要寫入目標庫的LOB資料快取在記憶體中,當達到引數中指定的大小時寫入資料,以減少I/O。這個值的範圍是2KB到1MB,預設為32KB
7. DDLERROR DEFAULT DISCARD RETRYOP MAXRETRIES 5 RETRYDELAY 20:當出現DDL錯誤,重試5次,時間間隔為20秒。如果失敗,replicat會繼續執行,但相關資訊會記錄在discardfile中。
8. HANDLECOLLISIONS:當replicat往表中插入一條記錄,而該記錄已經存在,則進行覆蓋;當replicat在表中試圖更新或刪除一條記錄,而該記錄不存在,則該操作被丟棄。這個引數一般在initial-data load中使用,在源和目標端的資料同步之後應該將該引數刪除
9. MAP TARGET:源表和目標表之間的對映,可以使用萬用字元
GGSCI (ggdb) 7> edit params w1rep
REPLICAT w1rep
ASSUMETARGETDEFS
USERID GOLDENGATE, PASSWORD GOLDENGATE
DISCARDFILE w1repdsc,APPEND,MEGABYTES 5
DDL INCLUDE MAPPED
DDLOPTIONS REPORT
BATCHSQL
DBOPTIONS DEFERREFCONST
DBOPTIONS LOBWRITESIZE 102400
HANDLECOLLISIONS
DDLERROR DEFAULT DISCARD RETRYOP MAXRETRIES 5 RETRYDELAY 20
MAP goldengate.* , TARGET goldengate.* ;
ADD TRANDATA
在啟動goldengate相關程式之前,使用trandata對源資料庫中需要同步的表啟用物件級別的追加日誌
--在源端
GGSCI (rac1) 17> dblogin userid goldengate,password goldengate
Successfully logged into database.
--GGSCI (xxx) 2> list tables goldengate.*
GGSCI (rac1) 18> add trandata goldengate.*
如果表中沒有主鍵和唯一鍵,會產生一條警告,例如:
2011-12-08 22:53:11 WARNING OGG-00869 No unique key is defined for table UDPPACKPORTSET. All viable columns will be used to represent the key, but may not guarantee uniqueness. KEYCOLS may be used to define the key.
在源端和目標端開啟MANAGER
在源端和目標端執行ggsci命令start mgr,啟動manager程式
GGSCI (rac1) 34> start mgr
在源端,開啟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
在目標端,啟動複製程式
GGSCI (ggdb) 51> start rep w1rep
Sending START request to MANAGER ...
REPLICAT DYREP starting
4.測試同步情況
源端,目標端都建立一個表
源端
SQL> create table test(id int);
Table created.
SQL> insert into test values(1);
1 row created.
SQL> commit;
Commit complete.
SQL> insert into test values(2);
1 row created.
SQL> commit;
Commit complete.
目標端
SQL> create table test(id int);
Table created.
SQL> select * from test;
ID
----------
1
2
ok ,結束了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12798004/viewspace-1395845/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 兩臺ORACLE之間配置OGG-未配置同步DDLOracle
- 同步寫兩個資料庫資料庫
- 使用GoldenGate 實現Oracle for Oracle 單向資料同步(實現表的DML操作同步)GoOracle
- ogg在異構資料庫實時雙向同步中如何防止資料死迴圈同步資料庫
- dg和ogg的區別--oracle資料庫Oracle資料庫
- lvs 負載均衡兩臺Discuz+rsync+innotify實現資料同步負載
- Oracle DML/DDL同步資料(OGG_12.2_for_Windows)OracleWindows
- Oracle+Ogg 歸檔丟失 重新導資料建立ogg同步步驟Oracle
- 不同Oracle資料庫之間的資料同步Oracle資料庫
- 解決兩相同資料庫資料同步的問題 (轉)資料庫
- 兩臺SQL Server資料同步解決方案SQLServer
- 使用Trigger實現兩個Table同步更新資料
- ogg 同步pg資料到oracle--步驟Oracle
- 基於OGG Datahub外掛將Oracle資料同步上雲Oracle
- DataX將MySql資料庫資料同步到Oracle資料庫MySql資料庫Oracle
- 資料庫系列——基於Canal實現MySQL增量資料同步資料庫MySql
- 利用python實現mysql資料庫向sqlserver的同步PythonMySql資料庫Server
- 利用DB Link實現資料庫間的表同步資料庫
- 在兩個資料庫之間進行資料同步資料庫
- oracle佇列(AQ)---實現orale到mysql的資料同步Oracle佇列MySql
- 用DBMS_LDAP實現LDAP與ORACLE的資料同步LDAOracle
- 兩臺SQL Server資料同步解決方案(轉)SQLServer
- oracle資料庫兩表資料比較Oracle資料庫
- DataX將Oracle資料庫資料同步到達夢資料庫Oracle資料庫
- oracle資料庫配置goldengate同步Oracle資料庫Go
- Oracle資料庫同步技術1Oracle資料庫
- Oracle資料庫同步技術2Oracle資料庫
- Oracle資料庫同步技術3Oracle資料庫
- Oracle資料庫同步技術4Oracle資料庫
- Oracle資料庫同步技術5Oracle資料庫
- 兩臺HP RX6600共享儲存實現HA,同步兩臺機器vg map的命令
- 用Asp實現對ORACLE資料庫的操作Oracle資料庫
- 在Oracle中實現資料庫的複製Oracle資料庫
- GoldenGate實現oracle和sqlserver雙向資料同步GoOracleSQLServer
- 同步寫兩個資料庫--多執行緒資料庫執行緒
- Mysql資料庫單向同步(一主兩從)MySql資料庫
- sqlldr 載入資料 OGG 是否會同步SQL
- [zt SQL Server2005複製功能實現與Oracle資料庫同步SQLServerOracle資料庫