一、控制文件多路復(fù)用的特點(diǎn)
多路復(fù)用的原理其實(shí)很簡(jiǎn)單,就是在數(shù)據(jù)庫(kù)服務(wù)器上將控制文件存放在多個(gè)磁盤(pán)分區(qū)或者多塊硬盤(pán)上。數(shù)據(jù)庫(kù)系統(tǒng)在需要更新控制文件的時(shí)候,就會(huì)自動(dòng)同時(shí)更新多個(gè)控制文件。如此的話(huà),當(dāng)其中一個(gè)控制文件出現(xiàn)損壞時(shí),系統(tǒng)會(huì)自動(dòng)啟用另外的控制文件。只有當(dāng)數(shù)據(jù)庫(kù)管理員運(yùn)氣比較背的時(shí)候,即所有控制文件都出現(xiàn)損壞,此時(shí)數(shù)據(jù)庫(kù)就無(wú)法正常啟動(dòng)了。不過(guò)只要將控制文件多路復(fù)用在多塊硬盤(pán)上,一般來(lái)說(shuō)控制文件一起損壞的紀(jì)律很小。所以采用多路復(fù)用控制文件可以在很大程度上提高控制文件的安全性。最重要的是,在控制文件轉(zhuǎn)換的過(guò)程之中,不會(huì)有停機(jī)現(xiàn)象的產(chǎn)生。所以通過(guò)把控制文件存放在不同的硬盤(pán)上,數(shù)據(jù)庫(kù)管理員就能夠避免數(shù)據(jù)庫(kù)出現(xiàn)單點(diǎn)故障的風(fēng)險(xiǎn)。當(dāng)采用多路復(fù)用技術(shù)啟用多個(gè)控制文件時(shí),數(shù)據(jù)庫(kù)在更新控制文件時(shí)會(huì)同時(shí)更新這些控制文件。雖然有時(shí)候這可能會(huì)讓數(shù)據(jù)庫(kù)對(duì)控制文件的修改花費(fèi)更多的時(shí)間,但是相對(duì)于風(fēng)險(xiǎn)來(lái)說(shuō),這點(diǎn)時(shí)間上的投資還是值得的。再說(shuō)只要硬盤(pán)的性能比較好,那么這個(gè)時(shí)間的影響是很少的,甚至可以忽略不計(jì)。不過(guò)在采用多路復(fù)用的時(shí)候,最好不要將控制文件防止在網(wǎng)絡(luò)上的服務(wù)器中。有時(shí)候如果系統(tǒng)在更新控制文件時(shí)剛好碰到網(wǎng)絡(luò)性能不好甚至網(wǎng)絡(luò)中斷的情況下,那么這個(gè)控制文件的更新就需要耗用比較長(zhǎng)的時(shí)間。
如在Windows操作系統(tǒng)下安裝Oracle數(shù)據(jù)庫(kù)的話(huà),其默認(rèn)情況下就啟用了多路復(fù)用技術(shù)。不過(guò)這個(gè)多路復(fù)用技術(shù)不怎么合理。其將其余的兩個(gè)控制文件副本保存在同一個(gè)分區(qū)的同一個(gè)目錄下。萬(wàn)一這臺(tái)服務(wù)器的硬盤(pán)出現(xiàn)了故障,由于控制文件保存在同一個(gè)硬盤(pán)中,為此多路復(fù)用就失去了意義。為此最好將控制文件保存在不同的硬盤(pán)中,以提高控制文件的安全性。
二、在Windows平臺(tái)上如何實(shí)現(xiàn)控制文件多路復(fù)用
本來(lái)Oracle數(shù)據(jù)庫(kù)有三個(gè)控制文件,分別保存在同一目錄中。筆者現(xiàn)在在另一個(gè)硬盤(pán)分區(qū)上放置了一個(gè)控制文件,實(shí)現(xiàn)了多路復(fù)用。如此的話(huà),即使前面兩個(gè)控制文件損壞了,那么數(shù)據(jù)庫(kù)也會(huì)立即啟用第三個(gè)控制文件來(lái)啟動(dòng)數(shù)據(jù)庫(kù)。在Windows操作系統(tǒng)下要實(shí)現(xiàn)多路復(fù)用控制文件是比較簡(jiǎn)單的,只需要通過(guò)幾個(gè)簡(jiǎn)單的步驟就可以完成。
第一步:修改系統(tǒng)參數(shù)control_files。在Oracle數(shù)據(jù)庫(kù)系統(tǒng)中,是通過(guò)這個(gè)初始化參數(shù)來(lái)打開(kāi)控制文件的。即這個(gè)初始化參數(shù)中指定有多少個(gè)控制文件,分別存放在那里,到時(shí)候數(shù)據(jù)庫(kù)就會(huì)更新多少控制文件。不過(guò)需要注意的是,一般數(shù)據(jù)庫(kù)在使用時(shí),只打開(kāi)一個(gè)控制文件。所以要啟用多路復(fù)用時(shí),首先需要使用ALTERSYSTEM命令來(lái)設(shè)置這個(gè)初始化參數(shù),以便在管理員指定的位置添加控制文件。其具體格式為ALTERSYSTEMcontrol_files "控制文件1","控制文件2"。需要注意的是,這里的控制文件都需要使用絕對(duì)路徑。
第二步:關(guān)閉數(shù)據(jù)庫(kù)以及相關(guān)服務(wù)。這個(gè)初始化參數(shù)設(shè)置以后,還需要關(guān)閉數(shù)據(jù)庫(kù)以及相關(guān)服務(wù)后才能夠進(jìn)行下一步的操作。所以最好在數(shù)據(jù)庫(kù)投入生產(chǎn)使用之前,就做好控制文件多路復(fù)用的準(zhǔn)備。否則后續(xù)再進(jìn)行調(diào)整的話(huà),就不得不付出數(shù)據(jù)庫(kù)停機(jī)的代價(jià)。使用shutdown命令關(guān)閉數(shù)據(jù)庫(kù)之后,還需要在操作系統(tǒng)的服務(wù)管理窗口中關(guān)閉相關(guān)的服務(wù)。
第三步:復(fù)制控制文件并改名。為了確保所有控制文件能夠互為鏡像,完全相同,最好能夠在關(guān)閉數(shù)據(jù)庫(kù)的情況下,將原先的控制文件復(fù)制到一個(gè)新的位置,然后進(jìn)行重命名。注意這里的位置與控制文件的名字,必須同第一步指定的路徑與名字相同。
第四步:重新啟動(dòng)數(shù)據(jù)庫(kù)與相關(guān)的服務(wù)。啟動(dòng)數(shù)據(jù)庫(kù)之后,需要注意手工啟動(dòng)服務(wù)窗口中的相關(guān)選項(xiàng)。如果怕麻煩的話(huà),那么重新啟動(dòng)一下操作系統(tǒng),系統(tǒng)會(huì)在重新啟動(dòng)的過(guò)程中自動(dòng)啟用相關(guān)的Oracle數(shù)據(jù)庫(kù)服務(wù)。數(shù)據(jù)庫(kù)重新啟動(dòng)之后,多路復(fù)用的控制文件就可以使用了。如果要確認(rèn)一下原先的設(shè)置是否奏效,可以使用上圖所示的查詢(xún)語(yǔ)句來(lái)進(jìn)行查詢(xún)。當(dāng)使用ALTERSYSTEM參數(shù)更改完初始化參數(shù)之后,由于這個(gè)控制文件實(shí)際上還并不存在,為此利用這個(gè)語(yǔ)句來(lái)查詢(xún)的時(shí)候就查不到更改后的變化。復(fù)制控制文件并重新啟動(dòng)數(shù)據(jù)庫(kù)系統(tǒng)后,所做的更改生效了。此時(shí)才可以通過(guò)這個(gè)查詢(xún)語(yǔ)句查找到起作用的控制文件;蛘哒f(shuō),如果管理員實(shí)際復(fù)制了控制文件,但是在這里查詢(xún)不到相應(yīng)結(jié)果的話(huà),則說(shuō)明肯定是哪個(gè)地方出現(xiàn)了問(wèn)題。此時(shí)系統(tǒng)工程師就要從頭開(kāi)始來(lái)排除故障可能出現(xiàn)的原因。
三、在實(shí)現(xiàn)過(guò)程中的注意點(diǎn)
顯然,要在Windows操作系統(tǒng)上實(shí)現(xiàn)控制文件多路復(fù)用的話(huà),比較簡(jiǎn)單。不過(guò)在具體的配置過(guò)程中,有一些細(xì)節(jié)方面的內(nèi)容要引起管理員重視。首先,在使用ALTERSYSTEM更改初始化參數(shù)的時(shí)候,一定要把原先的控制文件信息帶上。也就是說(shuō),默認(rèn)情況下Oracle數(shù)據(jù)庫(kù)已經(jīng)有了三個(gè)控制文件。如果數(shù)據(jù)庫(kù)管理員還還需要在其他硬盤(pán)上多采用兩個(gè)控制文件的話(huà),那么在ALTERSYSTEM語(yǔ)句中必須加入五條信息。也就是說(shuō),原先的控制文件信息必須也帶上。如果在這條語(yǔ)句中,數(shù)據(jù)庫(kù)管理員只帶上兩條新控制文件的語(yǔ)句的話(huà),則數(shù)據(jù)庫(kù)系統(tǒng)會(huì)認(rèn)為原先的三個(gè)控制文件都不要了,而直接采用后面加上的兩個(gè)控制文件來(lái)代替。為此筆者提醒各位數(shù)據(jù)庫(kù)管理員,在調(diào)整設(shè)置的時(shí)候千萬(wàn)不要犯這個(gè)低級(jí)的錯(cuò)誤。其次需要考慮多路復(fù)用控制文件的存儲(chǔ)位置。像數(shù)據(jù)庫(kù)的默認(rèn)設(shè)置,控制件時(shí)存儲(chǔ)在同一個(gè)目錄中。
這顯然并不是很安全。至少要將控制文件放置在不同的硬盤(pán)上或者分區(qū)上。具體來(lái)說(shuō),控制文件的每個(gè)副本都應(yīng)該保存在不同的磁盤(pán)驅(qū)動(dòng)器上。也就是說(shuō)可以將控制文件的副本存儲(chǔ)在每個(gè)存儲(chǔ)有重做日至文件組組成員的硬盤(pán)驅(qū)動(dòng)器上。不過(guò)有一點(diǎn)需要說(shuō)明的是,最好不要將控制文件的副本保存在網(wǎng)絡(luò)主機(jī)上。這主要是因?yàn)橄到y(tǒng)會(huì)同時(shí)更新多個(gè)數(shù)據(jù)庫(kù)控制文件。如果網(wǎng)絡(luò)比較繁忙時(shí),更新網(wǎng)絡(luò)主機(jī)上的控制可能會(huì)花費(fèi)比較多的時(shí)間。可見(jiàn),這個(gè)位置的選擇不僅關(guān)系到控制文件的更新速度,而且還關(guān)系到控制文件副本的安全性。為此在規(guī)劃數(shù)據(jù)庫(kù)的時(shí)候,也需要好好想想這個(gè)控制文件副本該存放在哪個(gè)地方合適。第三需要注意的是,這個(gè)控制文件的默認(rèn)存儲(chǔ)位置在不同的操作系統(tǒng)中是不同的。
如在Linux操作系統(tǒng)與Windows操作系統(tǒng)中,雖然默認(rèn)情況下都是三個(gè)控制文件,其中連個(gè)為控制文件的副本。但是他們存儲(chǔ)的路徑不同。為此如果要在不同的操作系統(tǒng)上多路復(fù)用控制文件時(shí),就需要通過(guò)上面的查詢(xún)語(yǔ)句來(lái)查詢(xún)當(dāng)前生效的控制文件。千萬(wàn)不要憑感覺(jué)去找。因?yàn)榧词鼓阏业搅丝刂莆募,也不能夠保證這個(gè)控制文件是否有效的,是否包含了最新的內(nèi)容。如果不是的話(huà),則無(wú)法保證所有的控制文件都相同,無(wú)法確保所有控制文件能夠互為鏡像。