GoldenGate實施參考

studywell發表於2017-01-29
轉自:http://blog.csdn.net/evils798/article/details/43562739



 
GoldenGate實施參考

轉載一篇原廠的Oracle GoldenGate的實施參考
安裝資訊收集
? 收集客戶資訊(建議至少提前兩週)
– 測試/生產環境
– 作業系統列表
– 資料庫列表
– 資料庫日誌增量評估
? 每天日誌增量、峰值日誌增量
–網路配置:頻寬、埠等
? 頻寬評估(如頻寬不足,是否需要啟動壓縮,壓縮對CPU佔用測試)
– 資料結構
? 包括表數量、是否存在無主鍵表、是否有不支援資料型別等
– 驗證OGG版本可用性!
? 針對不同的作業系統和資料庫版本下載需要的OGG版本並安裝測試

頻寬估算
? 根據峰值產生日誌量估算頻寬佔用
? 假設條件
– 假設OGG佇列與日誌比例為1:4。如只複製部分表則此比
例可以假設為更低。
– 假設網路傳輸效率為0.7
– 假設網路傳輸壓縮比例為1:8。根據資料內容有所變化,一
般字元資料較多時壓縮比例較大,二進位制物件壓縮效率較低
? 頻寬估算演算法
– 以客戶業務高峰期每小時產生40G為例,可以估算如下
頻寬=40G/3600(秒/小時)/ 4(日誌過濾比例)/8(壓縮比率) * 8(每字
節8位) /0.7(網路傳輸效率)=4Mbps

無主鍵表的複製
? GoldenGate可以正常複製無主鍵表,以所有列作為基準
代替主鍵
? 強烈建議排除掉無主鍵表或者增加主鍵(或唯一索引)
– 一般為臨時表或者歷史表
– 導致附加日誌增量較大,可能影響生產系統效能
– 目標端replicat投遞效率非常低且無法進行最佳化
– 容易出現資料不一致且不易修復
– 無法使用HANDLECOLLISIONS
? 該引數依賴於表的主鍵進行邏輯判斷,無主鍵表使用該引數會導
致重複記錄出現
測試安裝準備
– 測試安裝文件準備
? 擬定安裝操作文件
? 擬定初始化方案並與客戶達成一致
– 根據測試安裝場景準備
? 資料庫指令碼,如建立使用者、賦予許可權等
? 準備OGG安裝所需指令碼,如add trandata命令指令碼、目標
端禁止trigger和cascade delete指令碼等
? OGG引數檔案,列出所有可能用到引數
? OGG命令,常用命令預先放在文字里
? 驗證引數、命令、指令碼的可行性
? 發現潛在的問題,及時尋求解決方案
– 預訂技術支援

測試安裝準備 –網路埠
? 對於GoldenGate所在的資料庫主機
– 源和目標均向對方開放埠7800-7810,用於mgr管理程式通訊和資料
傳輸程式傳輸資料。
– Director管理各個GoldenGate例項需要執行大量監控命令,每次命令需
要一個埠,建議開放7811-7850埠;
– Veridata為了實現併發比較,同樣需要大量埠,建議開放7851-7950
埠;
– 綜上所述,建議複製源和目標相互以及為Director Server和Veridata
Server開放7800-7950埠。
? 對於Veridata Server和Director Server
– 由於國網需要每個Director Server監控上百臺主機,需要大量動態分配
埠,建議Director Server向所有受控伺服器開放所有埠。

測試安裝準備 –系統設定(源和目標)
? 建立GoldenGate執行使用者
– 需訪問資料庫的動態庫、線上日誌及歸檔日誌
– 使用oracle使用者,也可為其建立新的系統使用者將其加入到oracle安裝用
戶所在組(一般為oinstall)。
– 為GoldenGate執行使用者配置記憶體限制
? 分析和抽取交易資料需一定記憶體,需放寬GoldenGate執行系統使用者
對記憶體大小(memory)、檔案大小(fsize)、DATA、STACK等引數
的值,在系統允許的情況下儘量將引數設定為-1(ulimited),一般
在/etc/security/limits檔案中。
? RAC各節點配置時鐘同步
– GoldenGate在單節點上對所有節點日誌進行解析,為了保證其在各節點
抽取資料順序的一致性,需要在各個節點主機上配置時鐘同步(例如在
AIX下配置NTP服務)。

