Oracle數(shù)據(jù)庫中的數(shù)據(jù)文件有一個特性,即可以設(shè)置是否脫機(jī)。如果將數(shù)據(jù)文件設(shè)置為脫機(jī),數(shù)據(jù)庫就無法讀取這個數(shù)據(jù)文件。只有在文件聯(lián)機(jī),時數(shù)據(jù)庫才能夠讀取其中的內(nèi)容。為此有時候改變這個數(shù)據(jù)文件的狀態(tài)也是數(shù)據(jù)庫維護(hù)過程中的一個必要手段。
一、為什么要更改其可用性?
1、 處于更改數(shù)據(jù)文件名或者位置的需要。
在數(shù)據(jù)庫部署的時候,如果沒有給數(shù)據(jù)文件取一個合適的名字,或者說沒有給其選擇一個合適的分區(qū)。此時在后續(xù)的維護(hù)中可能就需要更改數(shù)據(jù)文件的名字或者位置。如有時候處于性能優(yōu)化的考慮,會將一些存在并發(fā)性訪問的數(shù)據(jù)文件存放在不同的硬盤分區(qū)上,以減少I/O沖突提高數(shù)據(jù)庫性能。在這種情況下,就必須要移動數(shù)據(jù)文件的位置。要實(shí)現(xiàn)這個目的的話,就必須首先要讓數(shù)據(jù)文件脫機(jī),然后再將其啟動到合適的位置。
2、 系統(tǒng)遇到數(shù)據(jù)文件故障時會自動關(guān)閉。
有時候數(shù)據(jù)庫系統(tǒng)也會自動關(guān)閉數(shù)據(jù)文件。如當(dāng)數(shù)據(jù)庫系統(tǒng)往數(shù)據(jù)文件中寫入數(shù)據(jù)的時候,如果發(fā)現(xiàn)寫入過程中出現(xiàn)錯誤的話,就會將這個數(shù)據(jù)文件設(shè)置為脫機(jī),并將這個信息寫入到日志中。數(shù)據(jù)庫管理員接到報警信息后,就需要修復(fù)這個數(shù)據(jù)文件。修復(fù)完畢后,還需要手工的將這個數(shù)據(jù)文件設(shè)置為聯(lián)機(jī)。此時數(shù)據(jù)庫系統(tǒng)才會重新啟用這個數(shù)據(jù)文件?梢,當(dāng)數(shù)據(jù)文件無法正確寫入時,也是數(shù)據(jù)文件脫機(jī)的一個原因。
將某個數(shù)據(jù)文件設(shè)置為脫機(jī)時,不會影響到其他數(shù)據(jù)文件的可用性。如數(shù)據(jù)庫管理員在規(guī)劃數(shù)據(jù)文件的時候,是按照部門來規(guī)劃的。即其他部門的用戶仍然可以在系統(tǒng)中訪問自己若需要的數(shù)據(jù)。為此這個特性的話可以有效的的減少數(shù)據(jù)庫當(dāng)機(jī)的時間,實(shí)現(xiàn)數(shù)據(jù)庫的最大可用性。 分步啟動數(shù)據(jù)庫以重命名數(shù)據(jù)文件
二、歸檔模式與非歸檔模式下分別如何更改?
Oracle數(shù)據(jù)庫工作模式大致分為歸檔模式與非歸檔模式。在不同的操作模式下,其數(shù)據(jù)文件可用性維護(hù)的方法稍有差異。為此各位數(shù)據(jù)庫管理員要了解在不同操作模式下的維護(hù)方式。只有如此,才能夠采取合適的方式來改變數(shù)據(jù)文件的可用性。
若數(shù)據(jù)庫處于歸檔模式,則要使一個單獨(dú)的數(shù)據(jù)文件聯(lián)機(jī)或者脫機(jī),則只需要使用ALTER DATABASE的DATEFILE字句即可。即按照如下的形式就可以將某個數(shù)據(jù)文件設(shè)置為脫機(jī)或者聯(lián)機(jī)。當(dāng)以下命令執(zhí)行成功后,系統(tǒng)會提示“數(shù)據(jù)庫已經(jīng)更改”。
ALTER DATABASE DATAFILE ‘?dāng)?shù)據(jù)文件存儲路徑與名字’ OFFLINE/ONLINE;
但是要注意,如果數(shù)據(jù)庫不是處于歸檔模式,則執(zhí)行上面的語句更改數(shù)據(jù)文件的可用性時,數(shù)據(jù)庫會提示錯誤信息。若將某個數(shù)據(jù)文件設(shè)置為脫機(jī)時,“除非使用介質(zhì)恢復(fù),否則不允許立即脫機(jī)”。如將某個數(shù)據(jù)文件設(shè)置為聯(lián)機(jī)時,會提示“數(shù)據(jù)文件5,需要介質(zhì)恢復(fù)”。注意這里的5代表的是數(shù)據(jù)文件的絕對文件號。在Oracle數(shù)據(jù)庫中文件號是數(shù)據(jù)庫系統(tǒng)標(biāo)識數(shù)據(jù)文件的一個工具,就好像人的身份證一樣,唯一標(biāo)識了一個數(shù)據(jù)文件。在Oracle中,文件號分為絕對文件號和相對文件號。絕對文件號是在整個數(shù)據(jù)庫中唯一的標(biāo)識一個數(shù)據(jù)文件。而相對文件號是在表空間中唯一的標(biāo)識一個數(shù)據(jù)文件。也就是說,相對文件號在同一個表空間內(nèi)是唯一的,但是并不保障在整個數(shù)據(jù)庫內(nèi)是唯一的。此時數(shù)據(jù)庫可能需要表空間與相對文件號兩個參數(shù)才能夠唯一的定位數(shù)據(jù)文件。對于中等規(guī)模以下的數(shù)據(jù)庫系統(tǒng),往往相對文件號與絕對文件號是相同的。但是當(dāng)數(shù)據(jù)庫變得很大時,相對文件號與決定文件號就可能有所差異。由于在錯誤信息中沒有直接說明數(shù)據(jù)文件的名稱,為此數(shù)據(jù)庫管理員不得不先將這個文件號轉(zhuǎn)換到對應(yīng)的數(shù)據(jù)文件名字,然后再去想解決方法。(IT專家網(wǎng)獨(dú)家:重定位數(shù)據(jù)文件的位置)
可見,如果當(dāng)數(shù)據(jù)庫采用非歸檔模式時,就無法采用上面方式將數(shù)據(jù)文件聯(lián)機(jī)或者脫機(jī)。此時需要稍微修改一下上面的語句來完成。如可以將這個語句改為:
ALTER DATABASE DATAFILE ‘?dāng)?shù)據(jù)文件存儲路徑與名字’ OFFLINE DROP;
即需要在原先的語句后面加入DROP關(guān)鍵字。此時就可以正常將非歸檔模式下的數(shù)據(jù)文件脫機(jī)了。不過需要注意的一點(diǎn)就是,無非采用正常的方式將非歸檔模式下的數(shù)據(jù)文件設(shè)置為聯(lián)機(jī)。正常情況下,只有采用介質(zhì)恢復(fù)的形式才能夠?qū)⒎菤w檔模式下的數(shù)據(jù)文件設(shè)置為聯(lián)機(jī)。所以說,如果數(shù)據(jù)庫采用的是非歸檔模式,那么在將數(shù)據(jù)文件設(shè)置為脫機(jī)時,就需要慎重了。因?yàn)榇藭r再想將脫機(jī)的數(shù)據(jù)文件設(shè)置為聯(lián)機(jī),可沒有這么簡單了。
三、更改數(shù)據(jù)文件可用性的注意事項(xiàng)。
從以上的分析中可以看出要改變某個數(shù)據(jù)文件的狀態(tài),特別是歸檔模式下數(shù)據(jù)文件的可用性,并不是很困難的一件事情。不過在維護(hù)數(shù)據(jù)文件可用性的時候,下面的一些內(nèi)容還需要引起各位數(shù)據(jù)庫管理員的注意。
1、 系統(tǒng)表空間不能夠脫機(jī)。
在Oracle數(shù)據(jù)庫中,表空間可以分為系統(tǒng)表空間和非系統(tǒng)表空間。這里需要明白的是,系統(tǒng)表空間中的數(shù)據(jù)文件無法設(shè)置為脫機(jī)。后續(xù)大家還沒有認(rèn)識到這個的重要性。系統(tǒng)表空間中的數(shù)據(jù)文件無法脫機(jī),就表示當(dāng)數(shù)據(jù)庫投入生產(chǎn)之后,就無法更改系統(tǒng)表空間中數(shù)據(jù)文件的存儲位置。所以在數(shù)據(jù)庫規(guī)劃時,就好規(guī)劃好系統(tǒng)表空間中數(shù)據(jù)文件的存儲。另外,也不要將用戶的數(shù)據(jù)文件存放到這個系統(tǒng)表空間中。
2、 表空間可用性與數(shù)據(jù)文件可用性之間的關(guān)系。
數(shù)據(jù)庫表空間的可用性與數(shù)據(jù)文件的可用性存在著很密切的聯(lián)系。一般來說,當(dāng)將某個表空間設(shè)置為脫機(jī)或者聯(lián)機(jī)時,這個表空間下面的所有數(shù)據(jù)文件的可用性也會隨之變?yōu)槊摍C(jī)或者聯(lián)機(jī)。但是,反過來即不成立。如先通過表空間脫機(jī)將所有的數(shù)據(jù)文件的可用性設(shè)置為脫機(jī)狀態(tài)。然后再一一的將這個表空間的數(shù)據(jù)文件全部設(shè)置為聯(lián)機(jī),此時這些數(shù)據(jù)文件仍然不可用。這主要是因?yàn)檫@些數(shù)據(jù)文件的主人,表空間的使用狀態(tài)還是為脫機(jī)。所以說,數(shù)據(jù)文件可用性的改變,不會影響到表空間。但是表空間使用狀態(tài)的改變,卻會影響其下面的所有數(shù)據(jù)文件。
這個特性有時候很有用。如現(xiàn)在數(shù)據(jù)庫管理員出于性能優(yōu)化的考慮,要將某個表空間移植到另外一個快性能更佳的硬盤上,以減少硬盤I/O的沖突。此時就需要將這個表空間的數(shù)據(jù)文件設(shè)置為脫機(jī)。為此數(shù)據(jù)庫管理員就不需要一一的去改變這個表空間下面數(shù)據(jù)文件的可用性。而是可以直接將這個表空間設(shè)置為脫機(jī),那么下面數(shù)據(jù)文件的可使用狀態(tài)也會發(fā)生相應(yīng)的改變。然后就可以移動這些數(shù)據(jù)文件的位置了。等到移動完成后,再將這個表空間設(shè)置為聯(lián)機(jī)即可。此時這個表空間下面的所有數(shù)據(jù)文件也會變?yōu)槁?lián)機(jī)。可見,通過表空間的可用性來維護(hù)數(shù)據(jù)文件的可用性,在需要維護(hù)整個表空間中數(shù)據(jù)文件的可用形時是非常便捷的一個方式。不過這里仍然需要注意一點(diǎn),就是其仍然受到歸檔模式與非歸檔模式兩種操作模式的限制。
最后需要說明的一點(diǎn)就是,數(shù)據(jù)文件在創(chuàng)建數(shù)據(jù)庫或者增加數(shù)據(jù)文件時就會被創(chuàng)建。如現(xiàn)在為某個表空間增加了一個數(shù)據(jù)文件,即使這個數(shù)據(jù)文件還沒有數(shù)據(jù),系統(tǒng)就已經(jīng)為其分配了存儲空間。為此當(dāng)數(shù)據(jù)文件創(chuàng)建后要調(diào)整數(shù)據(jù)文件的名字與位置時,會比較麻煩。所以筆者建議數(shù)據(jù)庫管理員,在創(chuàng)建數(shù)據(jù)文件之前先要對其進(jìn)行合理的規(guī)劃,以免后續(xù)調(diào)整的麻煩。在數(shù)據(jù)文件創(chuàng)建之后,最好不要隨意的通過更改可用性來調(diào)整數(shù)據(jù)文件的配置。