Oracle是當(dāng)前最常用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一,其優(yōu)秀的性能和可靠性一直備受業(yè)界推崇。其中的Durability機(jī)制就是Oracle可靠性得以實(shí)現(xiàn)的重要保障。
Durability是指系統(tǒng)對(duì)數(shù)據(jù)的持久性保證,即一旦數(shù)據(jù)被存儲(chǔ)到磁盤(pán)等持久化介質(zhì)上,便能確保在任意情況下都不會(huì)因?yàn)橛布收匣蚱渌蛩囟鴣G失或損壞。在Oracle數(shù)據(jù)庫(kù)中,Durability主要是由Redo Log功能實(shí)現(xiàn)的。
Redo Log是Oracle數(shù)據(jù)庫(kù)中最基礎(chǔ)也最重要的日志文件,它記錄了數(shù)據(jù)庫(kù)發(fā)生的所有變更操作(例如Insert/Update/Delete)的詳細(xì)信息,而且必須先于數(shù)據(jù)寫(xiě)入到磁盤(pán)上。這種機(jī)制既可以應(yīng)對(duì)系統(tǒng)故障造成的數(shù)據(jù)損失,又能保證隨時(shí)都能回滾到之前的狀態(tài)。
下面是操作完數(shù)據(jù)后,Redo Log文件的記錄內(nèi)容示例:
BEGIN
INSERT INTO Employees(EmpID, Name, Gender) VALUES(101, 'Tom', 'M');
COMMIT;(提交事務(wù))
當(dāng)Redo Log失效時(shí),Oracle將無(wú)法保證數(shù)據(jù)安全。因此,Oracle引入了Redundancy技術(shù)來(lái)應(yīng)對(duì)Redo Log的故障。Redundancy常用于多個(gè)物理磁盤(pán)(即RAID陣列)上對(duì)日志進(jìn)行備份存儲(chǔ),以此保障Redo Log文件不會(huì)因故障而丟失。
除了Redo Log方面的保障,Oracle還提供了一些其他高可靠性的機(jī)制。歸檔日志技術(shù)能夠?qū)?shù)據(jù)庫(kù)中的Redo Log日志文件復(fù)制并備份至另一個(gè)設(shè)備中。當(dāng)系統(tǒng)中的任何一臺(tái)設(shè)備發(fā)生故障時(shí),我們 可以將歸檔的日志文件用來(lái)恢復(fù)數(shù)據(jù)。
與歸檔日志類(lèi)似的是Flashback技術(shù),該技術(shù)依靠回滾表或用于時(shí)間點(diǎn)恢復(fù)的恢復(fù)點(diǎn)來(lái)支持“倒流”數(shù)據(jù)的操作,達(dá)到數(shù)據(jù)可靠性的最終目標(biāo)。
總之,Oracle數(shù)據(jù)庫(kù)的Durability機(jī)制主要依靠Redo Log,而實(shí)現(xiàn)高可靠性則需要借助于Redundancy、歸檔日志和Flashback等輔助手段才能真正落地。只有這樣,才能大大降低數(shù)據(jù)丟失的概率,并確保系統(tǒng)的穩(wěn)定和安全。