建立OGG所需資料庫使用者(源和目標)
? OGG使用者在源端所需許可權(DML)
– GRANT CONNECT TO goldengate;
– GRANT ALTER ANY TABLE TO goldengate; //用於新增表附加日誌
– GRANT ALTER SESSION TO goldengate;
– GRANT CREATE SESSION TO goldengate;
– GRANT FLASHBACK ANY TABLE TO goldengate;
– GRANT SELECT ANY DICTIONARY TO goldengate;
– GRANT SELECT ANY TABLE TO goldengate;
– GRANT RESOURCE TO goldengate;
? 目標端DML複製需所有源端許可權加上
– GRANT INSERT ANY TABLE TO goldengate;
– GRANT UPDATE ANY TABLE TO goldengate;
– GRANT DELETE ANY TABLE TO goldengate;
? 如需複製DDL,則兩端均需要sysdba許可權
– grant sysdba to goldengate;

測試安裝準備 – 儲存空間(源和目標)
? 為GoldenGate分配空間
– 建議在共享陣列,可以在單節點失敗後由其它節點接管,透過
指令碼可以與叢集軟體整合
– GoldenGate軟體所需空間主要取決於佇列的產生速度,一般建
議為其保留相當於資料庫1-3天歸檔日誌量的儲存空間。
– 儲存劃分完後建立OGG安裝目錄並將該目錄Owner設為OGG運
行使用者
? 為資料庫保留1-3天歸檔日誌
– 長交易需要其開始時段的日誌


測試安裝準備 – 資料庫(源)
? 開啟歸檔模式
– 避免OGG重啟無法找到對應日誌
? 配置parallelism(針對Oracle 9i)
– 將LOG_PARALLELISM引數設為1,OGG不支援大於1
? 關閉recycle bin(針對DDL複製)
– Oracle 10g R2 and later: 將RECYCLEBIN初始化引數設定為
OFF.
– Oracle 10g R1: 將 _RECYCLEBIN初始化引數設定為FALSE.


OGG軟體安裝 (源和目標)
? 上傳和解壓OGG軟體
– 檢查安裝目錄Owner是否是OGG執行使用者
? 配置環境變數
– 如使用Oracle執行使用者一般無需調整
– 如非Oracle使用者則建議複製Oracle的profile檔案,至少需配置如
下環境變數
? PATH
? ORACLE_SID
? ORACLE_HOME
? LD_LIBRARY_PATH (Solaris, Linux), LIBPATH (AIX),
SHLIB_PATH (HPUX)
? 配置完畢可以透過能否執行sqlplus進行初步驗證
– 使用ulimit –a檢查記憶體等限制


OGG軟體安裝 -續(源和目標)
? 執行ggsci,檢查是否能夠進入OGG命令列介面
? 執行create subdirs建立子目錄
? 執行edit param mgr為manager配置引數,然後嘗試
啟動mgr程式
如以上步驟均能順利執行,則表明初步安裝成功.由於
以上步驟並不影響生產庫執行,可以在測試安裝前幾
天提前完成.


開啟附加日誌(源)
? 以漸進模式開啟附加日誌
– 第一步,在晚上或其他業務較空閒時段開啟資料庫級最小附加日

– 第二步,經過一段時間執行觀察資料庫最小附加日誌對資料庫是
否有影響,觀察日誌量的增加
– 第三步,同樣選擇空閒時段開啟所需複製表的附加日誌
– 第四步,經過一段時間執行觀察資料庫是否有效能下降,歸檔日誌
量是否有明顯增加
? 如何降低附加日誌影響(☆)
– 排除一些應用的中間表
– 儘量排除無主鍵和唯一索引表(記錄全部列會導致日誌量顯著增
加)或給他們加上主鍵、


