更改數(shù)據(jù)捕獲 (CDC) 被廣泛定義為跟蹤數(shù)據(jù)庫中的更改。跟蹤變化的目的是多種多樣的。嵌入式數(shù)據(jù)庫系統(tǒng)中的 CDC 可以通過幾種不同的方式實(shí)現(xiàn),這些方式有時(shí)對(duì)應(yīng)用程序是不可見的,應(yīng)用程序可以利用這些方式進(jìn)行數(shù)據(jù)共享、響應(yīng)事件和增量備份。
第一個(gè),可能也是最明顯的,在嵌入式數(shù)據(jù)庫中實(shí)現(xiàn) CDC 是實(shí)現(xiàn)事務(wù)的 ACID 屬性的一部分:原子性、一致性、隔離性和持久性。將事務(wù)成功應(yīng)用到數(shù)據(jù)庫會(huì)將該數(shù)據(jù)庫從一種一致狀態(tài)轉(zhuǎn)移到新的一致狀態(tài)。相反,事務(wù)對(duì)數(shù)據(jù)庫的不成功應(yīng)用必須使數(shù)據(jù)庫返回到事務(wù)應(yīng)用不成功之前存在的一致狀態(tài)。為了滿足這些要求,數(shù)據(jù)庫管理系統(tǒng)必須跟蹤變化。實(shí)現(xiàn)細(xì)節(jié)因數(shù)據(jù)庫系統(tǒng)而異,甚至在數(shù)據(jù)庫系統(tǒng)系列中,從純內(nèi)存數(shù)據(jù)庫、持久內(nèi)存數(shù)據(jù)庫、
在純內(nèi)存數(shù)據(jù)庫的情況下,沒有用于記錄更改的事務(wù)日志。因此,在事務(wù)處于活動(dòng)狀態(tài)時(shí),需要將更改或更改記錄的前映像保存在緩沖區(qū)中,以便數(shù)據(jù)庫可以在事務(wù)中止時(shí)恢復(fù)到其事務(wù)前狀態(tài)。
對(duì)于具有持久性的內(nèi)存數(shù)據(jù)庫,所有更改也附加到存儲(chǔ)在持久媒體上的事務(wù)日志中,可以在崩潰后重播以進(jìn)行恢復(fù)。
對(duì)于持久性(基于磁盤的)數(shù)據(jù)庫,還使用事務(wù)日志記錄,以優(yōu)化性能并支持從崩潰中恢復(fù)。在這種情況下,可以提供兩種形式的事務(wù)日志記錄:UNDO 日志記錄和預(yù)寫日志記錄 (WAL)。WAL 如上一段所述。UNDO 日志將更改記錄的前映像寫入事務(wù)日志文件。在發(fā)生崩潰時(shí),UNDO 日志信息用于回滾不完整的事務(wù)(即,將數(shù)據(jù)庫返回到最后一致的狀態(tài))。
在某些數(shù)據(jù)庫系統(tǒng)中,CDC 的另一個(gè)內(nèi)部使用是通過 MVCC(多版本并發(fā)控制)實(shí)現(xiàn)樂觀并發(fā)控制。樂觀并發(fā)控制意味著應(yīng)用程序不必獲取鎖,這也意味著應(yīng)用程序永遠(yuǎn)不必等待另一個(gè)應(yīng)用程序持有的鎖。這要求數(shù)據(jù)庫系統(tǒng)知道兩個(gè)應(yīng)用程序是否試圖同時(shí)修改同一個(gè)數(shù)據(jù)庫對(duì)象。這是通過跟蹤提交事務(wù)時(shí)檢查的版本號(hào)來完成的(因此名稱,多版本并發(fā)控制)。如果對(duì)象的版本在應(yīng)用程序獲取對(duì)象副本的時(shí)間和應(yīng)用程序想要對(duì)該對(duì)象提交更改的時(shí)間之間發(fā)生了變化,則意味著另一個(gè)應(yīng)用程序首先修改了底層對(duì)象,并且必須中止并重試該事務(wù)。 MVCC 背后的理論是,這種沖突很少見,偶爾重試比總是必須獲取鎖并可能用這些鎖阻塞其他應(yīng)用程序更有效。
CDC 還用于需要“五個(gè) 9”可用性(即 99.999% 正常運(yùn)行時(shí)間)的系統(tǒng)的高可用性 (HA) 實(shí)施。HA由不同的數(shù)據(jù)庫供應(yīng)商以不同的方式實(shí)現(xiàn):實(shí)時(shí)事務(wù)復(fù)制,SQL語句復(fù)制,日志文件轉(zhuǎn)發(fā)等。有所謂的1-safe(又名lazy,異步)和2-safe(又名渴望,同步) ) 實(shí)現(xiàn)。例如,實(shí)時(shí)事務(wù)復(fù)制可以是 1-safe 或 2-safe(在e X treme DB 中,我們將其稱為時(shí)間認(rèn)知兩階段提交);日志轉(zhuǎn)發(fā)本質(zhì)上是 1 安全的。
CDC 可以在嵌入式數(shù)據(jù)庫和/或第三方系統(tǒng)中用于可在應(yīng)用程序中使用的其他目的:開放復(fù)制、觸發(fā)器/事件通知和增量備份。
一些嵌入式數(shù)據(jù)庫系統(tǒng)實(shí)施復(fù)制以例如支持高可用性和/或數(shù)據(jù)庫集群。這樣的系統(tǒng)可以很容易地在同一數(shù)據(jù)庫系統(tǒng)的兩個(gè)或多個(gè)實(shí)例之間復(fù)制數(shù)據(jù)或事務(wù),但是當(dāng)需要從嵌入式數(shù)據(jù)庫復(fù)制到任何其他目標(biāo)時(shí),它們不是解決方案。有第三方產(chǎn)品試圖填補(bǔ)這一空白,例如 Actian DataConnect 和 Oracle Golden Gate?;蛘咄ㄟ^自定義提取-轉(zhuǎn)換-加載 (ETL) 解決方案,該解決方案可能對(duì)源和/或目標(biāo)數(shù)據(jù)庫中的更改敏感。
觸發(fā)器和事件通知方案是變更數(shù)據(jù)捕獲的經(jīng)典用例。畢竟,觸發(fā)器是在指定表的 INSERT、UPDATE 或 DELETE 語句執(zhí)行時(shí)觸發(fā)的。換句話說,數(shù)據(jù)發(fā)生了變化,觸發(fā)器捕獲了該變化,周圍系統(tǒng)以某種方式對(duì)其進(jìn)行操作。
嵌入式數(shù)據(jù)庫系統(tǒng)中變更數(shù)據(jù)捕獲的最后一個(gè)重要目的是實(shí)現(xiàn)增量備份設(shè)施。必要時(shí),增量備份方案必須知道在上次完整快照或上次增量備份之間數(shù)據(jù)庫中發(fā)生的增量更改。
結(jié)論
變更數(shù)據(jù)捕獲是任何數(shù)據(jù)庫管理系統(tǒng)的核心。它有助于實(shí)施并發(fā)性和持久性、復(fù)制、觸發(fā)器/事件通知以及備份和恢復(fù)的 ACID 屬性。
審核編輯:郭婷
-
嵌入式
+關(guān)注
關(guān)注
5152文章
19675瀏覽量
317657 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3927瀏覽量
66257 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
2039瀏覽量
62147
發(fā)布評(píng)論請(qǐng)先 登錄
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—MongoDB數(shù)據(jù)庫文件丟失的數(shù)據(jù)恢復(fù)案例

