標籤:blog http io 使用 ar strong for 檔案 資料
資料庫管理員可以在資料庫處於開啟(open)狀態時令除 SYSTEM 資料表空間(tablespace)之外的任何錶空間聯機(online)(可訪問)或離線(offline)(不可訪問)。SYSTEM 資料表空間在資料庫處於開啟(open)狀態時總是處於聯機狀態,因為Oracle需要使用其中的資料字典(data dictionary)。
資料表空間(tablespace)通常處於聯機(online)狀態,以便資料庫使用者訪問其中的資料。但是資料庫管理員可以在對錶空間進行維護,備份或恢複操作時,令資料表空間離線(offline)。
令資料表空間離線
當一個資料表空間(tablespace)離線(offline)後,Oracle不允許任何SQL語句繼續引用此資料表空間內的對象(schema object)。如果一個活動事務(activetransaction)中的 SQL 陳述式正好在使用被置為離線狀態的資料表空間內的對象,其事務性也不會被破壞。Oracle使用 SYSTEM 資料表空間內的延遲復原段(deferred rollback segment)為此事務中已完成的 SQL 陳述式儲存復原資訊(rollback data)。當離線資料表空間被重新置位聯機(online)狀態後,Oracle會在需要時應用這些復原資訊。
資料表空間(tablespace)聯機(online)或離線(offline)時,SYSTEM 資料表空間內的資料字典(data dictionary)會進行記錄。如果使用者關閉(shut down)一個資料庫時某個資料表空間處於離線狀態,那麼這個資料表空間在資料庫下次被裝載(mount)、開啟(open)後依舊保持離線狀態。
使用者只能將一個資料表空間(tablespace)聯機(online)到建立她的資料庫中,因為只有這個資料庫的 SYSTEM 資料表空間中才儲存著與此資料表空間相關的必要的資料字典(data dictionary)資訊。一個離線(offline)的資料表空間不能被Oracle之外的工具開啟或編輯。因此離線資料表空間不能被移動到其他資料庫中。
當某些錯誤發生時,Oracle會自動地將相關的聯機資料表空間(online tablespace)切換到離線(offline)狀態。例如,當資料庫寫入進程(database writerprocess,DBWn)多次嘗試向資料表空間的資料檔案(datafile)寫入失敗後,Oracle就會將此資料表空間切換到離線狀態。此時嘗試訪問離線資料表空間內資料表的使用者將會得到錯誤資訊。如果是介質故障(media failure)導致此次磁碟 I/O 失敗,使用者必須在處理故障後恢複(recover)受影響的資料表空間。
特殊情況下的資料表空間使用
使用者可以將不同類型的資料分開儲存在不同的資料表空間(tablespace)中。當使用者因為某些任務而令某個資料表空間離線(offline)後,其餘資料表空間仍保持聯機(online)狀態,其中的資料對使用者依然可用。但是資料表空間離線後也會導致特殊情況發生。例如,有兩個資料表空間分別用於儲存表及此表對應的索引,將出現以下問題:● 如果包含索引的資料表空間離線,那麼查詢依舊可以訪問表資料,因為對錶資料的訪問並不一定需要索引資料。
● 如果包含表的資料表空間離線,那麼查詢將無法訪問表資料,因為離線資料表空間內的對象無法被引用。
如果Oracle能夠從聯機(online)資料表空間(tablespace)中獲得執行一個SQL語句的足夠的資訊,那麼語句就將被執行。如果相關資訊必須從離線(offline)的資料表空間中獲得,那麼語句將失敗。
唯讀資料表空間
使用唯讀資料表空間(read-only tablespace)的主要目的是為了避免對靜態、且容量大的資料庫內容進行備份和恢複操作。Oracle不會更新唯讀資料表空間內的資料,因此這類資料表空間的資料檔案(datafile)可以放置在 CD-ROM 或 WORM之類的唯讀介質(read-only media)上。
提示:使用者只能將一個資料表空間(tablespace)聯機(online)到建立她的資料庫,因此唯讀資料表空間(read-only tablespace)技術不適用於存檔工作(archiving)。
唯讀資料表空間(read-only tablespace)不能被修改。如需更新一個唯讀資料表空間,首先要使資料表空間可讀寫。在更新後,還可以將資料表空間恢複到唯讀狀態。
因為唯讀資料表空間(read-only tablespace)不能被修改,只要沒有將唯讀資料表空間置於可讀寫狀態,就無需對其進行重複的備份操作。當使用者需要恢複資料庫時,也沒必要恢複唯讀資料表空間,原因同前所述。
進行此操作必須具有ALTER TABLESPACE 或 MANAGE TABLESPACE 系統許可權,GRANT ALTER TABLESPACE TO "USER";
GRANT MANAGE TABLESPACE TO "USER";(雙引號內必須大寫)
也可以使資料表空間中所有的資料檔案或臨時檔案離線,然後還能聯機,而不影響資料表空間自己的離線或聯機狀態。
離線資料表空間的原因
● 使資料庫的一部分失效,同時允許對資料庫剩餘部分進行正常訪問。
● 進行離線資料表空間備份(儘管資料表空間在聯機並正使用的情況下也能備份)
● 在升級或維護應用程式時,使應用程式和它的那組表臨時不可用。
離線資料表空間選項
NORMAL
如果資料表空間所有資料檔案都沒有錯誤,資料表空間可以正常離線。寫入錯誤導致資料表空間所有資料檔案都不能離線。當指定OFFLINE NORMAL時,Oracle對所有資料檔案一邊進行檢查一邊將他們離線。
TEMPORARY
資料表空間能臨時離線,即使資料表空間的一個或多個資料檔案有錯誤。當指定OFFLINE TEMPORARY選項時,Oracle將還沒離線的資料檔案離線,同時對他們進行檢查。如果沒有資料檔案離線,然後用臨時選項離線,當聯機資料表空間時不需要介質恢複。但是,如果有資料表空間的檔案因寫入錯誤離線,然後將資料表空間臨時離線,在將資料表空間聯機之前需要介質恢複。
IMMEDIATE
資料表空間能立即離線,不等Oracle對任何資料檔案做檢查。在指定OFFLINE IMMEDIATE的情況下,當聯機資料表空間時需要介質恢複。如果資料庫運行在NOARCHIVELOG模式下,資料表空間不能立即離線。
FOR RECOVER
將在恢複集中的資料庫資料表空間離線,以便進行時間點恢複。
注意:
如果必須離線資料表空間,盡量用NORMAL選項(預設)。這將保證資料表空間聯機時不需要恢複。儘管部分恢複後用ALTER DATABASE OPEN RESETLOGS語句重設了重做日誌序列,依然不需要恢複。只有當不能正常離線資料表空間的時候才指定TEMPORARY選項。這種情況下,只有因錯誤被離線的檔案在資料表空間聯機時才需要恢複。只有當指定NORMAL和TEMPORARY都不行的情況下才用IMMEDIATE選項。
離線資料表空間前的考慮:
- 驗證資料表空間不含有活動的復原段,這樣的資料表空間不能離線。
- 你可能想改變資料表空間的位置,這個資料表空間的使用者已經將它指定為預設的或臨時的資料表空間。這是明智的,因為當離線時,他們不能訪問資料表空間的對象,不能排序資料表空間地區(sort areas in the tablespace)。
聯機資料表空間
只要資料庫開啟,Oracle資料庫的資料表空間都能恢複聯機。如果要聯機的資料表空間不是“乾淨”離線(即用NORMAL選項的ALTER TABLESPACE OFFLINE語句),在聯機之前必須先對錶空間進行介質恢複。否則,Oracle返回錯誤並保持資料表空間離線。
改變資料檔案或臨時檔案的可用性
ALTER TABLESPACE語句的子句能改變資料表空間中所有資料檔案或臨時檔案的聯機或離線狀態。影響聯機/離線狀態的特定語句:
ALTER TABLESPACE ... DATAFILE {ONLINE|OFFLINE}
ALTER TABLESPACE ... TEMPFILE {ONLINE|OFFLINE}
你只需要輸入資料表空間名稱,不是單獨的資料檔案或臨時檔案。所有資料檔案或臨時檔案都受到影響,但資料表空間自己的聯機/離線狀態不變。大多數情況下,上面ALTER TABLESPACE語句能執行,只要資料庫掛載,即使沒有開啟。如果是SYSTEM資料表空間,重做資料表空間,或預設暫存資料表空間,資料庫一定不能開啟。ALTER DATABASE DATAFILE 和 ALTER DATABASE TEMPFILE語句也有ONLINE/OFFLINE子句,但在那些語句裡需要輸入所有資料表空間的檔案名稱。文法與改變資料表空間可用性的ALTER TABLESPACE … ONLINE|OFFLINE語句不同,因為那是不同的操作。ALTER TABLESPACE語句將資料檔案和資料表空間離線,但不能用於改變暫存資料表空間或它的臨時檔案。
案例:
SELECT tablespace_name FROM dba_tablespaces
ALTER TABLESPACE users OFFLINE NORMAL;
ALTER TABLESPACE users ONLINE;
Oracle 資料表空間聯機(online)與離線(offline)