一種關(guān)系數(shù)據(jù)庫前映像的附加日志解析模型研究
0 引言
“十三五”期間國家電網(wǎng)公司制定了“一系統(tǒng)、一平臺、多應(yīng)用、微服務(wù)”的信息化規(guī)劃,公司數(shù)據(jù)統(tǒng)一訪問共享、流通是公司信息化工作的重點[1-2]。當(dāng)前公司各類數(shù)據(jù)在抽取交互過程中,使用了較多的Goldengate產(chǎn)品[3-4],由于數(shù)據(jù)庫抽取產(chǎn)品直接讀取生產(chǎn)系統(tǒng)數(shù)據(jù),產(chǎn)品無法自主可控,存在嚴(yán)重的信息安全隱患[5-7],如何解決數(shù)據(jù)抽取過程中變化數(shù)據(jù)的定位,是當(dāng)前面臨的一個難點。當(dāng)前工具應(yīng)用最廣泛的是基于邏輯級的數(shù)據(jù)庫抽取技術(shù)[8-10],由于數(shù)據(jù)庫抽取技術(shù)一直是國外數(shù)據(jù)庫廠商的核心技術(shù),國內(nèi)廠商尚未完全掌握技術(shù)實現(xiàn)細(xì)節(jié),在此類技術(shù)上國外技術(shù)封鎖重重,鮮有技術(shù)細(xì)節(jié)披露[11-12]。針對上述問題,更加說明數(shù)據(jù)庫抽取技術(shù)值得深入研究探討。
1 Oracle數(shù)據(jù)庫前映像Undo數(shù)據(jù)解析原理
1.1 Undo日志文件解析流程
Oracle數(shù)據(jù)庫Undo日志中詳細(xì)記錄了數(shù)據(jù)庫操作的所有變化前的備份信息[13-14],Undo日志記錄所有的前印象,用于回滾操作,Undo日志有嚴(yán)格的格式與內(nèi)部規(guī)律,但由于Oracle數(shù)據(jù)庫廠商的技術(shù)壁壘,無法直接獲取相關(guān)資料[15],在Undo日志分析方法上,采用硬解析方式。即先模擬一次數(shù)據(jù)庫操作,找到對應(yīng)操作的trace文件,再用數(shù)據(jù)庫塊瀏覽編輯器(Block Browser and Editor,BBED)等塊讀取工具讀取對應(yīng)的數(shù)據(jù)塊[16],通過trace文件注釋與二進(jìn)制數(shù)據(jù)塊結(jié)合進(jìn)行解析,找出其中的格式與規(guī)律流程。Undo日志解析方法如
1.2 追蹤文件解析
追蹤文件(Trace file)是以trc為后綴的文本文件,記錄了各種SQL操作及所消耗的時間等。根據(jù)追蹤文件可以查詢到詳細(xì)的數(shù)據(jù)庫操作過程,包括SEQ、SCN、KDO、OPCode等詳細(xì)的事務(wù)過程信息。具體追蹤文件內(nèi)容如
通過追蹤文件中的內(nèi)容,可以依次推理出數(shù)據(jù)庫每一種操作碼對應(yīng)的標(biāo)記位以及對應(yīng)的執(zhí)行過程內(nèi)容,為下一步抽取有效操作內(nèi)容奠定基礎(chǔ)。
1.3 Undo 數(shù)據(jù)塊文件解析
利用Oracle內(nèi)部工具數(shù)據(jù)庫塊瀏覽編輯器(BBED)可以直接查看和修改日志數(shù)據(jù)塊文件。通過BBED工具DUMP日志文件塊查看Oracle內(nèi)部Undo日志塊內(nèi)容,如
1.4 Undo 日志文件結(jié)構(gòu)
通過分析追蹤文件,將追蹤文件內(nèi)容與Undo數(shù)據(jù)塊與十六進(jìn)制數(shù)據(jù)塊相匹配,分析解讀Undo日志格式,經(jīng)過多次比對,推斷出Redo日志文件結(jié)構(gòu)。
Redo日志由操作系統(tǒng)頭(OS Head Block)、Undo頭標(biāo)記段(Undo Head Block)與Undo數(shù)據(jù)塊(Undo Data Block)3種類型數(shù)據(jù)塊組成。其中操作系統(tǒng)頭位于第一個塊,Undo頭標(biāo)記段位于第二個塊,從第三塊開始為Undo數(shù)據(jù)塊。Undo日志文件結(jié)構(gòu)如
日志文件通常使用操作系統(tǒng)的塊大小,一般為512 B,Redo Logs循環(huán)寫。日志格式依賴于操作系統(tǒng)與數(shù)據(jù)庫版本,一般是由日志文件頭(Redo Logs Header)以及后面的日志記錄(Redo Record)組成,日志記錄同樣由記錄頭(Record Header)以及多個日志操作(Redo Change)組成;數(shù)據(jù)庫的許多變化都放在記錄(Record)中,記錄可以大于一個塊,也可以小于一個塊,記錄的大小和數(shù)據(jù)庫的塊大小有關(guān),默認(rèn)情況下最大的記錄是3個數(shù)據(jù)塊。記錄是Redo日志中表示數(shù)據(jù)庫操作的一個原子單位,每個Redo記錄包含每個Change所需的Undo信息。
2 前映像數(shù)據(jù)抽取模型
Oracle數(shù)據(jù)庫Undo日志抽取技術(shù)主要包括物理數(shù)據(jù)塊Block處理、數(shù)據(jù)抽取引擎設(shè)計兩大部分。本文將對數(shù)據(jù)抽取技術(shù)進(jìn)行詳細(xì)闡述。
2.1 Undo KDO結(jié)構(gòu)
前映像日志的 KDO結(jié)構(gòu)記錄數(shù)據(jù)變化關(guān)鍵信息,利用Oracle內(nèi)部工具BBED可以直接查看和修改KDO數(shù)據(jù)。通過BBED工具DUMP日志文件塊查看Oracle內(nèi)部Undo日志塊內(nèi)部KDO結(jié)構(gòu)(見
2.2 數(shù)據(jù)抽取引擎流程設(shè)計
在確定KDO結(jié)構(gòu)后,對前映像日志數(shù)據(jù)塊內(nèi)容進(jìn)行具體解析。針對前映像數(shù)據(jù)塊內(nèi)部結(jié)構(gòu)特點,本文設(shè)計了日志數(shù)據(jù)抽取引擎,通過獲取數(shù)據(jù)庫版本信息、解析前映像的change第4塊中的KDO數(shù)據(jù),提取其中的操作碼;根據(jù)不同的操作碼采用不同的解析方式,獲取附加日志數(shù)據(jù)塊編號;根據(jù)附加日志結(jié)構(gòu),獲取附加日志內(nèi)部的主鍵列數(shù)據(jù);將獲取的主鍵列數(shù)據(jù)依次添加到改變列數(shù)據(jù)中。前映像數(shù)據(jù)抽取引擎如
主要流程描述如下:
1)初始化UndoReader、數(shù)據(jù)庫連接,獲取當(dāng)前日志文件路徑;
2)根據(jù)具體情況,打開存放在文件系統(tǒng)、裸設(shè)備、ASM上的日志文件;
3)根據(jù)KDO公共結(jié)構(gòu)解析change第4塊中的KDO數(shù)據(jù);
4)根據(jù)opKDO確定是哪一類DML操作,如果是INSERT操作,則進(jìn)入步驟5),如果是UPDATE操作,則執(zhí)行步驟8),如果是DELETE操作,則執(zhí)行步驟13);
6)根據(jù)INSERT特定的KDO結(jié)構(gòu)解析change第4塊中余下KDO數(shù)據(jù);
7)從第5塊開始根據(jù)改變列數(shù)量(KDO.cc)讀取各列的值;
8)計算附加日志開始change數(shù)據(jù)塊編號index,然后執(zhí)行步驟15);
9)根據(jù)UPDATE特定的KDO結(jié)構(gòu)解析change第4塊中余下KDO數(shù)據(jù);
10)從第5塊數(shù)據(jù)中獲取改變的列編號,每兩位一個;
11)從第5塊數(shù)據(jù)中獲取改變的列編號,每兩位一個,返回改變列號list;
12)從change第6塊數(shù)據(jù)開始,根據(jù)KDO.nchanged,逐個解析,獲得列數(shù)據(jù),column id與改變列號list對應(yīng);
13)獲取附加日志開始change數(shù)據(jù)塊編號index,然后執(zhí)行步驟15);
14)opcode 為delete,無剩余KDO數(shù)據(jù);
15)獲取附加日志開始change數(shù)據(jù)塊編號index = 5;
16)根據(jù)index在change的第index塊中解析附加日志結(jié)構(gòu);
17)設(shè)置附加日志標(biāo)志信息、開始列信息;
18)從change的index+1塊中讀取主鍵的列id(此id從1而非0開始),得到列號index;
19)從change第index+3塊數(shù)據(jù)開始,根據(jù)opSupplemental.totalCols,逐個解析,獲得主鍵列數(shù)據(jù),column id與列號list對應(yīng);
20)添加到之前的改變列數(shù)據(jù)list中,然后重新繼續(xù)新的數(shù)據(jù)抽取。
3 測試結(jié)果與分析
為驗證前映像數(shù)據(jù)抽取模型的可行性,搭建如
測試源端數(shù)據(jù)庫執(zhí)行DML操作時,數(shù)據(jù)抽取記錄如
從
統(tǒng)計結(jié)果表明本文設(shè)計的前映像數(shù)據(jù)復(fù)制模型可以從Undo日志中抽取出變化附加日志信息,將抽取后的數(shù)據(jù)與源數(shù)據(jù)庫信息進(jìn)行比對,驗證了抽取數(shù)據(jù)的完整性,進(jìn)一步說明復(fù)制模型具有一定的工程應(yīng)用價值。
4 結(jié)語
數(shù)據(jù)庫前映像數(shù)據(jù)抽取是數(shù)據(jù)復(fù)制領(lǐng)域中的關(guān)鍵技術(shù),當(dāng)前業(yè)界主要是以goldenGate為代表的邏輯級數(shù)據(jù)庫日志抽取產(chǎn)品。本文設(shè)計了一種高效的數(shù)據(jù)抽取模型,測試結(jié)果證明該模型具有較好的實用價值。下一步將針對復(fù)雜混合云環(huán)境下分布式數(shù)據(jù)庫前映像數(shù)據(jù)抽取技術(shù)進(jìn)行研究,完善數(shù)據(jù)抽取模型,更好的支撐智能電網(wǎng)建設(shè)。
責(zé)任編輯:售電衡衡
-
權(quán)威發(fā)布 | 新能源汽車產(chǎn)業(yè)頂層設(shè)計落地:鼓勵“光儲充放”,有序推進(jìn)氫燃料供給體系建設(shè)
2020-11-03新能源,汽車,產(chǎn)業(yè),設(shè)計 -
中國自主研制的“人造太陽”重力支撐設(shè)備正式啟運
2020-09-14核聚變,ITER,核電 -
探索 | 既耗能又可供能的數(shù)據(jù)中心 打造融合型綜合能源系統(tǒng)
2020-06-16綜合能源服務(wù),新能源消納,能源互聯(lián)網(wǎng)
-
新基建助推 數(shù)據(jù)中心建設(shè)將迎爆發(fā)期
2020-06-16數(shù)據(jù)中心,能源互聯(lián)網(wǎng),電力新基建 -
泛在電力物聯(lián)網(wǎng)建設(shè)下看電網(wǎng)企業(yè)數(shù)據(jù)變現(xiàn)之路
2019-11-12泛在電力物聯(lián)網(wǎng) -
泛在電力物聯(lián)網(wǎng)建設(shè)典型實踐案例
2019-10-15泛在電力物聯(lián)網(wǎng)案例
-
新基建之充電樁“火”了 想進(jìn)這個行業(yè)要“心里有底”
2020-06-16充電樁,充電基礎(chǔ)設(shè)施,電力新基建 -
燃料電池汽車駛?cè)雽こ0傩占疫€要多久?
-
備戰(zhàn)全面電動化 多部委及央企“定調(diào)”充電樁配套節(jié)奏
-
權(quán)威發(fā)布 | 新能源汽車產(chǎn)業(yè)頂層設(shè)計落地:鼓勵“光儲充放”,有序推進(jìn)氫燃料供給體系建設(shè)
2020-11-03新能源,汽車,產(chǎn)業(yè),設(shè)計 -
中國自主研制的“人造太陽”重力支撐設(shè)備正式啟運
2020-09-14核聚變,ITER,核電 -
能源革命和電改政策紅利將長期助力儲能行業(yè)發(fā)展
-
探索 | 既耗能又可供能的數(shù)據(jù)中心 打造融合型綜合能源系統(tǒng)
2020-06-16綜合能源服務(wù),新能源消納,能源互聯(lián)網(wǎng) -
5G新基建助力智能電網(wǎng)發(fā)展
2020-06-125G,智能電網(wǎng),配電網(wǎng) -
從智能電網(wǎng)到智能城市