如何開啟附加日誌
? 資料庫級附加日誌
– 檢視v$database
? SUPPLEMENTAL_LOG_DATA_MIN:最小附加日誌,開關
– 開啟所需複製表的表級附加日誌
? ALTER DATABASE add SUPPLEMENTAL LOG DATA;
? 目的是產生最小日誌增量,避免對生產主機產生較大影響
? 表級附加日誌
– 透過OGG命令列中的add trandata schema.table 命令新增
– 如果有主鍵則只加入主鍵;無主鍵新增唯一索引;兩者皆無,則
自定義新增,否則新增所有列

Extract程式
? 設定作業系統變數
– 繼承mgr程式變數
? 設定程式本身引數和變數
– 讀取引數檔案
– 設定記憶體限制(可以透過CACHEMGR修改,預設單個程式32位
系統最大2G,64位系統最大8G記憶體)
? 連線資料庫
– 根據下列資訊登入資料庫
? userid引數
? 環境變數ORACLE_SID(也可透過setenv引數設定)
? 環境變數ORACLE_HOME (也可透過setenv引數設定)
– 獲取資料庫版本資訊和字元編碼
? 注意:環境變數中NLS_LANG設定必須與資料庫保持一致
– 根據檢查點確定讀取日誌,尋找並開始解析日誌

Oracle日誌的讀取 – 線上日誌
? 根據檢查點中的日誌序列號判斷是線上還是歸檔
? 線上日誌
– 由於線上日誌頻繁讀寫,在系統IO快取中,讀取速度較快
– 線上日誌位置及特殊引數
? 檔案系統
? ASM。需配置如下(只能使用SYS登入ASM例項):
TRANLOGOPTIONS ASMUSER SYS@<ASM_instance>,
ASMPASSWORD <password>
? RAW DEVICE。在Aix下一般需要配置如下引數:
tranlogoptions rawdeviceoffset 0
注意:該引數只在內部參考手冊中存在
? 如果需抽取CLOB必須加上
– TRANLOGOPTIONS CONVERTUCS2CLOBS
? 說明:如果使用begin now時OGG讀取日誌序列號錯誤,可以嘗試使
用extrba和extseqno直接指定日誌位置