數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫被加密如何恢復(fù)數(shù)據(jù)?

MySQL數(shù)據(jù)庫是什么
分布式存儲(chǔ)數(shù)據(jù)恢復(fù)—虛擬機(jī)上hbase和hive數(shù)據(jù)庫數(shù)據(jù)恢復(fù)案例
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)——MongoDB數(shù)據(jù)庫文件拷貝后服務(wù)無法啟動(dòng)的數(shù)據(jù)恢復(fù)

數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SQL Server附加數(shù)據(jù)庫提示“錯(cuò)誤 823”的數(shù)據(jù)恢復(fù)案例

分布式云化數(shù)據(jù)庫有哪些類型
MySQL數(shù)據(jù)庫的安裝

云數(shù)據(jù)庫是哪種數(shù)據(jù)庫類型?
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—Mysql數(shù)據(jù)庫表記錄丟失的數(shù)據(jù)恢復(fù)流程

數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—MYSQL數(shù)據(jù)庫ibdata1文件損壞的數(shù)據(jù)恢復(fù)案例
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—通過拼接數(shù)據(jù)庫碎片恢復(fù)SQLserver數(shù)據(jù)庫

一文講清什么是分布式云化數(shù)據(jù)庫!
Oracle數(shù)據(jù)恢復(fù)—異常斷電后Oracle數(shù)據(jù)庫啟庫報(bào)錯(cuò)的數(shù)據(jù)恢復(fù)案例

數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫出現(xiàn)823錯(cuò)誤的數(shù)據(jù)恢復(fù)案例

評(píng)論