2022年10月12日 星期三

10. Logdump

Logdump 是一個用來檢視 Trail File 內容的工具,在 OGG Home 目錄下直接執行 logdump 就可以使用。進入 logdump 之後就可以使用 open 指令來打開想檢視的 Trail File ,例如要檢視 R1000008 這個 Trail File 的內容 :

$ ./logdump

Logdump > ghdr on

Logdump > detail on

Logdump > open /opt/app/ogg/dirdat/R1000008

Logdump > n


ghdr on : 顯示 header 資訊。

detail on : 顯示欄位資訊。

open : 開啟 R1000008 這個 Trail File。

n (next) : 顯示下一筆資料。


開啟 Trail File 之後,一筆資料就可以看到它的表頭 (header) 與這筆資料的資訊 :


從這筆資料來看可以知道是一個 Insert 到 HR.TTT4 的操作,而且是 After Image 的資訊,左邊區塊是這筆資料的 Hex 數值,右邊是可顯示的 ASCII 格式。表頭部分有揭露此筆資料的所有屬性,說明如下 :


Hdr-Ind : 該值總是 E ,表示此 Trail File 是由 Extract 創建。


UndoFlag : 只有在 NonStop 系統上才會使用此數值,正常為 0 ,若為 1 則表示 Extract 需要撤銷已經抽取到的數據。


RecLength : Record Buffer 的大小,單位是 bytes 。


IOType : 表示此筆資料的操作類型,較常出現的有 3 – Delete 、 5 – Insert 、 10 – Update 。


TransInd : 表示此筆資料是屬於整個 Transaction 的哪一部份,總共會有四種狀態, x00 – 起始交易,這筆資料是屬於 Transaction 的第一筆紀錄 、 x01 – 這筆資料是屬於整個 Transaction 當中的某一筆紀錄 、 x02 – 結束交易,這筆資料是整個 Transaction 的最後一筆紀錄 、 x03 – 整個 Transaction 只有一筆資料時以 x03 表示。


SyskeyLen : 只有在 NonStop 系統上才會使用此數值,表示 NonStop 系統上 System Key 的長度,若沒有 System Key ,則此數值為 0 。


AuditRBA : 標示 Transaction commit 時,在交易日誌中所記錄的位址。


Continued : 只有 N 與 Y 兩個數值,如果為 Y 表示為大數據,需要多個數據區塊來組成,像是 BLOB 類型的數據,其餘則標示為 N。


Partition : 為 OGG 內部的一個標示,針對 Bulk Load 操作時,用來記錄來源端完成 Bulk Load 操作的數量,如果非 Bulk Load 操作,這個數值都會標記為 0 或 4 。


BeforeAfter : 用來標示此筆資料是屬於 Before Image 或是 After Image 。


IO Time : 用來標示交易 commit 時的時間。


OrigNode : 只有在 NonStop 系統上才會使用此數值,表示 Extract 所抽取資料的節點編號,其餘的情況則標示為 0 或 255 。


FormatType : 表示此資料是直接從資料庫中獲得 (F , Fetch From Database) 或是從交易日誌中獲得 (R , Readable in Transaction Log) 。


Incomplete : 此屬性從 OGG 10.4 的版本就已經不使用,保留下來是為了兼容舊版本。


AuditPos : 表示 Extract 是從 Transaction Log 中的哪一個位址把資料抽取出來。


RecCount : 表示處理 LOB 資料所使用的 Chunk 數量。


Logdump 有助於我們分析 Trail File 的內容,最簡易的方法就是直接使用 count 指令,透過 count 可以馬上知道這個 Trail File 裡面總共有多少筆資料的交易資訊 :


此外也可以透過 Filter 指令來搜尋某一個 Table 在這個 Trail File 裡面所有的交易資訊,例如搜尋 HR.TTT4 這個 Table 的所有交易 :

$ ./logdump

Logdump > ghdr on

Logdump > detail on

Logdump > open /opt/app/ogg/dirdat/R1000008

Logdump > filter include filename HR.TTT4

Logdump > filter match all

Logdump > n


使用 n (next) 就可以逐筆檢視與 HR.TTT4 相關的資料 :


透過 Logdump 檢視 Trail File 也可以用來讓 OGG 跳過這筆交易,例如從 report file 裡面顯示 Replicate Abend 在 R1000006 這個 Trail 的 rba 1415 ,如果要跳過這筆資料,那麼就可以利用 Logdump 打開 R1000006 並且定位到 1415 這個位址,然後使用 n 來檢視下一筆資料 :

$ ./logdump

Logdump > ghdr on

Logdump > detail on

Logdump > open /opt/app/ogg/dirdat/R1000006

Logdump > pos 1415

Logdump > n


可以看到 1415 下一個 rba 號碼為 1474 ,那麼我們就可以使用 alter 指令讓 Replicate 跳過 1415 ,從 1474 這筆資料再繼續同步下去 :

GGSCI> stop replicat r_hr1

GGSCI> alter replicat r_hr1, extseqno 6, extrba 1474

GGSCI> start replicat r_hr1


OGG 在一般情況下不太會需要來檢視 Trail File 的內容,不過在處理一些棘手的問題上,使用 Logdump 還是相當有幫助的。



沒有留言:

張貼留言