天天看點

使用 Direct Initial Load 初始化 GoldenGate 同步資料

背景

GoldenGate 的 Direct Initial load 常用于用于異構環境的初始化資料,也可以用于某些生産環境到測試環境的資料同步。初始化的同步過程一般隻需要在 GoldenGate 上配置即可無需 DBA 進行參與,使用 Direct Initial load 處理某些資料表不一緻後重新同步也非常友善,僅需要将想要同步表配置如參數啟動程序即可完成表資料庫的同步。

GoldenGate (OGG) 初始化資料的種類

2.1. Extract 和 Replicat 程序的兩種工作模式

Initial Load — 初始資料的加載( special run、 batch run)

一般用于異構環境下的資料加載,初始化過程檔案可以落地也可以選擇不落地,抽取的方式就是将需要初始化的資料查詢出來儲存成 OGG 或者目标資料庫可以識别的格式。

Change Data Capture (CDC) — 增量資料的抽取

配合初始化資料庫,完成整個初始化中增量資料的同步。

2.2. initial load 的四種工作模式

目标端資料落地

File to replicat (Extract writes to a file that Replicat applies)

使用 Direct Initial Load 初始化 GoldenGate 同步資料

該方式利用 OGG 的 Initial Load Extract 程序将需要抽取的資料先進行解析生成 OGG 的 Trail 檔案,然後将解析生成的檔案傳輸到目标端主機的 OGG 指定的目錄裡,再由 OGG 的 Replicat 進行解析插入到目标資料庫的對應表裡。

File to database utility (Extract writes to a file formatted for a DB bulk loadutility)

使用 Direct Initial Load 初始化 GoldenGate 同步資料

該方式源端程序解析資料庫資料,通過 FORMATASCII 參數控制抽取最終生成目标端資料庫可以識别使用的 ASCII 檔案,也就是文本檔案。目标端使用自己資料庫提供的資料加載程式進行資料加載完成初始資料,這種方式加載資料一般應用于異構的環境,比如 Oracle 到 IBM 資料庫之間加載,Oracle 到 SQL Server 間。

目标端資料不落地

Direct Load (Extract sends data directly to Replicat)

使用 Direct Initial Load 初始化 GoldenGate 同步資料

采用不落地的方式 Initial load extract 和 Initial load replicat 程序之間直接進行傳輸資料,在目标端沒有 collertor 程序負責收集源端發送的 tail 檔案。而目标端落地方式當 mgr 程序啟動的時候會自動啟動一個 collector 程序進行接收源端 pump 程序傳輸過來的 tail 檔案。

Direct load 的配置方式如下:

ADD EXTRACT <name>, SOURCEISTABLE

Extract parameters:

RMTTASK REPLICAT, GROUP <name>

ADD REPLICAT <name>, SPECIALRUN

兩邊的 group name 要對應上

Direct bulk load (Replicat uses Oracle SQL*Loader API)

使用 Direct Initial Load 初始化 GoldenGate 同步資料

這種方式僅僅支援 Oracle 間的同步,同樣也不會落地檔案 Initial load replicat 程序直接調用 SQL*LOADER API進行資料入庫,複制端使用 bulkload 參數。

2.3. 初始化方式适用場景總結

使用 Direct Initial Load 初始化 GoldenGate 同步資料

實驗步驟

Direct Initial load 操作步驟較多,文章中僅對關鍵步驟進行講解說明詳細操作步驟可以通過以下連結下載下傳課程對應視訊:https://share.weiyun.com/f9e06940c89cb00785c7514a3f326d10

3.1 兩端同時建立表

3.2 模拟資料插入腳本 

SQLPLUS 下執行如下語句模拟不斷執行資料插入

3.3 源端程序配置

增加源端 CDC 程序

增加源端 CDC 程序配置檔案

增加源端的 INIT 程序

增加源端 INIT 程序配置檔案

3.4 目标端程序配置

增加目标端 CDC 程序

增加目标端 CDC 程序配置檔案

注意程序中關鍵的側參數 HANDLECOLLISIONS。

增加目标端 INIT 程序

增加目标端 INIT 程序配置檔案

3.5 同步過程

源端資料庫執行資料生成 SQL 語句

源端 OGG 啟動 CDC 捕獲程序

源端啟動 initialload 初始化程序

等待初始環境完成自動關閉後,目标端啟動 CDC 複制進

等待 CDC 複制程序執行的時間點超過初始化程序結束的時間點後,關閉複制端CDC 程序取消 HANDLECOLLISIONS 參數

4. Oracle To Oracle 初始化的關鍵注意點

確定能成功打開庫級和表級附加日志的

考慮是否配置 DDL 和序列的複制

初始化過程中源庫沒有 DDL 操作

如果用資料導入導出進行線上初始化,確定復原段不會失效

目标庫不能有引起資料變化的因素(觸發器、 job、級聯删除限制)

Scheduler:如果是導入導出進行初始化,源端中的非系統 scheduler 必須 disable,否則這些 Scheduler 會在導入後立刻自動運作;如果使用 RMAN 初始化資料,可以在目标重構過程中(open 之前)在目标上要 disable,可以在 upgrade 模式下 disable)

源端開始備份或者 EXP 的時候,確定這時 DB 中沒有 start_time 是在啟動 extract 程序之前的事務。

使用 Direct Initial Load 初始化 GoldenGate 同步資料

執行目标初始化過程中,必須保證做源端資料導出時,當時所有資料庫中交易是在 extract 啟動檢查點後才開始,否則這些交易在 extract 啟動檢查點前的部分資料将會丢失。

可以通過檢視 v$transaction 的 min(START_TIME) 應當大于 extract 開始時間來驗證在取 SCN 号時,先執行:select start_time from gv$transaction where to_date(start_time, ‘yyyy-mm-ddhh24:mi:ss’)<to_date(‘extract 啟動時間','yyyy-mm-dd hh24:mi:ss');通過該語句,如果找到比 extract 啟動時間早的事務需要等這些事務結束,才可以開始執行備份。

總結

本課程主要介紹了 Direct Initial load 在生産環境快速同步資料表有很高的效率,配合 CDC 程序完成一緻性的初始化,我們可以快速的在測試環境建構,資料裝載測試等各種環境很好的使用該功能。

另外在 OGG 初始化過程中注意文中提到的關鍵點,能夠在有效杜絕在初始化完成後 OGG 同步過程的資料不一緻問題。

原文釋出時間為:2018-03-5

本文作者:桑凱