-- ogg 18 11 12 18 版本配置測試
-- 準備工作
create tablespace ogg logging datafile '/u01/app/oracle/oradata/orcl/ogg.dbf' size 20m autoextend on uniform size 2m;
create tablespace ogg logging datafile '+data' size 20m autoextend on uniform size 2m;
create user ogg identified by ogg default tablespace ogg temporary tablespace temp quota unlimited on ogg;
grant unlimited tablespace to ogg;
grant connect, resource, dba to ogg;
grant create session, alter session to ogg;
grant alter system to ogg;
grant select any dictionary to ogg;
grant flashback any table to ogg;
grant select any table, insert any table, update any table, delete any table, drop any table to ogg;
grant create table, create sequence to ogg;
grant select on dba_clusters to ogg;
grant select on v_$database to ogg;
grant select on sys.logmnr_buildlog to ogg;
grant select any transaction to ogg;
grant lock any table to ogg;
grant execute on dbms_flashback to ogg;
grant execute on dbms_logmnr_d to ogg;
grant execute on dbms_capture_adm to ogg;
grant execute on dbms_streams to ogg;
grant execute on utl_file to ogg;
exec dbms_streams_auth.grant_admin_privilege('ogg');
-- 開啟歸檔模式、附加日志和強制日志模式
select supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_ui from v$database;
select log_mode, supplemental_log_data_min, force_logging from v$database;
alter system set enable_goldengate_replication=true scope=both;
alter system set log_archive_dest_1='location=/arch2/archivelog_1';
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
alter database force logging;
alter database add supplemental log data;
alter database drop supplemental log data;
select table_name,logging from dba_tables where table_name='tablename';
-- 關閉資源回收筒
show parameter recyclebin
alter system set recyclebin=off scope=spfile;
alter session set recyclebin=off;
$ cd $ogg_home
sql> @marker_setup
sql> @ddl_setup
sql> @role_setup
sql> grant ggs_ggsuser_role to ogg;
sql> @ddl_enable
sql> @ddl_disable.sql
sql> @ddl_status.sql -- 檢視狀态
sql> @ddl_remove.sql
sql> @marker_remove.sql
sql> @marker_status -- 驗證腳本安裝
sql> @?/rdbms/admin/dbmspool.sql
sql> @ddl_pin.sql ogg;
------------------------------------------------------------------------------------------------------------------------------------------------
-- 配置模式為使用者級别的附加日志
$ ggsci
ggsci (dbsrc) 1> dblogin userid ogg, password ogg
ggsci (dbsrc as ogg@dbmonitor) 2> add schematrandata ahern
-- 表級别的附加日志 源端配置即可
ggsci (dbsrc as ogg@dbmonitor) 2> add trandata ahern.test_oggsync
ggsci (dbsrc as ogg@dbmonitor) 2> info trandata ahern.test_oggsync
-- 配置manager程序(源端目标端都需要配置管理程序)
ggsci (dbsrc) 1> create subdirs
ggsci (dbsrc) 1> info mgr
-- 源端:
ggsci (dbsrc) 2> edit param mgr
port 7809
dynamicportlist 7810-7850
autostart extract *
autorestart extract *, retries 5, waitminutes 2
purgeoldextracts /u01/app/ogg/dirdat/ *, usecheckpoints, minkeepdays 5
lagreporthours 1
laginfominutes 30
lagcriticalminutes 45
accessrule, prog *, ipaddr 192.168.227.*, allow
-- accessrule, prog *, ipaddr 192.168.125.*, allow -- (12c 新特性)
-- 目标端:
ggsci (dbtrg) 1> edit param mgr
autostart replicat *
autorestart replicat *, retries 5, waitminutes 2
userid ogg, password "ogg"
purgeoldextracts /u01/app/ogg/dirdat/ *, usecheckpoints, minkeepdays 10
purgeddlhistory minkeepdays 7, maxkeepdays 10
purgemarkerhistory minkeepdays 7, maxkeepdays 10
-- 添加檢查點(源端和目标端配置ogg的檢查點)
ggsci (dbtrg) 1> dblogin userid ogg, password ogg
ggsci (dbtrg as ogg@dbmonitor) 2> add checkpointtable ogg.checkpoint
ggsci (dbtrg as ogg@dbmonitor) 3> edit param /u01/app/ogg/globals
ggschema ogg
checkpointtable ogg.checkpoint
-- 附
purgeddlhistory minkeepdays 7, maxkeepdays 14, frequencyhours 30
purgemarkerhistory minkeepdays 7, maxkeepdays 14, frequencyhours 30
-- 資料初始化配置
-- 方式一
dblogin userid ogg, password ogg
$ ./ggsci
ggsci (db) 1> start mgr
ggsci (db) 2> info mgr
ggsci (db) 3> add extract sr_init,sourceistable
ggsci (db) 4> edit params sr_init
extract sr_init
setenv (nls_lang=american_america.al32utf8)
userid ogg, password ogg
rmthost 192.168.227.122, mgrport 7809
rmttask replicat, group tr_init
table ahern.*;
[oracle@db1 ogg]$ ./ggsci
ggsci (db1) 1> start mgr
ggsci (db1) 2> info mgr
ggsci (db1) 3> add replicat tr_init,specialrun
ggsci (db1) 4> edit params tr_init
replicat tr_init
assumetargetdefs
discardfile ./dirrpt/tr_init.dsc, purge
map ahern.*, target ahern_tr.*;
-- 配置完啟動上述兩個程序:
ggsci (db) 5> start extract sr_init
ggsci (db1) 5> start extract tr_init
-- 檢視報告:
-- 源端 view report sr_init 直到初始化結束
ggsci (db1) 5> view report sr_init
... ...
2019-06-06 20:06:13 info ogg-00993 oracle goldengate capture for oracle, extinit.prm: extract extinit started.
2019-06-06 20:06:41 info ogg-00991 oracle goldengate capture for oracle, extinit.prm: extract extinit stopped normally.
ggsci (db1) 5> view report tr_init
-- 檢視目标端資料加載情況:
$ sqlplus / as sysdba
sql> select * from ahern.emp
-----------------------------------------------------------------------------------
-- 使用ogg程序進行初始化資料
-- 開始初始化資料的時候要滿足下面的條件:
1.disable掉目标段表的外鍵限制
2.disable掉目标端表的觸發器
3.删除目标段表的索引,加快初始化速度
4.目标端表結建構立完成
-- 源端配置初始化抽取程序
ggsci (db11) 73> add extract sr_init, sourceistable
ggsci (db11) 72> edit params sr_init
setenv (nls_lang = american_america.al32utf8)
dboptions allownologging
rmthost 192.168.1.3, mgrport 7809
table hr.t;
-- 目标端裝載程序
ggsci (10gasm) 35> add replicat tr_init, specialrun
ggsci (10gasm) 34> edit param tr_init
map hr.t, target hr.t;
-- 隻需要啟動源段校驗即可
ggsci (db11) 74> view report sr_init
-- 方式二
set line 180
col owner form a10
col directory_name form a30
col directory_path form a85
select * from dba_directories;
create directory exp_dir as '/home/oracle/pump';
grant read,write on directory exp_dir to public;
select current_scn from v$database;
1763290
expdp system/oracle schemas=ahern directory=exp_dir dumpfile=ahern.dmp logfile=ahern.log flashback_scn=1763290 version=11.2 parallel=2
impdp system/oracle schemas=ahern directory=exp_dir dumpfile=ahern.dmp logfile=ahern.log remap_schema=ahern:ahern remap_tablespace=users:users parallel=2
start replicat rep1,aftercsn 1763290
-- 源端配置抽取程序
-- 1、不支援 ddl
ggsci (dbs1c as ogg@dbmonitor) 6> add extract ext1,tranlog,threads 1,begin now
ggsci (dbs1c as ogg@dbmonitor) 7> add exttrail /u01/app/ogg/dirdat/t1, extract ext1
ggsci (dbs1c as ogg@dbmonitor) 8> edit param ext1
extract ext1
setenv(nls_lang=american_america.al32utf8)
tranlogoptions dblogreader
reportcount every 30 minutes, rate
discardfile /u01/app/ogg/dirrpt/ext1.dsc, append, megabytes 1024
discardrollover at 3:00
exttrail /u01/app/ogg/dirdat/t1
dboptions allowunusedcolumn
fetchoptions nousesnapshot
fetchoptions fetchpkupdatecols
-- 2、支援 ddl
discardfile /u01/app/ogg/dirrpt/ext1.dsc, append, megabytes 1024 -- 10m
warnlongtrans 2h, checkinterval 3m
dynamicresolution
dboptions allowunusedcolumn
--tranlogoptions convertucs2clobs
tranlogoptions excludeuser ggate
--tranlogoptions altarchivelogdest instance ora10 /.../
--threadoptions maxcommitpropagationdelay 60000 iolatency 60000
--ddl area
ddl &
include mapped objtype 'table' &
include mapped objtype 'index' &
include mapped objtype 'sequence' &
include mapped objtype 'view' &
include mapped objtype 'procedure' &
include mapped objtype 'function' &
include mapped objtype 'package' &
exclude optype comment
ddloptions addtrandata report
--add objects
sequence ahern.*;
-- 附 ext ddl
ext
ddl include mapped
ddloptions addtrandata retryop retrydelay 10 maxretries 10
ddloptions report
reportrollover at 6:00
reportcount every 1 hours,rate
ddl include mapped, objtype 'table'
ddloptions report, addtrandata
ddl include all
--ddlerror restartskip 100000 skiptriggererror 100000
ddloptions addtrandata,report
-- 附簡單ddl配置示例
-- 源端配置投遞程序(data pump)
ggsci (dbs1c as ogg@dbmonitor) 9> add extract pump1, exttrailsource /u01/app/ogg/dirdat/t1
ggsci (dbs1c as ogg@dbmonitor) 9> add exttrail /u01/app/ogg/dirdat/t1, extract pump1
ggsci (dbs1c as ogg@dbmonitor) 10> edit param pump1
extract pump1
rmthost 192.168.227.122, mgrport 7809, compress
passthru
rmttrail /u01/app/ogg/dirdat/t1,format release 12.1
-- 目标端配置 replicat 程序
add replicat rep1 integrated exttrail /u01/app/ogg/dirdat/t1 , checkpointtable ogg.checkpoint -- 11
ggsci (dbtrg as ogg@dbmonitor) 4> add replicat rep1, exttrail /u01/app/ogg/dirdat/t1, checkpointtable ogg.checkpoint -- 12
ggsci (dbtrg as ogg@dbmonitor) 5> edit param rep1
replicat rep1
setenv(oracle_sid="ogg2")
report at 06:00
reportrollover at 02:00
reperror default, abend
allownoopupdates
-- ddl
-- ddlerror default ignore retryop ?
-- 以下兩個ddl參數不建議使用
-- ddlerror <error> ignore
-- ddlerror <error1> ignore
-- ddl end
sourcecharset passthru -- 12
discardfile /u01/app/ogg/dirrpt/rep1.dsc, append, megabytes 1024
discardrollover at 02:00
map ahern.*,target ahern.*;
-- 附 rep ddl
ddl include mapped -- all
ddlerror 24344 ignore
ddlerror 1435 ignore
ddlerror default ignore retryop
ddlerror default ignore retryop maxretries 3 retrydelay 5
-- 附錄
-- 初始化資料
dml操作包括insert、update、delete、select操作,而在這些操作中update、delete操作redo隻記錄了變更的資料列以及行id(rowid),
gos1engate抽取資料後将其轉換為自己的格式發送到目标端。在同步開始前目标端沒有初始化資料(目标端為空資料),
那麼事物産生的update、delete dml操作發送到目标端,目标端gos1engate replicat程序會因為找不到資料而報錯
進而導緻replicat程序崩潰停止(abended),是以這就需要我們在同步前初始化資料,初始化完後再同步,這樣可以降低錯誤率。
同步資料的方式可以通過dblink、exp/imp、資料泵或者表空間遷移等方式同步。
-- 啟動gos1engate
資料初始化後,分别啟動目标端mgr程序、replicat程序,源端mgr程序、主抽取程序(primary extract)、data pump程序(secondly extract)
注:因為在mgr都相應的配置了extract程序和replicat程序的自啟動,是以在mgr程序啟動後會自動啟動extract程序和replicat程序
-- 目标端
ggsci (dbtrg) 1> start mgr
ggsci (dbtrg) 2> info all
ggsci (dbtrg) 3> start rep1
-- 源端
ggsci (dbs1c) 1> start mgr
ggsci (dbs1c) 2> info all
ggsci (dbs1c) 3> start ext_sjz1
ggsci (dbs1c) 4> start dp_sjz1
-- 檢視相關統計資料
ggsci (dbs1c) 1> stats dp_sjz1,daily
ggsci (dbs1c) 2> stats rep1,daily
-- 啟動失敗檢視日志
-- 日志檔案存儲路徑:gos1engate安裝目錄下/ogg/product/ogg_home/ggserr.log
$ vi $ogg_home/ggserr.log
-- 同步測試
測試的時候分别測試insert、delete、update操作
-- 源端進行資料插入操作檢視源端extract(提取)程序狀态
ggsci (dbs1c) 5> stats ext_sjz1
ggsci (dbs1c) 6> stats dp_sjz1
-- 目标端檢視replicat(複制)程序狀态
ggsci (dbtrg) 4> stats rep1
-- 目标端資料查詢驗證
-- 檢視replicat 複制是否完成
ggsci (dbtrg) 4> send replicat rep1 status
-- 附:
開啟歸檔,最小附加日志和強制歸檔之後,ogg可以同步insert,delete等部分操作,
但遇到update時将會挂掉,報錯說找不到相關記錄,是以,還需要再對每一個table都在源端開啟表級日志傳輸
drop tablespace sys_tablespace including contents and datafiles;
alter user dbo_tyshdb quota unlimited on sys_tablespace;
-- 附:注意事項
1、字元集問題
如果源庫字元集為 al32utf8 目标庫為 zhs16gbk
則在配置ogg過程中應該把源端和目标端字元集配置一緻,也就是說源端為 al32utf8,則目标端ogg也配置為 al32utf8。
如果配置不一緻将會導緻插入亂碼。
2、資料庫中查詢列資料是否有重複示例
-- 查單個字段:
select test_name,count(*) from t_test group by test_name having count(*) > 1;
-- 查組合字段:
select test_name1,test_name2,count(*) from t_test group by test_name1,test_name2 having count(*) > 1;
3、重置trial檔案,在進行重置前一定要保證rep全部應用完,否則資料不一緻
alter extract ext_sjz1 etrollover
alter extract dp_sjz1,thread 1,extseqno 4,extrba 0
alter replicat rep1, extseqno 7, extrba 0
-- 改變抽取應用檢查點
-- 請確定已經 掌握 ogg 各個程序的讀檢查點和寫檢查點的詳細含義
begin {now | yyyy-mm-dd[:hh:mi:[ss[.cccccc]]] | eof | seqno <sequence number>}
--改動抽取程序的開始抽取點:(即:myext的讀檢查點)
alter extract myext begin yyyy-mm-dd:hh:mi:ss
alter extract myext begin now
--改動myext的寫檢查點:
alter extract myext, etrollover
--改動傳輸mydp程序的讀檢查點
alter extract mydp, extseqno 1234, extrba 0
--改動傳輸mydp程序的寫檢查點
alter extract mydp etrollover
--改動myrep的讀檢查點
alter replicat myrep, extseqno 1234, extrba 0
-- 1.手動調整capture程序開始工作點
-- 變更-程序從2015-03-1012:12:12開始抽取事務。
ggsci >alter extract, begin 2015-03-10 12:12:12
-- 變更-程序從oracle資料庫scn為778899時開始抽取事務。
ggsci >alter extract ext_001, scn 778899
-- 2.手動調整capture程序寫入trail檔案sequence号
-- 變更-capture程序寫trail檔案到目前sequence+1中,rba從0開始。
ggsci > alter ext_001 etrollover
-- 3.手動調整data pump程序讀trail檔案檢查點位置
ggsci > alter dpe_001, extseqno 5, extrba 0
-- 4.手動調整data pump程序寫trail檔案檢查點位置,目前sequence+1中,rba從0開始。
ggsci > alter extract dpe_001 etrollover
-- 5.手動調整replicat程序讀trail檔案檢查點位置
ggsci > stop rep_001
sending stop requestto replicat rep_001 ...
request processed.
-- 附異常問題
2019-05-14t14:50:47.142+0800 warning ogg-06600 oracle goldengate capture for oracle, pump1.prm:
the remote peer for remote trail /u01/app/ogg/dirdat/t1 does not support 9 digit seqlen feature. continuing with 6 digit seqlen
-- 解決方案
solution
you can lower the source to use 6 digit trail sequences by:
1. create a text file called globals in the source <ogg_home>
2. add a line containing: trail_seqlen_6d
then restart mgr and recreate your extract and pump.