Oracle日誌的讀取 – 歸檔日誌
? 預設查詢資料庫中歸檔日誌位置和格式併到指定位置查詢
對應歸檔日誌檔案
? 可透過引數指定歸檔日誌
– TRANLOGOPTIONS {
[ALTARCHIVEDLOGFORMAT <string>] [INSTANCE
<instance_name>] [THREADID <id>]
? 指定日誌檔名的格式
[ALTARCHIVELOGDEST [PRIMARY] [INSTANCE
<instance_name>] <path name>]
? 指定歸檔日誌目錄。如果是RAC,需要訪問到所有節點歸檔日
志,可使用共享檔案系統或者使用nfs等將其它節點歸檔共享到
執行節點
? 如果為所有節點指定了歸檔日誌目錄,則可以使用PRIMARY
引數告訴GoldenGate無需再去查詢log_archive_dest_N
– 可以透過降低程式對控制檔案訪問次數


Replicat程式
? 設定作業系統變數
– 繼承mgr程式變數
? 設定程式本身引數和變數
– 讀取引數檔案
? 初始化載入之後指定開始的CSN
? 連線資料庫
– 根據下列資訊登入資料庫
? userid引數
? 環境變數ORACLE_SID(也可透過setenv引數設定)
? 環境變數ORACLE_HOME (也可透過setenv引數設定)
– 獲取資料庫版本資訊和字元編碼
? 注意:環境變數中NLS_LANG設定必須與資料庫保持一致

當機初始化步驟
? 完成前面所述的所有準備工作
? 根據約定時間停止業務應用
? 源端
– 鎖定除去OGG資料庫使用者以外其餘所有使用者
– 停止Oracle內部的所有Job
– 關閉資料庫
– 重新啟動資料庫
– 配置OGG抽取程式和本地佇列
– 啟動OGG抽取程式,驗證
? 抽取程式是否可以正常啟動,主要是驗證是否能正常讀取日誌
? 觀察是否有資料被抽取出來,如有則說明尚有其它連線在修改資料,
需找出原因並停止
– 停止OGG抽取程式
– 可使用指令碼記錄部分主要表或所有表記錄總數
– 關閉資料庫


OGG最佳實踐 – 當機初始化 (續一)
? 源端
– 使用RMAN/可傳輸表空間/BCV等方式將資料匯出
– 在源端開啟資料庫
– 啟動源端抽取程式(也可重新配置一遍,注意清除舊的佇列)
– 解開鎖定的其它使用者,恢復job
– 啟動應用
– 觀察資料抽取是否正常
? 目標端
– 將資料匯入到目標庫
– 開啟資料庫
– 解鎖其它使用者(如允許也可保持鎖定狀態防止修改資料)
– 對比記錄的源端資料庫記錄數與目標記錄數是否相同,驗證恢復完成


OGG最佳實踐 – 當機初始化 (續二)
? 源端
– 配置Data Pump和遠端佇列
– 啟動Data Pump觀察資料傳輸是否正常
? 目標端
– 配置Replicat
? 注意目標端使用者許可權比源端多幾個
– 啟動Replicat觀察資料是否正常
? 注:此時一般將reperr設定為abended模式(即預設模式)並配置
discardfile引數,遇有錯誤程式可以立即中止,便於及時查詢錯誤
– 如Replicat速度跟不上佇列增長速度,需進行Replicat拆分


OGG最佳實踐 – 基於SCN號的無當機初始化
? 前提條件
– 客戶具有能夠將目標恢復到某一特定SCN號的備份/恢復工具
? RMAN (強烈推薦)
? Exp/imp
? 操作步驟
– 源端
? 完成前面所述的所有準備工作
? 配置OGG抽取程式和本地佇列
? 啟動OGG抽取程式並記錄開始時間
? 查詢資料庫中當前交易最早的開始時間,直到該時間超過OGG抽取
啟動時間點
? 查詢和記錄此時SCN號為最小所需SCN
? 可每隔半小時或一小時重新查詢SCN號和記錄此時全庫所有表或部
分關鍵業務表中記錄數


OGG最佳實踐 – 基於SCN號的無當機初始化 (續一)
? 目標端
– 使用備份/恢復工具恢復目標庫到指定SCN號
? 如果是RMAN可以邊恢復邊觀察,直到恢復出來的SCN號和時間點
大於記錄的最小所需SCN號
– 查詢目標庫中全部表或關鍵表記錄,看其是否大致符合源端記錄數
– 刪除掉目標端物化檢視等無用物件
– 透過SQL禁止目標端trigger和外來鍵或者配置GoldenGate目標端引數
在會話級禁止
– 配置Replicat
? 注:此時一般將reperr設定為abended模式(即預設模式)並配置
discardfile引數,遇有錯誤程式可以立即中止,便於及時查詢錯誤
– 使用以下命令啟動Replicat
? Start myrep, AFTERCSN <目標恢復到的CSN>
– 觀察資料複製是否正常


目標初始化方案
? 初始化的關鍵
– 如何避免資料丟失
– 如果處理衝突資料
? 使用HANDLECOLLISIONS處理衝突資料
– 條件:表均有主鍵或唯一索引
– 方法:在啟動replicat前加入HANDLECOLLISIONS引數,依賴
表主鍵處理掉重複資料
– 問題:如果表沒有主鍵則可能產生重複記錄
? 使用SCN
– 啟動extract後按照前面說述選擇合適時間點獲取其SCN;
– 使用exp或rman等獲取對應於該SCN的影像並裝載到目標端;
– 啟動replicat時使用start replicat <name>, aftercsn <number>或
者在replicat的map引數加入filter ( @getenv (“TRANSACTION”,
“CSN”) > <number>) ;使replicat從該scn後的記錄開始。


資料複製典型場景 – 重新獲取最近資料變化
? 可以透過修改ext/replicat起始檢查點到指定時間
– 方案一:使用alter extga,begin 2010-03-21 08:00:00
? 條件:對應歸檔日誌依然存在
– 方案二:修改replicat從指定位置佇列重新開始應用
? ALTER REPLICAT finance, EXTSEQNO 53,EXTRBA 0
? 可以透過檢視佇列生成時間或者logdump檢視記錄時間戳定位時間
? 重複資料處理
– 在replicat使用handlecollisions(必須有主鍵或者唯一索引)


DDL複製的範圍
? 只支援Oracle資料庫
– 暫不支援其它資料庫DDL複製!
? 對於Oracle資料庫,GoldenGate能夠支援除去資料
庫系統物件之外所有物件DDL變化的複製
? GoldenGate DDL複製需要關閉Oracle的
– _RECYCLEBIN引數(Oracle 10.1)
–RECYCLEBIN引數(Oracle 10.2及以後版本)。

DDL複製的原理及特點
? Oracle GoldenGate的DDL複製是基於Trigger的複製,
– 在源庫建立一個Oracle全庫級的Trigger捕捉DDL操作到中
間表
– Extract讀取中間表DDL語句並與DML語句根據csn排序
– 目標端重現該DDL操作sql語句
? 特點
– DDL複製與DML複製的複製機理是完全不同的
? DDL複製基於Trigger,而DML複製基於日誌,兩者的復
制機理不同,其資料捕捉是沒有聯絡的,只是在主
Extract程式中透過scn號按照發生的順序進行組裝,保
證DDL操作和DML操作按照其原來的順序執行。


DDL複製的原理及特點(續)
? 特點(續)
– DDL複製與DML複製是相互獨立的
? DDL複製的Trigger建立和啟用後,無論DML複製是否運
行,該Trigger一直在發生作用,捕捉DDL sql語句到中
間表。因此,DML複製的起停並不影響DDL的捕獲。
? 同樣,DDL Trigger的啟用和停止並不影響DML複製,
只是該Trigger被禁止後不再抓取DDL操作。
? 它們之間只是在Extract進行組裝時根據scn號進行排序,
沒有其它任何聯絡。
– DDL複製只是簡單的sql複製
? 透過Trigger捕捉DDL其實就是抓取原始的sql語句併傳送
到目標重新執行一遍。

DDL複製的限制
? DDL複製會影響資料庫效能
– 捕獲DDL語句的Trigger是全庫級別的Trigger,即該資料庫
上的任何一個DDL操作無論其是否在複製範圍內均會觸發
該Trigger並被記錄到中間表供Extract程式刪選。因此啟用
DDL複製會導致源庫的DDL操作全部觸發Trigger,如果數
據庫日常業務量較多並且DDL操作較多,會導致資料庫性
能下降很多。
? DDL語句並不一定能在目標執行成功
– 由於兩端資料庫總存在物理和邏輯上的不同,例如兩邊的
安裝目錄和資料檔案、表空間等會有所區別,造成同樣的
DDL語句在源端能夠執行但無法在目標端執行。雖然可以
透過字串替換預先定義和解決類似問題,但DDL語句有
可能在目標重現後產生與源端不同結果,需要較多的維護
操作。

何時開啟DDL複製
? DDL複製優點
– 開啟DDL複製能夠可以自動建立每次補丁新建和修改的物件,並自動
維護對應的附加日誌,無需人工介入,減少人工工作量。
? 使用原則:
– 兩端必須是Oralce資料庫;
– 兩端的表結構完全相同;
– 資料複製過程中沒有資料的轉換;
– 資料庫每日產生日誌量不超過50G;
– 應用系統在資料庫中不能有頻繁的DDL操作,如頻繁建立中間表等操
作。
如果符合以上條件,可以聯絡Oracle GoldenGate技術支援探討開啟DDL
複製。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-2132979/,如需轉載,請註明出處,否則將追究法律責任。

相關文章