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

    Oracle streams雙庫同步的沖突處理方法

    2018-03-23 11:59:34顧鵬程
    電子技術(shù)與軟件工程 2018年4期

    顧鵬程

    摘 要Oracle Streams是Oracle官方提供的一種免費、靈活的數(shù)據(jù)庫同步機制,只需通過配置官方的存儲過程即可部署。由沖突事務(wù)導(dǎo)致的穩(wěn)定性不足,是Streams部署中最難以處理的問題。Oracle建議的常規(guī)的沖突處理方法需要按表綁定存儲過程,不利于處理新表沖突,其提供的自定義沖突處理存儲過程功能較為簡單,適用性低。本文針對Streams雙向同步中常見的沖突,提出一種不需要綁定表且具有一般適用性的沖突處理部署方法,能夠自動化處理錯誤事務(wù),實驗證明該方法具備一定的可靠性。

    【關(guān)鍵詞】Oracle Streams 沖突處理 錯誤事務(wù)

    Oracle Streams 是 Oracle提供的流復(fù)制技術(shù),可以實現(xiàn)數(shù)據(jù)容災(zāi)和數(shù)據(jù)共享。其基本思想來源于 Oracle 高級隊列,是其應(yīng)用的延伸,它還可以傳遞消息隊列,具有免費、靈活的優(yōu)勢。其缺點是穩(wěn)定性差。在生產(chǎn)實踐中,主要發(fā)現(xiàn)有兩種沖突影響Streams同步,分別為刪除沖突和更新沖突,均由被修改行在目標(biāo)數(shù)據(jù)庫找不到對應(yīng)記錄導(dǎo)致。

    對于刪除沖突,一般Oracle建議采取對目標(biāo)行標(biāo)記的方法,但這會導(dǎo)致兩個數(shù)據(jù)庫不一致。對于更新沖突,Oracle提供了預(yù)置的自動存儲過程來作簡單的處理。該存儲過程需要指定參數(shù)表名、方法名等,配置繁瑣。此外,Oracle還提供自定義存儲過程來配置刪除或更新沖突。該方法需要指定表名以及對應(yīng)的存儲過程,需要對每張表進(jìn)行設(shè)定,這不利于對新增表的維護(hù)。對于這些問題,本文提出一種結(jié)合Oracle定時任務(wù)和不需要綁定表的自定義存儲過程的方法,讓Oracle自動修正沖突,以確保兩個數(shù)據(jù)庫的一致性。

    1 定制處理沖突的存儲過程

    處理沖突的存儲過程本質(zhì)上是根據(jù)發(fā)生streams同步錯誤的事務(wù)號,找到對應(yīng)沖事務(wù)LCR,結(jié)合錯誤類型,調(diào)整LCR中的事務(wù)內(nèi)容,使其正確執(zhí)行。

    1.1 處理刪除沖突的存儲過程

    有兩種方式處理這種沖突:

    (1)可以選擇不使用事務(wù)在物理上刪除行,而是更新一個“刪除”列,將行表標(biāo)記為“已刪除”,這樣不會發(fā)生刪除沖突,但可能引發(fā)更新沖突,需要另置存儲過程處理。

    (2)可以簡單的舍棄掉刪除失敗的事務(wù),并移除錯誤,使后續(xù)同步繼續(xù)。本文以第二種方法為例實現(xiàn)存儲過程。

    首先通過DBMS_APPLY_ADM.GET_ERROR_MESSAGE存儲過程獲得錯誤事務(wù)的LCR,然后用GET_COMMAND_TYPE函數(shù)可以獲得該操作的增、刪、改類型。

    舍棄該刪除操作其實就意味著直接移除事務(wù),執(zhí)行DBMS_APPLY_ADM.DELETE_ERROR,最后讓同步重新啟動:DBMS_APPLY_ADM.START_APPLY。

    1.2 處理更新沖突的存儲過程

    考慮在生產(chǎn)環(huán)境中,一個更新沖突往往意味著目標(biāo)數(shù)據(jù)庫缺失對應(yīng)記錄,因此,本文采用將更新事務(wù)的LCR修改為插入事務(wù)的方式。同時為了避免插入事務(wù)在雙向同步中反同步到源數(shù)據(jù)庫,將為Oracle會話增加一個標(biāo)記,使同步忽略來自標(biāo)記事務(wù)。

    獲取錯誤事務(wù)LCR以及事務(wù)類型的方式與上一節(jié)相同。下面假設(shè)錯誤事務(wù)已被判別為DML操作中的UPDATE類型。

    首先調(diào)用DBMS_STREAMS_ADM.SET_TAG存儲過程為該會話加一個標(biāo)記,本文采取十六進(jìn)制0作為標(biāo)記。這樣存儲過程中的事務(wù)將不會被復(fù)制到另一個數(shù)據(jù)庫。

    由于更新語句可能只包含部分字段值,所有需要獲得所有字段值,以插入完整記錄。假設(shè)已獲取LCR。用GET_VALUES('OLD') 獲取未被更新的舊值。為了將UPDATE類型的LCR完整的轉(zhuǎn)變?yōu)镮NSERT類型,需要用SET_VALUES將舊值設(shè)為NEW。然后將修改后的LCR用EXECUTE(TRUE)執(zhí)行。

    最后用和上一節(jié)相同的語句移除錯誤事務(wù)并開啟同步即可。

    為了使存儲過程的調(diào)用變得簡潔,將可上述兩種存儲過程合為一個。

    2 處理流程

    首先定義一個存儲過程,定時查詢DBA_APPLY_ERROR表,一旦發(fā)現(xiàn)錯誤事務(wù),就調(diào)用沖突處理存儲過程。定時觸發(fā)采用DBMS_JOB.SUBMIT程實現(xiàn),每3分鐘查詢一次。

    實際應(yīng)用中主存儲過程的調(diào)用頻率可根據(jù)需要調(diào)整。一般情況,沖突并非配置了雙向Streams同步的數(shù)據(jù)庫所應(yīng)當(dāng)出現(xiàn)的,因而可認(rèn)為是低概率事件,配置幾分鐘一次的檢查即可。

    3 模擬測試

    在實驗中,模擬連續(xù)100個刪除沖突,按本文方法部署的沖突處理能夠在20分鐘內(nèi)全部處理完畢,并使同步復(fù)原。模擬連續(xù)1000個更新沖突,本文方法用大約4小時10分鐘修復(fù)完畢。從量級上來說,顯然比人工處理節(jié)約人力與時間。此外,一般若生產(chǎn)環(huán)境中的數(shù)據(jù)庫使用得當(dāng),不會一次性有這么多沖突,本文方法對大量的同步?jīng)_突有一定的適應(yīng)性。

    4 結(jié)論

    本文針對Oracle雙向streams同步中的沖突問題,指出常規(guī)方法的局限性:需要綁定表以及人工處理。為了解決這兩種不足,首先定義了一個具有廣泛適用性的沖突事務(wù)處理存儲過程,能夠?qū)㈠e誤事務(wù)的LCR修正并執(zhí)行,以使同步繼續(xù)。然后定義了一個查詢沖突事務(wù)的存儲過程,配合Oracle定時任務(wù),實現(xiàn)沖突事務(wù)的自動化處理。經(jīng)過沖突事務(wù)的模擬實驗,該方法對平臺沒有依賴性。對于頻率較低的沖突事務(wù),具有較好的處理時效;對于大量沖突事務(wù),亦具備一定的承載能力。在生產(chǎn)環(huán)境中,按本文部署沖突處理策略,能夠在節(jié)省人力和時間同時加強streams雙向同步的穩(wěn)定性。

    參考文獻(xiàn)

    [1]蔡小祥,李曉華.Oracle STREAMS數(shù)據(jù)同步復(fù)制技術(shù)應(yīng)用[J].醫(yī)學(xué)信息學(xué)雜志,2015,36(02):38-40+60.

    [2]肖述.Oracle流復(fù)制技術(shù)在省級數(shù)據(jù)中心中的應(yīng)用[J].無線互聯(lián)科技,2016(04):136-137.

    [3]成雅.基于Oracle Streams的數(shù)據(jù)庫實時備份與恢復(fù)技術(shù)研究[D].南京航空航天大學(xué),2012.

    作者單位

    南京國電南自電網(wǎng)自動化有限公司研發(fā)中心 江蘇省南京市 211100

    吉安县| 靖宇县| 同江市| 淮南市| 盘山县| 龙井市| 嫩江县| 宜春市| 梧州市| 嘉荫县| 海宁市| 涿鹿县| 白水县| 安多县| 千阳县| 沾化县| 衡南县| 东阿县| 于都县| 崇礼县| 东宁县| 逊克县| 亳州市| 西和县| 微博| 武夷山市| 珲春市| 舞钢市| 嵊州市| 邵武市| 南平市| 无为县| 定西市| 彭阳县| 屏东市| 西充县| 临猗县| 蓝山县| 姜堰市| 洪湖市| 河北区|