筆者今天就談?wù)勛约簩?duì)這兩種操作模式的理解,并且給出一些可行的建議,跟大家一起來(lái)提高Oracle數(shù)據(jù)庫(kù)的安全性。 一、非歸檔模式的利與弊。 非歸檔模式是指不保留重做歷史的日志操作模式,只能夠用于保護(hù)例程失敗,而不能夠保護(hù)介質(zhì)損壞。如果數(shù)據(jù)庫(kù)采用的是日志操作模式的話,則進(jìn)行日志切換時(shí),新的日志會(huì)直接覆蓋原有日志文件的內(nèi)容,不會(huì)保留原有日志文件中的數(shù)據(jù)。 這么說(shuō)聽(tīng)起來(lái)可能比較難理解。筆者舉一個(gè)簡(jiǎn)單的例子,就會(huì)清楚許多。如現(xiàn)在Oracle數(shù)據(jù)庫(kù)中有四個(gè)日志組,日志序列號(hào)分別為11、 12、13、14。當(dāng)數(shù)據(jù)庫(kù)事務(wù)變化寫(xiě)滿(mǎn)第一個(gè)日志組文件(序列號(hào)為11)時(shí),Oracle數(shù)據(jù)庫(kù)就會(huì)自動(dòng)切換到第二個(gè)日志組文件(序列號(hào)為12)中。依次類(lèi)推。當(dāng)?shù)谌齻€(gè)日志組文件(序列號(hào)為13)寫(xiě)滿(mǎn)時(shí),就會(huì)切換到第四個(gè)日志組(序列號(hào)為14)。當(dāng)?shù)谒膫€(gè)日志組(序列號(hào)為14)滿(mǎn)時(shí),其就會(huì)切換到第一個(gè)日志組(序列號(hào)為15)。這里,序列號(hào)雖然與剛才第一個(gè)日志文件組不同,但是日志組仍然是同一個(gè)。此時(shí),由于數(shù)據(jù)庫(kù)的操作模式選擇為非歸檔模式,所以第一組日志文件(序列號(hào)為11)中的內(nèi)容并沒(méi)有歸檔。新的日志文件的內(nèi)容將直接覆蓋第一個(gè)日志組文件中的內(nèi)容。若第一個(gè)日志組文件(序列號(hào)為15)滿(mǎn)時(shí),切換到第二個(gè)日志文件組時(shí),新的內(nèi)容又會(huì)在第二個(gè)日志文件組沒(méi)有歸檔的情況下,直接覆蓋日志文件12中的原有數(shù)據(jù)。 通過(guò)以上的分析,我們可以歸納出非歸檔操作日志模式的一些特點(diǎn)。 一是當(dāng)檢查點(diǎn)完成之后,后臺(tái)進(jìn)程可以覆蓋原有重做日志的內(nèi)容。也就是說(shuō),在日志切換時(shí),后來(lái)的日志文件內(nèi)容可以在以前的日志文件內(nèi)容沒(méi)有歸檔的情況下,覆蓋原有日志文件的內(nèi)容。如此的話,當(dāng)出現(xiàn)數(shù)據(jù)文件損壞時(shí),數(shù)據(jù)庫(kù)管理員只能夠恢復(fù)到過(guò)去的完全被分點(diǎn)。如數(shù)據(jù)庫(kù)有四個(gè)日志組。如果在日志組序列號(hào)為16的時(shí)候數(shù)據(jù)庫(kù)管理員進(jìn)行了完全備份。而在日志組序列號(hào)為28的時(shí)候數(shù)據(jù)文件出現(xiàn)了損壞。此時(shí),由于中間的日志文件內(nèi)容被覆蓋掉了。所以,此時(shí)數(shù)據(jù)庫(kù)管理員只能夠恢復(fù)到完全備份的那個(gè)點(diǎn),而不能夠恢復(fù)數(shù)據(jù)庫(kù)文件損壞時(shí)的點(diǎn)的數(shù)據(jù)(即序列號(hào)為28)的數(shù)據(jù)。如果在序列號(hào)為18的時(shí)候出現(xiàn)了數(shù)據(jù)文件損壞的事故,則可以先對(duì)數(shù)據(jù)庫(kù)進(jìn)行還原(還原點(diǎn)為序列號(hào)為16時(shí)的數(shù)據(jù)),然后再利用重做日志文件(序列號(hào)為17、18),即可以把數(shù)據(jù)恢復(fù)到故障發(fā)生時(shí)的數(shù)據(jù)。故雖然不用對(duì)重做日志文件進(jìn)行歸檔,節(jié)省磁盤(pán)空間。但是,卻給后續(xù)數(shù)據(jù)庫(kù)的恢復(fù)帶來(lái)的麻煩,降低了數(shù)據(jù)庫(kù)的安全性。為此,如何取舍,還是需要數(shù)據(jù)庫(kù)管理員根據(jù)自己企業(yè)的情況,作出選擇。 二是執(zhí)行數(shù)據(jù)庫(kù)備份時(shí),必須要備份所有數(shù)據(jù)文件和控制文件。根據(jù)上面筆者所講述的,因?yàn)橹刈鋈罩緯?huì)被后來(lái)的所覆蓋,所以,基本上數(shù)據(jù)庫(kù)管理員不能夠通過(guò)重做日志文件來(lái)恢復(fù)數(shù)據(jù)庫(kù)的數(shù)據(jù),或者說(shuō),通過(guò)重做日志文件不能夠恢復(fù)全部的數(shù)據(jù)。為此,在執(zhí)行數(shù)據(jù)庫(kù)備份時(shí),就必須備份所有的數(shù)據(jù)文件和控制文件。同時(shí),還必須使用SHUTDOWNNORMAL等命令關(guān)閉數(shù)據(jù)庫(kù)。 二、歸檔日志模式。 歸檔日志模式與非歸檔日志模式相對(duì)應(yīng),是指保留重做日志歷史的日志操作模式。這種日志操作模式不僅可用于保護(hù)例程失敗,還可以用于保護(hù)介質(zhì)損壞的情況。如果數(shù)據(jù)庫(kù)管理員把日志設(shè)置為歸檔日志模式,則當(dāng)后臺(tái)進(jìn)程在進(jìn)行日志切換時(shí),后臺(tái)進(jìn)程會(huì)自動(dòng)將重做日志的內(nèi)容復(fù)制到歸檔日志中。歸檔日志就是非活動(dòng)重做日志的備份。 如現(xiàn)在Oracle數(shù)據(jù)庫(kù)中有四個(gè)日志組,日志序列號(hào)分別為11、12、13、14。當(dāng)數(shù)據(jù)庫(kù)事務(wù)變化寫(xiě)滿(mǎn)第一個(gè)日志組文件(序列號(hào)為11) 時(shí),后臺(tái)進(jìn)程就會(huì)切換到第二個(gè)日志組中(序列號(hào)為12)。不過(guò)在這個(gè)切換之前,數(shù)據(jù)庫(kù)有一個(gè)進(jìn)程,會(huì)負(fù)責(zé)將第一個(gè)日志組中的文件內(nèi)容復(fù)制到歸檔日志中去。依次類(lèi)推。這就是歸檔日志模式與非歸檔日志模式最本質(zhì)的區(qū)別。不過(guò)這個(gè)區(qū)別卻給數(shù)據(jù)庫(kù)安全性帶來(lái)了很大的變化。 如當(dāng)日志序列號(hào)為28時(shí)出現(xiàn)了數(shù)據(jù)文件的錯(cuò)誤或者服務(wù)器硬盤(pán)損壞的事故時(shí),因?yàn)槿罩疚募杏涗浟藦臄?shù)據(jù)庫(kù)備份以來(lái)所有的數(shù)據(jù)變化情況。而且這些日志文件與數(shù)據(jù)庫(kù)備份文件存儲(chǔ)在其他媒體中,那么數(shù)據(jù)庫(kù)管理員就可以通過(guò)這些資料,把數(shù)據(jù)庫(kù)恢復(fù)到介質(zhì)損壞時(shí)(即日志文件序列號(hào)為28)的數(shù)據(jù)。從保護(hù)數(shù)據(jù)庫(kù)數(shù)據(jù)的角度講,這是一個(gè)接近于比較理想的狀態(tài)了。 若把非歸檔模式與歸檔模式進(jìn)行對(duì)比的話,可以發(fā)現(xiàn)歸檔模式有如下的特點(diǎn)。 一是當(dāng)出現(xiàn)介質(zhì)損壞(如硬盤(pán)損壞或者意外刪除數(shù)據(jù)文件)或者出現(xiàn)例程失敗(如服務(wù)器突然斷電)時(shí),數(shù)據(jù)庫(kù)管理員可以憑借歸檔日志文件來(lái)防止丟失數(shù)據(jù)。而非歸檔模式則往往只能夠應(yīng)對(duì)例程失敗的情況。所以,其應(yīng)用范圍要比非歸檔模式大的多。 二是數(shù)據(jù)備份的限制條件。正如上面所說(shuō)的,如果數(shù)據(jù)庫(kù)處于非歸檔模式,則對(duì)數(shù)據(jù)庫(kù)進(jìn)行備份時(shí),要先用SHUTDOWNNORMAL等命令關(guān)閉數(shù)據(jù)庫(kù)。而處于歸檔模式的時(shí)候,則當(dāng)數(shù)據(jù)庫(kù)處于Open狀態(tài)時(shí),數(shù)據(jù)庫(kù)管理員仍然可以備份數(shù)據(jù)庫(kù),而且不會(huì)影響數(shù)據(jù)庫(kù)的正常使用。除了數(shù)據(jù)庫(kù)備份兩者有本質(zhì)上的差異之外,在數(shù)據(jù)庫(kù)恢復(fù)上也有很大的差別。若數(shù)據(jù)庫(kù)采用歸檔日志模式,不僅可以執(zhí)行完全恢復(fù),而且在歸檔日志文件的幫助下,還可以將數(shù)據(jù)庫(kù)恢復(fù)到特定的點(diǎn)。從而當(dāng)數(shù)據(jù)庫(kù)出現(xiàn)意外故障時(shí),最大限度的保護(hù)數(shù)據(jù)的安全性。 不過(guò)若采取歸檔模式的話,則必須要犧牲一定的磁盤(pán)空間。 三、如何選擇合適的日志操作模式? 非歸檔模式只適用于例程失敗時(shí)恢復(fù)數(shù)據(jù),不能夠用來(lái)保護(hù)介質(zhì)損壞。即當(dāng)數(shù)據(jù)庫(kù)的數(shù)據(jù)文件意外損壞時(shí),非歸檔模式?jīng)]有應(yīng)對(duì)之策。歸檔模式不僅可以用來(lái)保護(hù)例程失敗,而且還可以在介質(zhì)失敗的時(shí)候,最大程度的恢復(fù)數(shù)據(jù)庫(kù)的原有數(shù)據(jù)。此時(shí),數(shù)據(jù)庫(kù)管理員可以利用數(shù)據(jù)庫(kù)備份文件、歸檔日志文件、重做日志文件等把數(shù)據(jù)庫(kù)中的數(shù)據(jù)恢復(fù)到故障發(fā)生的那一時(shí)點(diǎn)。 既然歸檔操作模式與非歸檔操作模式各有各的特點(diǎn),那么在什么時(shí)候采用歸檔日志模式為好,什么時(shí)候又該采用非歸檔模式呢?這個(gè)問(wèn)題的答案,是公說(shuō)公有理,婆說(shuō)婆有理??峙?tīng)?zhēng)論個(gè)幾年也沒(méi)有一個(gè)固定的答案。對(duì)此,筆者就提一下自己的意見(jiàn)。這也不是標(biāo)準(zhǔn)答案,只是供大家參考。 首先要看數(shù)據(jù)庫(kù)中數(shù)據(jù)變化的頻繁程度。當(dāng)數(shù)據(jù)庫(kù)中數(shù)據(jù)變化比較少的時(shí)候,則最好采用非歸檔模式。相反,如果數(shù)據(jù)庫(kù)中的數(shù)據(jù)變化比較頻繁,如一些業(yè)務(wù)操作系統(tǒng),則最好能夠采用歸檔模式。 其次,要看企業(yè)對(duì)數(shù)據(jù)丟失的態(tài)度。如果企業(yè)對(duì)于數(shù)據(jù)安全要求比較高,如銀行,不允許丟失任何數(shù)據(jù),則最好能夠采用歸檔日志模式。在數(shù)據(jù)庫(kù)意外故障的時(shí)候,其可以幫助數(shù)據(jù)庫(kù)管理員在最大程度上恢復(fù)數(shù)據(jù)。同理,當(dāng)企業(yè)可以允許部分損壞數(shù)據(jù)的時(shí)候,則可以采用非歸檔模式,以節(jié)省切換日志組時(shí)的對(duì)日志文件備份的額外開(kāi)銷(xiāo)與磁盤(pán)空間。 再者,要看看數(shù)據(jù)庫(kù)是否需要全天候運(yùn)行。因?yàn)樵诜菤w檔模式下,必須利用SHUTDOWNNORMAL等命令關(guān)閉數(shù)據(jù)庫(kù),才能過(guò)對(duì)數(shù)據(jù)庫(kù)進(jìn)行備份。這跟數(shù)據(jù)庫(kù)全天候運(yùn)行的要求是不符合的。而歸檔模式下,即使數(shù)據(jù)庫(kù)出于OPEN狀態(tài),也可以對(duì)其進(jìn)行備份,也不會(huì)影響數(shù)據(jù)庫(kù)的正常運(yùn)行。為此,若果數(shù)據(jù)庫(kù)需要全天候運(yùn)行的話,則最好采用歸檔模式。雖然數(shù)據(jù)庫(kù)為此要付出一些額外的開(kāi)銷(xiāo),筆者認(rèn)為也是值得的。畢竟硬件投資有價(jià),數(shù)據(jù)無(wú)價(jià)。 數(shù)據(jù)庫(kù)管理員要根據(jù)企業(yè)的實(shí)際情況,選擇合適的日志操作模式。從而讓重做日志與歸檔日志真正成為Oracle數(shù)據(jù)庫(kù)的保護(hù)傘。 |
|
來(lái)自: Baruch > 《數(shù)據(jù)庫(kù)》