一、需求,Oracle數據庫DG角色切換,OGG如何處理
需求:有同事溝通客戶需要進行DG切換,那么數據庫附帶的OGG軟件如何處理呢???
二、解決方案
2.1 信息拆解
1)DG切換發生在Oracle Db的相同版本;
2) DG切換后主庫將變成備庫,備庫將變成主庫;
主備環境使用OGG有什么特點呢?
OGG抽取進程抽取主庫、備庫都能抽取,但是參數不同,因此對于抽取進程來說,需要修改參數;
OGG投遞進程只關心Trail文件源端,目標端的文件路徑是否改變,IP地址目標端是否改變;
OGG復制進程只能在主庫進行應用OGG SQL Exec DML操作;
3)DG切換的數據庫對OGG進程的影響是源端,還是目標端。
2.2 對于源端發生DG切換,源端的OGG軟件如何處理
方案一、配置OGG專用抽取ADG的環境,這個環境不涉及DG切換
源端原有架構1主1備,因此主備切換后,OGG所在的源端的角色發生改變,進程都需要手工處理;
那么修改后的架構,1主2備,選擇一臺專用的OGG ADG抽取環境,這個ADG不涉及DG切換,因此永遠是備庫角色;
抽取進程使用參數就可以抽取ADG環境的數據了!
Does GoldenGate Support Extracting Redo from Active Data Guard? (Doc ID 1299805.1)
GOAL
Does GoldenGate support extract reading redo from generated from an active data guard?
SOLUTION
Yes, this is supported in 12.1.2.1.0 (but not previous version) GoldenGate classic extract,
with parameter:
TRANLOGOPTIONS MINEFROMACTIVEDG
For versions older than 12.1.2.1.0 the below error can occur:
ERROR OGG-00303 Unrecognized option (MINEFROMACTIVEDG) for TRANLOGOPTIONS.
So Goldengate must be upgraded to 12.1.2.1.0 or later versions to resolv
也就是說OGG使用12.1.2.1.0的版本,經典模式的情況下就可以抽取no pdb的 adg的數據了!
這種方案好,但是限制也多:
1.OGG版本>=12.1.2.1.0;
2.數據庫版本與Ogg版本兼容,具體看兼容性列表,11g->19c 甚至更高;
3.Oracle db 不能使用pdb,否則無法抽取,可以參考如下Mos文章
Configuring Integrated Extract For ADG Mode (Doc ID 2643343.1)
Oracle GoldenGate - Version 19.1.0.0.4 and later
QUESTION: Is it possible to configure Integrated Extract with ADG in 19.1 GoldenGate release?
It is not possible to use Integrated Extract for ADG standby database.
MINEFROMACTIVEDG -Valid for Extract in Classic Extract mode for Oracle.
Please refer the following link for more details about MINEFROMACTIVEDG settings.
方案二、DG切換,OGG只在主庫進行抽取;【復制文件】
1.停業務;
2.stop停OGG抽取投遞進程;
3.打包OGG軟件及Trail文件,傳輸到切換后新主庫的機器,相同的路徑下;
4.DG切換,原主庫角色變成備庫;原備庫角色變成主庫;
5.啟動OGG抽取,投遞進程;
正常流程下,非常流暢,無異常!
方案三、DG切換,OGG只在主庫進行抽取;【遠程抽取】
與上述情況一樣,但是不想更換主機???
1.停業務;
2.stop停OGG抽取投遞進程;
3.OGG抽取進程修改連接串,使用遠程tns配置連接新主庫的連接串信息;
4.DG切換,原主庫角色變成備庫;原備庫角色變成主庫;
5.啟動OGG抽取,投遞進程;
這樣等于原來OGG從當前主機的實例抽取到的數據,轉變為遠程抽取數據,操作更少,只涉及修改連接串;
方案四、DG切換,OGG只在ADG進行抽取
與上述方案二、方案三其實是一樣的;
方案五、DG切換,OGG從只抽取ADG轉變為抽取主庫;
1.停業務;
2.stop停OGG抽取投遞進程;
3.刪除或者注釋OGG抽取進程參數
TRANLOGOPTIONS MINEFROMACTIVEDG
4.DG切換,原主庫角色變成備庫;原備庫角色變成主庫;
5.對抽取進程更改抽取的時間點,從當前時間開始重新抽取
GGSCI> alter extract [process_name], tranlog, begin now
6.啟動OGG抽取,投遞進程;
反過來,DG切換,OGG從只抽取主庫,轉為抽取ADG,與上述操作反過來就行了。
2.3 對于目標端發生DG切換,源端及目標端的OGG軟件如何處理
特點:目標端OGG進程只能是復制進程,復制進程需要在DB執行DML操作,只能在主庫進行!
因此,1.源端的OGG投遞進程的IP地址,需要修改為新主庫的IP地址;
2.目標端的OGG軟件需要相應調整;
1.修改源端投遞進程IP地址就不作描述了;
2.目標端的OGG相應修改;
方案一、DG切換,OGG復制進程只在主庫應用SQL【復制文件】
1.停業務;
2.stop停OGG復制進程;
3.打包OGG軟件及Trail文件,傳輸到切換后新主庫的機器,相同的路徑下;
4.DG切換,原主庫角色變成備庫;原備庫角色變成主庫;
5.啟動OGG復制進程;
正常流程下,非常流暢,無異常!
方案二、DG切換,OGG復制進程只在主庫應用SQL【遠程復制】
1.停業務;
2.stop停OGG復制進程;
3.修改OGG復制進程對應的連接參數,配置Tns連接新的主庫信息,參數修改為遠程復制
4.DG切換,原主庫角色變成備庫;原備庫角色變成主庫;
5.啟動OGG復制進程;
正常流程下,非常流暢,無異常!
三、總結
3.1 對于OGG源端數據庫DG切換
1)最方便的方式是配置ADG數據庫專門進行抽取;
2)當然如果版本不匹配或者資源無法申請到;選擇上述遠程抽取或者文件cp文件都行;
3)如果想省事一點可以寫個腳本配合變更;
舉例,選擇一臺OGG專用服務器,遠程只抽取主庫;
對于ADG切換來說,只涉及IP,PORT,SERVICE_NAME三要素的修改,可以編寫一個腳本;
可能性一、
1.檢測當前ogg抽取進程的tns連接串,測試登錄db,檢查db角色,如果是主庫,pass;
2.正常啟動Ogg抽取進程,投遞進程,腳本運行完成;
可能性二、
1.檢測當前ogg抽取進程的tns連接串,測試登錄db,檢查db角色,如果是備庫;
2.通過循環檢索提前配置好的文件,里面包含主備連接串,for循環調用,檢查db角色主庫則停止,獲取當然連接串信息;
3.將上述獲取到的連接串信息,修改ogg抽取進程@遠程三要素信息;
4.啟動OGG抽取進程,投遞進程,腳本運行完成;
實際上就是將手工修改ogg抽取進程連接主庫的信息,進行更新的動作腳本去完成!
3.2 對于OGG目標端數據庫DG切換
1)選擇上述遠程復制
2)整體OGG文件cp打包遷移到新的主庫運行;
思路也是可以寫個腳本,將上述動作腳本化;
備注:這個工作量大不大,如果一年也沒個1兩次,手工修改就完事了。當然工作頻繁,建議寫個腳本方便快速運維。
這些方案也不一定可靠,小伙伴們發現漏洞或者問題歡迎提意見。




