ogg配置搭建之前需要在數據庫中將enable_goldengate_replication參數打開
SYS@cphl> alter system set enable_goldengate_replication = true scope=both;
goldgate錯誤日志地址:$GGS_HOME/ggserr.log
1、解壓安裝包
p23237964_1121033_Linux-x86-64.zip
unzip ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip
Archive: ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip inflating:
fbo_ggs_Linux_x64_ora11g_64bit.tar ogg的tar包
inflating: OGG_WinUnix_Rel_Notes_11.2.1.0.1.pdf ogg自述文件
inflating: Oracle GoldenGate 11.2.1.0.1 README.txt
inflating: Oracle GoldenGate 11.2.1.0.1 README.doc
解TAR,提醒解tar之后會產生N多文件最好提前放在一個文件夾中
tar xvf fbo_ggs_Linux_x64_ora11g_64bit.tar
2.創建goldgate系統用戶或者直接在oracle系統用戶增加環境變量
export GGS_HOME=/u01/app
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=o1
export ORACLE_ADMIN=$ORACLE_BASE/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:$GGS_HOME
export ORACLE_TERM=xterm
export PATH=/usr/sbin:/usr/bin:/usr/local/bin:$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:$PATH:$GGS_HOME
Linux系統下oracle11g增加的環境變量為:
export GGS_HOME=/u01/app
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:$GGS_HOME
export PATH=/usr/sbin:/usr/bin:/usr/local/bin:$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:$PATH:$GGS_HOME
Linux系統下oracle10g增加的環境變量為:
export GGS_HOME=/home/oracle/ogg
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=/usr/sbin:/usr/bin:/usr/local/bin:$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:$PATH:$GGS_HOME
刷新環境變量
. .profile
檢查環境變量是否正確
echo $GGS_HOME
echo $LD_LIBRARY_PATH
echo $PATH
3、數據庫准備(源端、目標端)
開啟歸檔模式
打開數據庫附加日志
select supplemental_log_data_min from v$database;
alter database add supplemental log data; 啟動附加日志
創建goldgate專屬數據庫用戶ogg此用戶需要擁有dba權限(源端、目標端都需要有ogg用戶)
創建goldgate源端用戶sender目的端接受用戶receiver sender用戶receiver用戶只需要connect、resource權限
每個用戶都需要有自己特有的表空間
源端和目標端都要創建 ogg 用戶
源端創建 sender 用戶
目標端創建 receiver 用戶
思路:
source源 --主機名A --數據庫1---用戶sender
target源 --主機名B --數據庫2 --用戶receiver
目的把用戶sender下表t1同步復制到receiver用戶下表t1下
4、配置ogg工作目錄(源端、目標端)
GGSCI (A) 2> ggsci 啟動 OGG 命令行
GGSCI (A) 2> create subdirs 在安裝目錄下創建 OGG 工作目錄
Reports (.rpt) /u01/app/ogg/dirrpt OGG 報告
Parameters (.prm) /u01/app/ogg/dirprm 存放參數文件
Stdout (.out) /u01/app/ogg/dirout
Replicat Checkpoints (.cpr) /u01/app/ogg/dirchk 檢查點即可以放在表中也可以放在文件中
Extract Checkpoints (.cpe) /u01/app/ogg/dirchk 提取進程檢查點
Process Status (.pcs) /u01/app/ogg/dirpcs 進程狀態
SQL Scripts (.sql) /u01/app/ogg/dirsql 存放 SQL 腳本
Database Definitions (.def) /u01/app/ogg/dirdef 連接是什么類型數據庫 oracle mysql db2 sqlserver
5、啟動 manager 進程(源端、目標端)
Manager 進程:這是 GG 全局主進程,它是 GG 守護進程統籌全局,它可以啟動、監控、終止 Golden Gate 的其它進
程,收集錯誤報告及事件,分配數據存儲空間,發布閥值告警等,在源端和目標端有且只有一個 Manager 進程。
檢查所有進程運行狀態
info all 查看當前ogg進程狀態
編輯mgr 進程參數文件 語法:edit params <group_name>
GGSCI (A) 2> edit params mgr
port 7809
start mgr 啟動 mgr 進程
6、配置源端 Extract 復制進程(源端)
Add trandata schema.table_name (如 hdcs.t)
Add trandata schemas.*
(1)添加抓取進程 ext1
語法:add extract <extract_name>,tranlog,<開始時間或者 SCN 或者 RBA>
GGSCI (A) 3> add extract ext1,tranlog,begin now
info all
(2)指定隊列文件路徑
Extract 進程把日志數據抓取出來后(沒有存放在本地)而是直接把信息投遞到目標端生成隊列文件
add rmttrail /u01/app/dirdat/sd,extract ext1
rmttrail:表示傳輸進程將日志傳輸到目標端后放置的目錄和隊列文件名
(3)修改 extract 進程參數文件(按照什么方式工作)並啟動
語法:edit params <extract_name>
添加如下內容並保存
extract ext1
setenv (NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")
setenv (ORACLE_SID="1")
userid ogg,password oracle
gettruncates
rmthost B,mgrport 7809
rmttrail /u01/app/ogg/dirdat/sd
table sender.t1;
注意:標點符號要用英文字體,必須以分號結尾。
start extract ext1 啟動 ext1 進程,stop extract ext1 停止進程
info all(RUNNING即可)
----此時可以再目標端相應路徑下查看到trail文件
7、配置目標端 replicat 進程
(1)在目標端數據庫創建 checkpoint 表
GGSCI (B) 8> edit params globals 添加如下 2 條,說明 ogg 用戶為 checkpoint 專屬用戶
ggschema ogg
checkpointtable ogg.checkpoint
GGSCI (B) 10> dblogin userid ogg,password oracle
Successfully logged into database. 通過 GGSCI 順利登陸數據庫,創建保存 checkpoint 信息的表
17
GGSCI (B) 11> add checkpointtable ogg.checkponit
Successfully created checkpoint table ogg.checkponit.
說明:checkpoint 表為防止在網絡斷開、進程終止時,從哪個位置來恢復應用。
--此時可以在目標端ogg數據庫用戶下查看到檢查點的表
(2)在目標端創建 replicat 進程
GGSCI (B) 2> add replicat rep1,exttrail /u01/app/ogg/dirdat/sd,checkpointtable ogg.checkpoint
(3)修改 replicat 進程參數文件(按照什么方式工作)並啟動
GGSCI (B) 4> edit params rep1
replicat rep1
--handlecollisions
assumetargetdefs
setenv (NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")
setenv (ORACLE_SID="2")
userid ogg,password oracle
map sender.t1,target receiver.t1;
現在我們的 rep1 進程配置完畢,由於沒有設置 DDL 復制,我們要在 receiver 用戶下創建 t1 表
啟動 start replicat rep1 進程
---此時即可在目標端查詢到來着源端的復制數據
配置自動刪除隊列
1) 進入安裝目錄執行./ggsci;
2) 執行edit param mgr編輯管理進程參數,加入或修改以下行
purgeoldextracts /<goldengate安裝目錄>/dirdat/*, usecheckpoint, minkeepdays 7
其中,第一個參數為隊列位置,*可匹配備份中心所有隊列文件;
第二個參數表示是首先要保證滿足檢查點需要,不能刪除未處理隊列;
第三個參數表示最小保留多少天,后面的數字為天數。例如,如果希望只保留隊列/ggs/dirdat/xm文件3天,可以配置如下:
purgeoldextracts /ggs/dirdat/xm, usecheckpoint, minkeepdays 3
3) 停止MGR進程,修改好參數后重啟該進程
GGSCI > stop mgr
輸入y確認停止
GGSCI > start mgr
注:臨時停止mgr進程並不影響數據復制。
配置啟動MGR時自動啟動Extract和Replicat進程
1) 進入安裝目錄執行./ggsci;
2) 執行edit param mgr編輯管理進程參數,加入以下行
AUTOSTART ER *
3) 停止MGR進程,修改好參數后重啟該進程
GGSCI > stop mgr
GGSCI > start mgr
注意:一般建議不用自動啟動,而是手工啟動,便於觀察狀態驗證啟動是否成功,同時也便於手工修改參數。
設置goldengate支持ddl
1.在源端賦予ogg用戶相應的權限,修改全局配置文件添加ggschema參數
SQL> grant execute on utl_file to ogg;
Grant succeeded
GLOBALS參數文件添加ggschema ogg
GGSCI (qht115) 1> edit param ./GLOBALS
CHECKPOINTTABLE ogg.ggschkpt
ggschema ogg
2.關閉recyclebin(目標和源都關閉)
SQL> alter system set recyclebin=off scope=spfile;(10g可以both修改,11g必須spfile修改重啟生效)
3.運行所需要的腳本
SQL> @marker_setup.sql
@marker_setup --該腳本用於創建DDL的marker表GGS_MARKER,用於存儲DDL信息,該表只進行insert操作
SQL> @ddl_setup.sql
@ddl_setup --該腳本創建了進行DDL復制抽取和復制所需的對象
SQL> @role_setup.sql
@role_setup --創建DDL復制所需的對象
SQL> grant ggs_ggsuser_role to ogg;
SQL> @ddl_enable.sql
@ddl_enable -- 啟用DDL復制,實質上是創建觸發器,用以想MARKER和HISTORY表插入DDL信息
--腳本地址在GGS_HOME
4.源端修改extract進程的params文件,添加"ddl include all"參數,重啟extract進程
5.修改目標端的replicate進程
添加以下內容:
DDL INCLUDE ALL
DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5
重啟進程
--此時ogg架構支持ddl操作
********************************************************************************************************************************************
搭建實例
********************************************************************************************************************************************
ogg配置搭建之前需要在數據庫中將enable_goldengate_replication參數打開
SYS@cphl> alter system set enable_goldengate_replication = true scope=both;
goldgate錯誤日志地址:$GGS_HOME/ggserr.log
1、解壓安裝包
p23237964_1121033_Linux-x86-64.zip
unzip ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip
Archive: ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip inflating:
fbo_ggs_Linux_x64_ora11g_64bit.tar ogg的tar包
inflating: OGG_WinUnix_Rel_Notes_11.2.1.0.1.pdf ogg自述文件
inflating: Oracle GoldenGate 11.2.1.0.1 README.txt
inflating: Oracle GoldenGate 11.2.1.0.1 README.doc
解TAR,提醒解tar之后會產生N多文件最好提前放在一個文件夾中
tar xvf fbo_ggs_Linux_x64_ora11g_64bit.tar
2.創建goldgate系統用戶或者直接在oracle系統用戶增加環境變量
export GGS_HOME=/u01/app
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=cpqd
export ORACLE_ADMIN=$ORACLE_BASE/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:$GGS_HOME
export ORACLE_TERM=xterm
export PATH=/usr/sbin:/usr/bin:/usr/local/bin:$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:$PATH:$GGS_HOME
Linux系統下oracle11g增加的環境變量為:
export GGS_HOME=/u01/app
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:$GGS_HOME
export PATH=/usr/sbin:/usr/bin:/usr/local/bin:$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:$PATH:$GGS_HOME
Linux系統下oracle10g增加的環境變量為:
export GGS_HOME=/goldengate
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=/usr/sbin:/usr/bin:/usr/local/bin:$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:$PATH:$GGS_HOME
刷新環境變量
. .profile
檢查環境變量是否正確
echo $GGS_HOME
echo $LD_LIBRARY_PATH
echo $PATH
3、數據庫准備(源端、目標端)
開啟歸檔模式
打開數據庫附加日志
select supplemental_log_data_min from v$database;
alter database add supplemental log data; 啟動附加日志
創建goldgate專屬數據庫用戶ogg此用戶需要擁有dba權限(源端、目標端都需要有ogg用戶)
創建goldgate源端用戶sender目的端接受用戶receiver sender用戶receiver用戶只需要connect、resource權限
每個用戶都需要有自己特有的表空間
源端和目標端都要創建 ogg 用戶
源端創建 cp22 用戶
目標端創建 receiver 用戶
思路:
source源 --主機名A --數據庫1---用戶cp22
target源 --主機名B --數據庫2 --用戶receiver
目的把用戶cp22下所有表同步復制到receiver用戶下下
4、配置ogg工作目錄(源端、目標端)
GGSCI (A) 2> ggsci 啟動 OGG 命令行
GGSCI (A) 2> create subdirs 在安裝目錄下創建 OGG 工作目錄
Reports (.rpt) /u01/app/ogg/dirrpt OGG 報告
Parameters (.prm) /u01/app/ogg/dirprm 存放參數文件
Stdout (.out) /u01/app/ogg/dirout
Replicat Checkpoints (.cpr) /u01/app/ogg/dirchk 檢查點即可以放在表中也可以放在文件中
Extract Checkpoints (.cpe) /u01/app/ogg/dirchk 提取進程檢查點
Process Status (.pcs) /u01/app/ogg/dirpcs 進程狀態
SQL Scripts (.sql) /u01/app/ogg/dirsql 存放 SQL 腳本
Database Definitions (.def) /u01/app/ogg/dirdef 連接是什么類型數據庫 oracle mysql db2 sqlserver
5、啟動 manager 進程(源端、目標端)
info all 查看當前ogg進程狀態
編輯mgr 進程參數文件 語法:edit params <group_name>
GGSCI (A) 2> edit params mgr
port 7809
PURGEOLDEXTRACTS /goldengate/qd*, USECHECKPOINTS, MINKEEPHOURS 2
start mgr 啟動 mgr 進程
6、配置源端 Extract 復制進程(源端)
GGSCI> DBLOGIN USERID ogg, PASSWORD ogg
Add trandata cp22.*
Add trandata cp221.*
Add trandata cp222.*
(1)添加抓取進程 ext1
GGSCI (A) 3> add extract ext1,tranlog,begin now
info all
(2)指定隊列文件路徑
Extract 進程把日志數據抓取出來后(沒有存放在本地)而是直接把信息投遞到目標端生成隊列文件
add rmttrail /goldengate/dirdat/qd,extract ext1
rmttrail:表示傳輸進程將日志傳輸到目標端后放置的目錄和隊列文件名
(3)修改 extract 進程參數文件
start extract ext1 啟動 ext1 進程,stop extract ext1 停止進程
add extract ext1,tranlog,begin now
add exttrail /goldengate/dirdat/qd,extract ext1 #指定ext1進程所抓取的trail文件放到本地/u01/app/ogg/dirdat/ds路徑下
edit params ext1 更改ext1參數文件
extract ext1
tranlogoptions excludeuser ogg
setenv (NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")
setenv (ORACLE_SID="cpqd")
userid ogg,password ogg
WARNLONGTRANS 2h, CHECKINTERVAL 3m
DDL INCLUDE MAPPED, EXCLUDE OBJTYPE 'tablespace'
DDLOPTIONS ADDTRANDATA, NOCROSSRENAME, REPORT
DYNAMICRESOLUTION
DDLOPTIONS ADDTRANDATA RETRYOP MAXRETRIES 180 RETRYDELAY 60
CACHEMGR CACHESIZE 2048MB, CACHEDIRECTORY /goldengate/dirtmp
exttrail /goldengate/dirdat/qd
table cp22.*
table cp221.*
table cp222.*
;
start extract ext1
---此時本地路徑下生成相應trail文件
ext1進程作用是生成本地trail文件
--此時需要再次配置一個extract進程ext2將本地trail文件傳輸到目標端相應目錄下等待rep進程解析應用
配置PUMP進程
add extract ext2,exttrailsource ./dirdat/qd
add rmttrail /goldengate/dirdat/qd,extract ext2 指定 ext2 進程把本地隊列文件傳輸到目標端的/goldengate/dirdat/qd
編輯 ext2 參數文件
edit params ext2
extract ext2
tranlogoptions excludeuser ogg
setenv (NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")
setenv (ORACLE_SID="cpqd")
passthru
userid ogg,password ogg
rmthost cpiq,mgrport 7809
rmttrail /home/oracle/ogg/dirdat/qd
table cp222.*
table cp221.*
table cp22.*;
開啟DUMP進程
啟動進程后檢查本地是否產生trail文件如果不產生重新配置pump進程。
查詢cpqd當前scn號
SYS@cpqd> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),dbms_flashback.get_system_change_number || '' from dual;
TO_CHAR(SYSDATE,'YY DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER|
------------------- ----------------------------------------
2019-05-15 08:54:03 390429426457
導出備份
exp system/cpqd file=/home/oracle/exp_qd.dmp owner=cp22,cp222,cp221 flashback_scn=390429426457
7、配置目標端 replicat 進程
(1)在目標端數據庫創建 checkpoint 表
GGSCI (B) 8> edit params globals
ggschema ogg
checkpointtable ogg.checkpoint
GGSCI (B) 10> dblogin userid ogg,password ogg
GGSCI (B) 11> add checkpointtable ogg.checkponit
(2)在目標端創建 replicat 進程
GGSCI (B) 2> add replicat repqd,exttrail /home/oracle/ogg/dirdat/qd,checkpointtable ogg.checkpoint
(3)修改 replicat 進程參數文件
GGSCI (B) 4> edit params repqd
replicat repqd
setenv (NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")
setenv (ORACLE_SID="cpwfgg")
userid ogg,password ogg
--HANDLECOLLISIONS
ASSUMETARGETDEFS
DDL INCLUDE ALL
DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 3 RETRYDELAY 5
map cp22.*,target cp22.*
map cp222.*,target cp222.*
map cp221.*,target cp221.*
;
start replicat repqd,aftercsn 390429426457
SQL> alter system set recyclebin=off scope=spfile;(10g可以both修改,11g必須spfile修改重啟生效)
SQL> @marker_setup.sql
@marker_setup --該腳本用於創建DDL的marker表GGS_MARKER,用於存儲DDL信息,該表只進行insert操作
SQL> @ddl_setup.sql
@ddl_setup --該腳本創建了進行DDL復制抽取和復制所需的對象
SQL> @role_setup.sql
@role_setup --創建DDL復制所需的對象
SQL> grant ggs_ggsuser_role to ogg;
SQL> @ddl_enable.sql
@ddl_enable -- 啟用DDL復制,實質上是創建觸發器,用以想MARKER和HISTORY表插入DDL信息
導入imp,fromuser --- touser
啟動rep進程
imp system/cpwfgg file=/home/oracle/exp_qd.dmp log=/home/oracle/imp_qd.log fromuser=cp22,cp221,cp222 touser=cp22,cp221,cp222
SYS@cpwfgg> create tablespace ogg datafile'/u01/app/oracle/oradata/cpwfgg/ogg_1.dbf' size 5G autoextend on;
Tablespace created.
SYS@cpwfgg> create user ogg identified by ogg default tablespace ogg;
User created.
SYS@cpwfgg> grant dba to ogg;
Grant succeeded.
SYS@cpwfgg> create tablespace cp22_data datafile'/u01/app/oracle/oradata/cpwfgg/cp22_data_1.dbf' size 5G autoextend on;
Tablespace created.
SYS@cpwfgg> create user cp22 identified by cp22 default tablespace cp22_data;
User created.
SYS@cpwfgg> grant CREATE ANY VIEW,CREATE ANY SYNONYM,connect,resource to cp22;
Grant succeeded.
SYS@cpwfgg> create tablespace cp221_data datafile'/u01/app/oracle/oradata/cpwfgg/cp221_data_1.dbf' size 1G autoextend on;
Tablespace created.
SYS@cpwfgg> create user cp221 identified by cp221 default tablespace cp221_data;
User created.
SYS@cpwfgg> grant CREATE ANY VIEW,CREATE ANY SYNONYM,connect,resource to cp221;
Grant succeeded.
SYS@cpwfgg> create tablespace cp222_data datafile'/u01/app/oracle/oradata/cpwfgg/cp222_data_1.dbf' size 1G autoextend on;
Tablespace created.
SYS@cpwfgg> create user cp222 identified by cp222 default tablespace cp222_data;
User created.
SYS@cpwfgg> grant CREATE ANY VIEW,CREATE ANY SYNONYM,connect,resource to cp222;
Grant succeeded.
SYS@cpwfgg>