本篇文章將延續《環境建置篇》完成的三台伺服器主機配置,實作基於自訂表格對映方法下的 Oracle 資料庫與 Microsoft SQL Server 之間的標準模式資料表同步抄寫,並且在不使用 LiveAudit 預設稽核模式下建立客製化的稽核欄位,整體架構如下圖所示。我們將沿用之前已建立的資料庫連線,新增一個包含自定義稽核欄位的訂閱任務,然後透過衍生表達式(Derived Expressions)建立一個可以正確記錄到毫秒的 TimeStamp 欄位。啟動訂閱任務後,在中控端主機執行 Python 程式,對 Oracle 資料庫中的 CREDIT_APP 資料表發動新增、修改與刪除等 SQL 操作,並觀察預設 &TIMSTAMP 日誌登載控制欄位和我們客製化稽核欄位之間的差異。
IBM Data Replication 是一套運用 Change Data Capture(CDC)即時資料同步抄寫技術,滿足企業經營管理高層即時商業性決策需求的有效工具。我們在《即時資料同步抄寫解決方案》文章中有介紹過,這個工具非常適合用於主機系統報表查詢外移、數據中台資料共享架構、混合雲資料庫即時同步、以及集中式主資料管理系統等四種常見的商業應用場景。無論是哪一種應用場景,IBM Data Replication(以下簡稱為 IDR)的核心技術就是快速且穩定地在異質資料庫之間進行異動資料的同步抄寫。
本系列文章將以 Oracle to SQL Server 為例,帶您逐步了解資料同步與抄寫的實作流程。在《環境建置篇》我們聚焦於整體實作環境所需的軟體安裝與設定,共分為來源端(Part 1)、目的端(Part 2)與中控端(Part 3)等三篇文章。《實作演練篇》則會詳細說明 IDR 如何因應各種常見使用場景的操作流程,共分為標準與稽核模式同步抄寫(Part 1)、自訂客製化稽核欄位(Part 2)、同步抄寫作業的停止與重新啟動(Part 3)以及同步抄寫作業監控與效能瓶頸分析(Part 4)等四篇文章,這些豐富地內容將可協助您快速掌握實務操作的技巧。
IDR CDC 資料同步抄寫實作《實作演練篇》Part 2:自訂客製化稽核欄位
1.配置自訂表格對映標準同步鏡映(Mirror)
首先,我們需要在管理主控台中新增一個自訂表格對映的標準同步鏡映(Mirror)抄寫訂閱(Subscription)。請切換至「配置」視圖,於「訂閱」頁籤中,點擊「建立新訂閱」按鈕。在「新建訂閱」視窗中,使用以下資訊建立一個新訂閱。
- 身分識別-名稱:ORCL_TO_SQL_3。
- 身分識別-說明:略過不填寫。
- 身分識別-專案:直接使用 預設專案。
- 資料儲存庫-來源:Oracle_Source。
- 資料儲存庫-目標:SQLSERVER_Target。
ORCL_TO_SQL_3 訂閱建立完成後,請點擊「是」進行資料表對映配置。
在「對映表格」視窗中,對映模式選擇「自訂表格對映」,對映類型選擇「標準」,點擊「下一步」按鈕,我們將建立一個可完全配置的一對一資料表對映配置。備註:選擇自訂表格對映才能自行新增目的端資料表的自訂欄位。
進入到「選取來源表格」步驟。請於來源表格清單中,展開 Oracle_Source > CREDIT_USER 資料庫,勾選 CREDIT_APP 資料表,點擊「下一步」按鈕。
接下來,我們需要在目的端 Microsoft SQL Server 中建立目標資料表,請在「目標表格」區段中,選取 SQLSERVER_Target > dbo,點擊「建立表格」按鈕。輸入表格名稱:CREDIT_APP_T,點擊「下一步」按鈕。
進入到「定義直欄」步驟,來源資料表的六個欄位會自動被帶入,我們可以開始新增另外四個自訂稽核欄位。請點擊「新增」按鈕,在「新增直欄」視窗中。直欄名稱輸入:AUDIT_TYPE;資料類型選擇:VARCHAR;長度/精準度輸入:20;不要勾選索引鍵;勾選可為空值。點擊「確定」按鈕。
繼續新增第二個自訂稽核欄位。請點擊「新增」按鈕,在「新增直欄」視窗中。直欄名稱輸入:AUDIT_USER;資料類型選擇:VARCHAR;長度/精準度輸入:20;不要勾選索引鍵;勾選可為空值。點擊「確定」按鈕。
為了比較預設 &TIMSTAMP 日誌登載控制欄位與 Column Function 中的 %CURTMSTP 取得當前系統時間功能的差異,我們將新增二個 AUDIT_TIME 欄位。請點擊「新增」按鈕,在「新增直欄」視窗中。直欄名稱輸入:AUDIT_TIME1;資料類型選擇:DATETIME2;長度/精準度輸入:7;不要勾選索引鍵;勾選可為空值。點擊「確定」按鈕。這個欄位將儲存 &TIMSTAMP 日誌登載控制欄位的內容。
繼續新增第二個 AUDIT_TIME 欄位。請點擊「新增」按鈕,在「新增直欄」視窗中。直欄名稱輸入:AUDIT_TIME2;資料類型選擇:VARCHAR;長度/精準度輸入:30;不要勾選索引鍵;勾選可為空值。點擊「確定」按鈕。這個欄位將以字串型別儲存 %CURTMSTP 功能的值。
我們需要的四個自訂稽核欄位定義完成後,點擊「下一步」按鈕。在「檢閱新表格」步驟,可以檢視 IDR 資料抄寫引擎自動產生的 CREATE TABLE 指令內容。請點擊「完成」按鈕。
待 IDR 資料抄寫引擎在目的端 Microsoft SQL Server 中新增目標資料表 CREDIT_APP_T 之後。我們可以點擊「是」按鈕,再次確認這個資料表的結構。
進入到「選取目標表格」步驟,選擇「CREDIT_APP_T」即可。點擊「下一步」按鈕。
接著在「指定索引鍵」步驟,僅勾選「SK_ID_CURR」將其指定為索引鍵。點擊「下一步」按鈕。
在「設定抄寫方法」步驟,請選擇「鏡映(Mirror or Change Data Capture)」讓 IDR 資料抄寫引擎即時將來源資料表的異動同步抄寫到目標資料表。點擊「下一步」按鈕。
完成鏡映(Mirror)訂閱任務的配置後,接著我們可以開始進行欄位對映配置,請點選「定義直欄對映」。點擊「完成」按鈕。
我們需要逐一完成 AUDIT_TYPE、AUDIT_USER、AUDIT_TIME1、AUDIT_TIME2 這四個目標直欄的來源對映。
首先,以滑鼠點選按住 Convert_Audit_Type 表示式名稱,直接拖曳到右方 AUDIT_TYPE 目標直欄的「來源」欄位。Convert_Audit_Type 也就是我們在上一個情境建立的表示式。
接著,將 &USER 日誌控制欄位作為 AUDIT_USER 的來源欄位。展開左方「日誌登載控制欄位」,滑鼠點選按住 &USER 欄位名稱,直接拖曳到右方 AUDIT_USER 目標直欄的「來源」欄位。
在「日誌登載控制欄位」清單中,滑鼠點選按住 &TIMESTAMP 欄位名稱,直接拖曳到右方 AUDIT_TIME1 目標直欄的「來源」欄位。
新增一個 Get_Timestamp 表示式(將 %CURTMSTP 轉型為字串),內容如下:
%TOCHAR(%CURTMSTP("*LOC"),26)。滑鼠點選按住 Get_Timestamp 名稱,直接拖曳到右方 AUDIT_TIME2 目標直欄的「來源」欄位。
完成 AUDIT_TYPE、AUDIT_USER、AUDIT_TIME1、AUDIT_TIME2 這四個目標直欄的來源對映後,請點擊「儲存」,完成客製化直欄對映。
2.啟動資料同步抄寫訂閱並觀察結果
到目前為止,我們已經使用 IDR 管理主控台完成了客製化一對一資料表對映配置的標準同步鏡映訂閱(ORCL_TO_SQL_3),接下來就可以開始啟動它,讓 IDR 資料抄寫引擎即時偵測 Oracle 資料庫發生的異動。請切換到「監視」視圖,從右方清單可以看到在預設專案中包含這個資料同步抄寫訂閱任務。
首先,請點擊選取 ORCL_TO_SQL_3 訂閱。開始啟動之前,先點擊下方「收集統計資料」按鈕,讓 IDR 資料抄寫引擎可以即時收集同步抄寫過程中的效能數據,方便我們後續進行分析。以滑鼠右鍵點擊 ORCL_TO_SQL_3 訂閱,於選單中點擊「開始鏡映」選項。
鏡映方法請點選「連續」,點擊「確定」按鈕,啟動 ORCL_TO_SQL_3 訂閱任務。
待 IDR 資料抄寫引擎完成「重新整理」工作後,確認 ORCL_TO_SQL_3 訂閱的狀態已變更為:連續鏡映,表示 IDR 資料抄寫引擎開始即時監控 Oracle 資料庫的交易日誌,並將 CREDIT_APP 資料表的異動抄寫到 SQL Server 中的 CREDIT_APP_T 資料表。
一切準備就緒,我們可以開始在中控端主機執行 Python 程式,對 Oracle 資料庫中的 CREDIT_APP 資料表發動新增、修改與刪除等 SQL 操作,觀察資料是否正確同步至 SQL Server,並且觀察預設 &TIMSTAMP 日誌登載控制欄位和我們客製化稽核欄位之間的差異。首先,可以先檢視 CREDIT_APP 來源資料表經重置後共有 100 筆資料,包含我們自訂義的四個 AUDIT 稽核欄位。其中,我們可以觀察到,在「重新整理」階段,AUDIT_TIME1 與 AUDIT_TIME2 這二個時間欄位均記錄到毫秒。
我們分別使用 Python 程式在來源端 CREDIT_APP 資料表中執行新增、修改、刪除資料等操作。目的端 Microsoft SQL Server 預期結果:初始資料 100 + 新增 2,000 – 刪除 1,000 = 1,100 筆資料。
下圖是 SQL Server 目標資料表的同步抄寫結果,除了總資料筆數符合預期之外,我們另外說明 AUDIT_TYPE 以及三個 TimeStamp 欄位的差異。
- AUDIT_TYPE:相較於 LiveAudit 模式會完整記錄異動資料的軌跡,Mirror 模式僅能記錄到 Insert 與 Update After 這二種異動操作,這是因為該模式不會記錄異動前的資料,因此 Update Before 與 Delete 等操作無法被記錄下來。
- LAST_UPDATED:在 Oracle 資料庫中執行異動操作的時間,也就是 Oracle 資料庫對 SQL 交易執行 COMMIT 的時間。
- AUDIT_TIME1(&TIMSTAMP):IDR 資料抄寫引擎確認來源端資料庫執行 COMMIT 的時間,因此這個欄位的內容與 LAST_UPDATED 相同,但 TimeStamp 的毫秒資料無法被正確記錄。
- AUDIT_TIME2(%CURTMSTP):IDR 資料抄寫引擎確認目的端資料庫執行 COMMIT 的時間,由於我們已將其轉換為字串型別,因此 TimeStamp 的毫秒資料可以被完整記錄。
完成這三個 SQL 操作,我們進一步檢視 IDR 資料同步抄寫的作業延遲與分析度量值。在「延遲」視窗中,可以知道這三個 SQL 操作的總作業延遲時間,最高為 2 秒、最低為 0 秒、平均值則為 1 秒。此外,在「活動」視窗可以清楚知道來源端與目的端包含新增(INSERT)、修改(UPDATE)、刪除(DELETE)等 SQL 操作的資料筆數與每秒處理交易筆數等分析數據。這裡除了可以確認來源端與目的端各項 SQL 操作的數量是否一致之外,還可以從每秒處理交易筆數評估來源端與目的端主機的處理性能。
補充資訊:有關 &TIMSTAMP 和 %CURTMSTP 之間的差異說明,請參閱《IIDR-CDC What is the difference between Journal Control Filed &TIMSTAMP and Function %CURTMSTP?》官方技術文章。
Part 1:標準與稽核模式同步抄寫 《 上一篇 ∣ 下一篇 》 Part 3:同步抄寫作業的停止與重新啟動
版權聲明
文章內容未經授權,請勿進行任何形式的複製、修改或發佈本文內容,如需轉載或引用,請在使用時注明出處並取得授權。本文中提及的特定公司、產品、品牌名稱等僅為描述目的,其版權歸屬於相應的公司或擁有者。
沒有留言:
張貼留言