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