1.環境介紹
源端:192.168.56.101 目標端:192.168.56.100
背景:數據從主庫cdb主機定位,同步到從庫
2.配置ogg
2.1 開啟歸檔、強制日志、補充日志
--ogg 主備都需要配置
SQL> alter database archivelog;
SQL> alter database force logging;
SQL> alter database add supplemental log data;
SQL> alter database add supplemental log data(primary key,unique,foreign key) columns;
SQL> alter system archive log current; SQL> select log_mode,force_logging,supplemental_log_data_min from v$database;
LOG_MODE FORCE_LOGGING SUPPLEME
------------ --------------------------------------- --------
ARCHIVELOG YES YES--ogg 啟用(所有節點)
SQL> alter system set enable_goldengate_replication = true;
2.2 創建角色
--192.168.56.101 (cdb)
grant dba to c##oggadmin container = all;
create tablespace ts_ogg datafile '/u01/app/oracle/oradata/ORCL/ts_global_ogg01.dbf' size 10g autoextend off;
create user c##oggadmin identified by "oggadmin" default tablespace ts_ogg;--192.168.56.100 (pdb)
create tablespace ts_ogg datafile '/u01/app/oracle/oradata/ORCL/pdb/ts_ogg01.dbf' 10g autoextend off;
create user oggadmin identified by "oggadmin" default tablespace ts_ogg;
grant dba to oggadmin;
2.3 源端ogg進程配置
[oracle@pg1 ogg]$ ./ggsci
GGSCI (pg1) 2> edit params mgr
ps:mgr主從都配
PORT 7809
autostart extract *
autorestart extract *,retries 3,waitminutes 3--保存后啟動mgr
GGSCI (pg1) 4> start mgr
MGR is already running.--manager進程參數配置說明:
port:指定服務監聽端口dynamicportlist:動態端口,可以制定最大256個可用端口的動態列表,當指定的端口不可用時,管理進程將會從列表中
選擇一個可用的端口,源端和目標段的collector、replicat、ggsci進程通信也會使用這些端口;比如:dynamicportlist
7501-7601 comment:注釋行,也可以用–來代替;autostart:指定在管理進程啟動時自動啟動哪些進程;比如:autostart extract * 啟動所有的抽取進程
autorestart:自動重啟參數設置:本處設置表示每3分鐘嘗試重新啟動所有extract進程,共嘗試3次;purgeoldextracts:定期清理trail文件設置:本處設置表示對于超過3天的trail文件進行刪除。purgeoldextracts./dirdat/*,usecheckpoints,minkeepdayslagreport、laginfo、lagcritical:
定義數據延遲的預警機制:設置表示mgr進程每隔1小時檢查extract的延遲情況,如果超過了30分鐘就把延遲作為信息
記錄到錯誤日志中,如果延遲超過了45分鐘,則把它作為警告寫到錯誤日志中。 lagreporthours 1 laginfominutes 30 lagcriticalminutes 45
2.4 用戶ogg登錄到數據庫
[oracle@pg1 admin]$ cat tnsnames.ora
19c = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.101)(PORT = 1521)))(CONNECT_DATA = (SERVICE_NAME = orcl)))pdb =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.101)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = pdb)))--192.168.56.101
GGSCI (pg1) 5> dblogin userid c##oggadmin,password oggadmin
Successfully logged into database CDB$ROOT.GGSCI (pg1 as c##oggadmin@orcl/CDB$ROOT) 6> edit params ./GLOBALS
GGSCHEMA C##OGGADMIN
保存退出-- 對抽取的表添加trandata
SQL> exec dbms_goldengate_auth.grant_admin_privilege('c##oggadmin');
SQL> exec dbms_goldengate_auth.grant_admin_privilege('c##oggadmin',container=>'all');
GGSCI (pg1 as c##oggadmin@orcl/CDB$ROOT) 7> add trandata pdb.scott.emp1
or
SQL> alter table schema.table_name add supplemental log data(all) columns;--pdb 級別對trandata進行添加操作
2.5 配置ogg進程
ps:抽取進程和傳輸進程其實都是extract進程,也可以配置在一個進程完成這兩個功能,但是當網絡傳輸有問題時,這樣抽取
也就不能繼續運行了,所以推薦分開配置為兩個進程.
-- 添加抽取進程ext1(自定義名稱)
GGSCI (pg1 as c##oggadmin@orcl/CDB$ROOT) 8> add extract ext1,integrated tranlog,begin now
GGSCI (pg1 as c##oggadmin@orcl/CDB$ROOT) 9> add exttrail /u01/app/oracle/ogg/dirdat/et,extract ext1 megabytes 200
ps:其中et(exttrail的縮寫)是不需要自己手動創建的并且要嚴格控制在兩個字符或者兩個字符以內,OGG會自動創建。--注冊抽取進程ext1到pdb
GGSCI (pg1 as c##oggadmin@orcl/CDB$ROOT) 10> register extract ext1 database container(pdb)--添加投遞進程pump1
GGSCI (pg1 as c##oggadmin@orcl/CDB$ROOT) 11> add extract pump1,exttrailsource /u01/ogg/dirdat/et -- 給投遞進程添加遠程trail文件
GGSCI (pg1 as c##oggadmin@orcl/CDB$ROOT) 12> add rmttrail /u01/ogg/dirdat/rt,extract pump1,megabytes 200 --配置抽取進程ext1
GGSCI (pg1 as c##oggadmin@orcl/CDB$ROOT) 13> edit params ext1
extract ext1
userid c##oggadmin,password oggadmin
exttrail /u01/ogg/dirdat/et --抽取進程的跟蹤文件
table pdb.scott.emp1;
table pdb.scott.dept1;
保存退出--配置投遞進程pump1
GGSCI (pg1 as c##oggadmin@orcl/CDB$ROOT) 13> edit params pump1
extract pump1
userid c##oggadmin,password oggadmin
rmthost 192.168.56.100,mgrport 7809
rmttrail /u01/ogg/dirdat/rt --rmttrail用來指定投遞到目標端的trail文件。
table pdb.scott.emp1; --table參數后面就是你要復制投遞的表,注意結束了一定要用 ';'結尾
table pdb.scott.dept1;
保存退出
3. 目標端ogg進程配置
3.1 配置mgr進程
-- mgr配置
GGSCI (test) 1> edit params mgr
PORT 7809
autostart extract *
autorestart extract *,retries 3,waitminutes 3
保存退出--啟動mgr
GGSCI (test) 2> start mgr--用ogg用戶oggadmin登錄pdb
GGSCI (test) 3> dblogin userid oggadmin@pdb,password oggadmin;
Successfully logged into database PDB.--編輯GLOBALS
GGSCI (test as oggadmin@orcl/PDB) 4> edit params ./GLOBALS
GGSCHEMA oggadmin
CHECKPOINTTABLE oggadmin.checkpointtable
保存退出--添加檢查點表(checkpointtable)
GGSCI (test as oggadmin@orcl/PDB) 5> add checkpointtable oggadmin.checkpointtable-- 添加數據復制進程rep1并配置
GGSCI (test as oggadmin@orcl/PDB) 6> add replicat rep1 exttrail /u01/ogg/dirdat/rt,checkpointtable oggadmin.checkpointtableGGSCI (test as oggadmin@orcl/PDB) 7> edit params rep1
replicat rep1
userid oggadmin@pdb,password oggadmin
ASSUMETARGETDEFS
DBOPTIONS ENABLE_INSTANTIATION_FILTERING
DISCARDFILE /u01/ogg/rep1_discard.txt,append,megabytes 10
DISCARDROLLOVER AT 02:00
DDLERROR DEFAULT IGNORE RETRYOP
map pdb.scott.emp1,target scott.emp1;
map pdb.scott.dept1,target scott.dept1;
保存退出
ASSUMETARGETDEFS
--使用ASSUMETARGETDEFS參數時,用MAP語句中指定的生產庫源表和災備端目標表具有相同的列結構。它指示的Oracle GoldenGate不在生產端查找源表的結構定義。
HANDLECOLLISIONS --不要用!存在操作不一致性(詳情https://blog.csdn.net/zhuxiaoliao/article/details/42234661)
DBOPTIONS ENABLE_INSTANTIATION_FILTERING --當DDL復制報錯時,則需要用到此處的ddlerror參數預處理一些常見的報錯信息。Ddlerror對于抽取、復制進程均有效,默認為abend。
DISCARDFILE /u01/app/oracle/ogg/rep1_discard.txt,append,megabytes 10
--將執行失敗的記錄保存在discard file中,文件中已經包含記錄的話,再后面繼續追加,不刪除之前的記錄。
--如當DDL復制報ORA-1430錯誤,傳遞了重復的alter語句導致,則可以用ddlerror (1430, discard)將錯誤信息扔到discard文件里。
DISCARDROLLOVER AT 02:00
--為了防止discard file被寫滿,每天2:00做一次文件過期設定
DDLERROR DEFAULT IGNORE RETRYOP --DDL語句出錯默認--啟動源端OGG抽取和投遞進程
start pump1
start ext1--導入數據
可以用數據泵把要同步的表導入從庫,or 使用dblink也行--OGG進程檢查與日志查看
[root@test ogg]# tail -200f ggserr.log
--