• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Oracle Logminer的數(shù)據(jù)同步技術(shù)研究

    2020-07-18 11:51:52湯學(xué)達(dá)桂文軍
    關(guān)鍵詞:數(shù)據(jù)表事務(wù)隊(duì)列

    ◆張 媛 湯學(xué)達(dá) 桂文軍

    (中國電子科技集團(tuán)公司第二十八研究所 江蘇 210007)

    隨著指揮信息系統(tǒng)的不斷發(fā)展和建設(shè),當(dāng)前各級指揮信息系統(tǒng)呈現(xiàn)物理位置分散、自成體系、數(shù)據(jù)不統(tǒng)一的特點(diǎn),為構(gòu)建邏輯上集中統(tǒng)一的指揮信息系統(tǒng)數(shù)據(jù)服務(wù)平臺,滿足各類業(yè)務(wù)應(yīng)用數(shù)據(jù)訪問需求,首先必須解決各級指揮信息系統(tǒng)之間的數(shù)據(jù)同步共享問題。本文結(jié)合現(xiàn)有指揮信息系統(tǒng)采用符合特定軍用傳輸協(xié)議的手段進(jìn)行信息交換的特點(diǎn),在深入研究Oracle目前商用同步技術(shù)的基礎(chǔ)上,提出了一種基于Oracle Logminer的數(shù)據(jù)同步方法,為在不同指揮信息系統(tǒng)之間保持共享數(shù)據(jù)一致性,確保不同信息系統(tǒng)在統(tǒng)一的共享數(shù)據(jù)視圖下工作提供了一種有效的解決途徑。

    1 數(shù)據(jù)庫同步技術(shù)

    (1)基于觸發(fā)器的數(shù)據(jù)同步技術(shù)

    在 ORACLE數(shù)據(jù)庫中,觸發(fā)器(Trigger)是存儲在數(shù)據(jù)庫中的過程。當(dāng)特定的某個(gè)事件(如對表或者視圖進(jìn)行插入、刪除或者修改)發(fā)生后,這個(gè)過程就會被觸發(fā)執(zhí)行?;谟|發(fā)器的數(shù)據(jù)同步技術(shù)的原理是在每一個(gè)同步對象表上創(chuàng)建增加、刪除、修改三種類型的觸發(fā)器,通過觸發(fā)器捕獲到同步對象表中的數(shù)據(jù)變更[1]。

    (2)基于物化視圖的數(shù)據(jù)同步技術(shù)

    物化視圖(Materialized View)又稱快照(Snapshot),是對現(xiàn)有數(shù)據(jù)表或者視圖查詢后的結(jié)果,物化視圖既保存了查詢語句,又保存了查詢后的結(jié)果集[2]。物化視圖的快速刷新是通過物化視圖日志實(shí)現(xiàn)的,物化視圖日志記錄了對應(yīng)的數(shù)據(jù)表的增加、刪除、修改等數(shù)據(jù)操作,定期刷新物化視圖,捕獲物化視圖日志的變化可以實(shí)現(xiàn)數(shù)據(jù)同步。

    (3)DataGuard數(shù)據(jù)同步技術(shù)

    DataGuard是Oracle推出的一種可用性高的數(shù)據(jù)庫方案,它是在主節(jié)點(diǎn)和備用節(jié)點(diǎn)間通過日志同步來保證數(shù)據(jù)庫一對一的整體復(fù)制[3]。DataGuard提供了三種數(shù)據(jù)保護(hù)模式:最大性能模式、最大保護(hù)模式和最大可用模式。最大性能模式可以實(shí)現(xiàn)在不影響源數(shù)據(jù)庫性能的基礎(chǔ)上最大限度提高數(shù)據(jù)保護(hù)等級;最大保護(hù)模式可以確保數(shù)據(jù)不丟失,但會影響數(shù)據(jù)庫的可用性;最大可用模式在不影響源數(shù)據(jù)庫使用性能的條件下盡可能提高數(shù)據(jù)保護(hù)等級。

    (4)Streams數(shù)據(jù)同步技術(shù)

    Streams是Oracle為提高數(shù)據(jù)庫的高可用性和數(shù)據(jù)的分發(fā)共享功能而設(shè)計(jì)的,在 Oracle 9i之前這個(gè)功能被稱為 Advance Replication(高級復(fù)制)[4]。Streams采用高級隊(duì)列技術(shù)將歸檔日志解析成DDL及DML語句,實(shí)現(xiàn)數(shù)據(jù)庫之間的同步[5]。Streams具有較好的靈活性,在復(fù)制數(shù)據(jù)的同時(shí),不影響數(shù)據(jù)庫其他操作的運(yùn)行,支持一對多、雙向復(fù)制等多種復(fù)制方式,但Streams技術(shù)存在一定的數(shù)據(jù)局限性,并不能完全支持所有的數(shù)據(jù)類型和對象,而且Streams數(shù)據(jù)同步技術(shù)維護(hù)起來有一定的難度。

    2 Logminer技術(shù)介紹

    2.1 Logminer功能

    在Oracle數(shù)據(jù)庫中,所有對數(shù)據(jù)庫進(jìn)行的更改操作都被記錄到重做日志文件和歸檔日志文件中,日志文件可用于數(shù)據(jù)庫的恢復(fù)。但Oracle 8i以前這些日志文件內(nèi)容不能直接閱讀,使用一般的閱讀工具查看到的都是亂碼,Oracle 8i中首次提供了一個(gè)內(nèi)置的分析工具——Logminer(日志挖掘),使用Logminer工具,DBA可以對數(shù)據(jù)庫的日志進(jìn)行分析[6]。Logminer具有以下優(yōu)點(diǎn):(1)實(shí)現(xiàn)事務(wù)級、細(xì)粒度的數(shù)據(jù)庫恢復(fù),通過執(zhí)行相應(yīng)的 UNDO操作取消用戶執(zhí)行的錯(cuò)誤操作;(2)實(shí)現(xiàn)事后審計(jì),利用Logminer的分析結(jié)果,可以追蹤在數(shù)據(jù)庫上執(zhí)行的所有DML和DDL操作,取得這些操作的執(zhí)行者、執(zhí)行時(shí)間等重要信息;(3)優(yōu)化和擴(kuò)容,利用分析結(jié)果獲取數(shù)據(jù)的增長模式實(shí)現(xiàn)優(yōu)化和擴(kuò)容[7]。

    2.2 Logminer基本組成

    (1)源數(shù)據(jù)庫

    源數(shù)據(jù)庫(Source Database)為要被分析的數(shù)據(jù)庫,Logminer工具要添加的日志文件來源于此數(shù)據(jù)庫。

    分析數(shù)據(jù)庫

    分析數(shù)據(jù)庫(Mining Database)是用來執(zhí)行Logminer的數(shù)據(jù)庫,實(shí)際操作中要求它與源數(shù)據(jù)庫處于相同的硬件平臺,具有相同的字符集且版本不能低于源數(shù)據(jù)庫,源數(shù)據(jù)庫和分析數(shù)據(jù)庫可以是同一個(gè)數(shù)據(jù)庫。

    (3)Logminer字典

    Logminer字典是Oracle提供的一個(gè)將內(nèi)部的數(shù)據(jù)庫對象ID和數(shù)據(jù)類型、二進(jìn)制字段值翻譯為一般用戶能正常理解使用的數(shù)據(jù)庫對象名、數(shù)據(jù)類型及字段值的工具。

    Logminer分析工具包是由一組PL/SQL包和一些動態(tài)視圖組成。其中用于建立程序包的2個(gè)PL/SQL文件分別為dbmslm.sql和 dbmslmd.sql,與分析相關(guān)的 4個(gè)動態(tài)視圖是v$logmnr_dictionary、v$logmnr_parameters、v$logmnr_logs 和v$logmnr_contents。v$logmnr_dictionary提供了Logminer可使用的數(shù)據(jù)字典信息,v$logmnr_parameter保存了當(dāng)前Logminer所設(shè)定的限制參數(shù)信息,查看v$logmnr_logs可以獲取當(dāng)前用于分析的日志列表,v$logmnr_contents記錄的是日志分析結(jié)果的原子操作[8]。

    3 利用Logminer進(jìn)行實(shí)時(shí)同步的設(shè)計(jì)實(shí)現(xiàn)

    3.1 基于Logminer的數(shù)據(jù)同步原理

    在圖1中,源數(shù)據(jù)庫中有數(shù)據(jù)表A,目的數(shù)據(jù)庫中有數(shù)據(jù)表B,表A和表B的結(jié)構(gòu)相同,當(dāng)數(shù)據(jù)表A中的數(shù)據(jù)發(fā)生變化時(shí),數(shù)據(jù)表B也同步變化,保證B表和A表中的數(shù)據(jù)始終保持一致,基于Logminer數(shù)據(jù)同步的基本原理描述如下:

    (1)在源數(shù)據(jù)庫中,用戶或者應(yīng)用程序?qū)?shù)據(jù)表A進(jìn)行了增加、刪除或者修改操作,表A的數(shù)據(jù)發(fā)生變化;

    (2)數(shù)據(jù)表 A的變化記錄到 Oracle重做日志中,通過Logminer工具解析該時(shí)間段內(nèi)的重做日志并將分析結(jié)果存入本地的事務(wù)隊(duì)列中;

    (3)采用符合特定軍用傳輸協(xié)議的手段將本地的事務(wù)隊(duì)列傳送到遠(yuǎn)端;

    (4)遠(yuǎn)端目的數(shù)據(jù)庫定時(shí)將事務(wù)隊(duì)列入庫,對數(shù)據(jù)表B進(jìn)行同步更新。

    由于Oracle重做日志記錄了在數(shù)據(jù)庫中執(zhí)行的任何操作,日志量大且內(nèi)容豐富,為提高日志解析效率,采用定時(shí)捕獲日志變化的方式,基于Oracle內(nèi)部的時(shí)鐘機(jī)制,解析Oracle日志,獲取變更增量,同步應(yīng)用于目的數(shù)據(jù)庫中。

    圖1 基于Logminer的數(shù)據(jù)同步原理示意圖

    4.2 基于Logminer的數(shù)據(jù)同步流程設(shè)計(jì)

    (1)核心數(shù)據(jù)結(jié)構(gòu)

    在數(shù)據(jù)同步的過程中涉及的主要數(shù)據(jù)結(jié)構(gòu)包括同步節(jié)點(diǎn)結(jié)構(gòu)、節(jié)點(diǎn)信息結(jié)構(gòu)、資源同步策略結(jié)構(gòu)等。

    1)同步節(jié)點(diǎn)結(jié)構(gòu)

    定義同步節(jié)點(diǎn)結(jié)構(gòu) SynNode(int rSynPolicyID,int rLocalNodeID,int rDestNodeID,int rRank),其中rSynPolicyID為同步策略標(biāo)識,用來關(guān)聯(lián)資源同步策略;rLocalNodeID為本地節(jié)點(diǎn)標(biāo)識,唯一標(biāo)識業(yè)務(wù)訪問所在節(jié)點(diǎn)的編碼;rDestNodeID為目的節(jié)點(diǎn)標(biāo)識,唯一標(biāo)識待同步的目的節(jié)點(diǎn)編碼;rRank為同步優(yōu)先級。

    定義節(jié)點(diǎn)信息結(jié)構(gòu)NodeInfo(int rNodeId;char rHostname[];char rIP[];char rDbType[];char rDbSid[])保存各同步節(jié)點(diǎn)的信息,其中rNodeId表示節(jié)點(diǎn)標(biāo)識,rHostname表示主機(jī)名,rIP表示主機(jī)IP,rDbType表示數(shù)據(jù)庫類型,rDbSid表示數(shù)據(jù)庫實(shí)例。

    3)資源同步策略結(jié)構(gòu)

    定義資源同步策略結(jié)構(gòu)SynDefMain(int rSynPolicyID, char rPolicyName [],int rNodetype, int rIsSyn, int rChangeOpr, int rSysMode, int rInitSyn),其中rSynPolicyID為同步策略標(biāo)識,唯一標(biāo)識資源的同步策略;rPolicyName表示同步策略名稱;rNodetype表示業(yè)務(wù)訪問所屬節(jié)點(diǎn)類型;rIsSyn為同步標(biāo)志,有不同步和同步兩種;rChangeOpr為變更操作類型,0代表全部,1代表增加,2代表刪除,3代表修改,4代表提交,5代表回滾;rSysMode為同步方式,包括同步或異步;rInitSyn為初始同步標(biāo)志,初始數(shù)據(jù)需要同步或者不同步。

    (2)功能模塊與劃分

    基于 Logminer的數(shù)據(jù)同步的主要功能模塊包括日志變更捕獲模塊、網(wǎng)絡(luò)傳輸模塊和事務(wù)隊(duì)列同步模塊三大模塊。

    ①日志變更捕獲模塊

    日志變更捕獲模塊的功能是按周期定時(shí)掃描 Oracle重做日志文件的內(nèi)容,捕獲用戶關(guān)心的數(shù)據(jù)庫表的變更,并將捕獲結(jié)果存入待同步的事務(wù)隊(duì)列中。變更捕獲的周期以及需要同步的數(shù)據(jù)庫表可作為同步策略進(jìn)行配置。

    在此之前,需進(jìn)行相關(guān)配置。首先以SYS用戶運(yùn)行以下兩個(gè)腳本:

    胎架制作→H型鋼梁的定位拼裝→校正→檢驗(yàn)→對接焊縫焊接→焊后校正→方鋼管上弦桿和腹桿的拼裝→焊縫焊接→焊后校正→監(jiān)理工程師檢查驗(yàn)收→涂裝→檢驗(yàn)合格。

    SQL>@$ORACLE_HOME dbmsadmindbmslm.sql;

    SQL>@$ORACLE_HOME dbmsadmindbmslmd.sql;

    第一個(gè)腳本用來創(chuàng)建DBMS_LOGMNR包,用于分析日志文件,第二個(gè)腳本用來創(chuàng)建 DBMS_LOGMNR_D包,用于創(chuàng)建數(shù)據(jù)字典。與此同時(shí)開啟補(bǔ)充日志的功能,增加重做日志記錄中變更矢量記載的記錄量,支持 Logminer工具包對更新操作(UPDATE)的分析:

    SQL>alter database add supplemental log data;

    配置完成后,具體的設(shè)計(jì)實(shí)現(xiàn)步驟如下:

    第一步:獲取源數(shù)據(jù)庫中當(dāng)前重做日志文件的路徑,將其添加到本次日志分析過程中:

    SQL>exec

    dbms_logmnr.add_logfile(‘filename’,dbms_logmnr.new|dbms_l

    ogmnr.addfile);

    第二步:查詢系統(tǒng)最新的scn號作為本次日志分析過程的結(jié)束scn號,將上次掃描的結(jié)束scn號加1作為本次日志分析過程的起始scn號,開啟日志分析過程:

    Startscn:=lastEndscn+1;

    Endscn:=currentScn;

    SQL>exec dbms_logmnr.start_logmnr(startscn,endscn,option);

    其中option有以下幾個(gè)選項(xiàng):NO_SQL_DELIMITER:重建的SQL語句內(nèi)不使用分號,COMMITTED_DATA_ONLY:只有被提交的事務(wù)才被顯示在 V$LOGMNR_CONTENTS視圖內(nèi),NO_ROWID_IN_STMT:在SQL_REDO和SQL_UNDO列內(nèi)不列出ROWID子句等。

    第三步:分析重做日志,從動態(tài)性能視圖v$logmnr_contents中過濾出用戶關(guān)心的操作記錄,處理這些操作記錄,使其變成適合入庫的標(biāo)準(zhǔn)sql語句,并將這些標(biāo)準(zhǔn)sql語句存入事務(wù)隊(duì)列中:

    SQL>select sql_redo from v$logmnr_contents where seg_owner= ‘schema’ and seg_name=‘table_name’ and operation in‘INSERT’,‘UPDATE’,‘DELETE’);

    第四步:結(jié)束本次分析過程,等待下一次周期,繼續(xù)循環(huán)日志分析過程。

    SQL>exec dbms_logmnr.end_logmnr();

    其中第二步提到的scn(系統(tǒng)改變號,system change number)是數(shù)據(jù)庫中一個(gè)非常重要的數(shù)據(jù)結(jié)構(gòu),它定義了數(shù)據(jù)庫在某個(gè)確切時(shí)刻提交的版本,每當(dāng)事務(wù)提交時(shí),都會被賦予一個(gè)惟一標(biāo)識事務(wù)的scn,scn提供Oracle內(nèi)部時(shí)鐘機(jī)制,可看作數(shù)據(jù)庫的邏輯時(shí)鐘。每次循環(huán)都是以上一次分析結(jié)束的scn號加1作為本次分析開始的scn號,這樣可以保證scn區(qū)間的連續(xù)性,確保分析過程中用戶的操作不丟失,不遺漏。

    圖2為采用Logminer進(jìn)行日志變更捕獲的流程。如果重做日志文件設(shè)置的比較小,而用戶的某個(gè)事務(wù)操作規(guī)模比較大,數(shù)據(jù)庫又沒有開啟歸檔模式,此時(shí)可能會出現(xiàn)重做日志被覆蓋,部分日志丟失的情況。為了避免這種情況發(fā)生,可以考慮開啟數(shù)據(jù)庫歸檔模式,在發(fā)生重做日志文件被覆蓋的情況時(shí),依據(jù)初始化參數(shù)文件中參數(shù)log_archive_dest_n的值找到oracle歸檔文件的目錄,并將被覆蓋的一個(gè)或幾個(gè)日志文件添加到日志分析過程中,保證日志分析的連續(xù)性和完整性。從原理上來說開啟了數(shù)據(jù)庫歸檔模式就能確保數(shù)據(jù)庫的任何操作不會丟失,但是開啟數(shù)據(jù)庫歸檔模式在實(shí)際應(yīng)用也不十分可行,因?yàn)殚_啟了歸檔模式后,歸檔日志會不斷增加,若沒有人定期維護(hù),硬盤空間就會逐漸填滿。在實(shí)際應(yīng)用中可以考慮采用非歸檔模式,將日志文件設(shè)置的盡可能大一點(diǎn),確保一定規(guī)模的事務(wù)操作不會導(dǎo)致數(shù)據(jù)庫重做日志文件被覆蓋,數(shù)據(jù)庫操作記錄不會丟失。

    ②網(wǎng)絡(luò)傳輸模塊

    該模塊的主要功能是采用符合特定軍用傳輸協(xié)議的網(wǎng)絡(luò)傳輸手段對事務(wù)隊(duì)列進(jìn)行發(fā)送和接收,作為溝通日志變更捕獲模塊和事務(wù)隊(duì)列同步模塊的橋梁。

    ③事務(wù)隊(duì)列同步模塊

    該模塊的主要功能是將傳輸?shù)侥康臄?shù)據(jù)庫上的事務(wù)隊(duì)列有序入庫,完成對目的數(shù)據(jù)庫相應(yīng)庫表的同步更新,保證源端和目的端庫表內(nèi)容一致。按照事務(wù)隊(duì)列先進(jìn)先出的特點(diǎn),選擇時(shí)間最早的未入庫事務(wù)進(jìn)行入庫,并將執(zhí)行情況寫入對應(yīng)的同步日志表中,若事務(wù)執(zhí)行失敗,還需記錄失敗的原因、oracle錯(cuò)誤號等信息,同時(shí)將本次數(shù)據(jù)同步的情況反饋給源端數(shù)據(jù)庫。

    圖2 掃描分析oracle重做日志文件的主要流程

    4 結(jié)束語

    本文通過對 Oracle Logminer工具的使用和研究,提出了一種解決各級指揮信息系統(tǒng)同構(gòu)數(shù)據(jù)庫之間數(shù)據(jù)同步共享問題的新思路。Logminer主要用于數(shù)據(jù)庫的恢復(fù),被喻為DBA一劑最好用的“后悔藥”,本文充分利用Logminer解析Oracle重做日志的特點(diǎn),基于Oracle內(nèi)部時(shí)鐘機(jī)制設(shè)計(jì)了日志變更捕獲模塊,定時(shí)捕獲數(shù)據(jù)庫表的變更,通過網(wǎng)絡(luò)傳輸模塊,在遠(yuǎn)端數(shù)據(jù)庫進(jìn)行同步更新。項(xiàng)目實(shí)踐證明這種同步方法可以簡便、有效、可靠的實(shí)現(xiàn)不同節(jié)點(diǎn)數(shù)據(jù)庫表的同步,具有很好的實(shí)用價(jià)值。

    猜你喜歡
    數(shù)據(jù)表事務(wù)隊(duì)列
    “事物”與“事務(wù)”
    基于分布式事務(wù)的門架數(shù)據(jù)處理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
    河湖事務(wù)
    隊(duì)列里的小秘密
    基于多隊(duì)列切換的SDN擁塞控制*
    軟件(2020年3期)2020-04-20 00:58:44
    湖北省新冠肺炎疫情數(shù)據(jù)表
    黨員生活(2020年2期)2020-04-17 09:56:30
    在隊(duì)列里
    基于列控工程數(shù)據(jù)表建立線路拓?fù)潢P(guān)系的研究
    豐田加速駛?cè)胱詣玉{駛隊(duì)列
    圖表
    庆安县| 莱芜市| 灯塔市| 阿图什市| 南投县| 洮南市| 施甸县| 临桂县| 德保县| 三台县| 彩票| 广灵县| 临泉县| 巫山县| 邹平县| 江山市| 商河县| 商城县| 闸北区| 北海市| 彭泽县| 安丘市| 余干县| 孝感市| 宝应县| 洞头县| 五台县| 宝坻区| 海原县| 文水县| 金塔县| 富顺县| 淮滨县| 耒阳市| 佛学| 昭通市| 商水县| 尖扎县| 安仁县| 房山区| 宁化县|