資料表空間的狀態(一),資料表空間狀態

來源:互聯網
上載者:User

資料表空間的狀態(一),資料表空間狀態

前幾天問一個資料表空間狀態的問題,也暴露了自己基礎知識的薄弱,之所以總結如下兩篇博文,主要還是讓自己靜下心來,補一下相關知識點,並通過實踐強化自己的理解。

主要參考:

《11g Concept》

《11g Administrator's Guide》


資料表空間的ONLINE和OFFLINE狀態

1. 只要資料庫處於OPEN狀態,除了SYSTEM資料表空間外的其他資料表空間,都可以將其置為online或offline狀態。SYSTEM資料表空間之所以不能置為offline,是因為其中儲存的資料字典需要一直使用。將資料表空間置為offline,可能的原因包括維護、備份以及恢複等目的。

3. 如果資料表空間處於offline狀態,那麼Oracle不會允許任何對該資料表空間中對象的SQL執行。資料表空間置為offline時仍處於活動狀態的語句在交易層級並不會受影響。Oracle會儲存這些尚未完成語句相關的復原資料到SYSTEM資料表空間。當資料表空間置為online時,如果有必要,那麼Oracle會應用這些復原資料。

3. 除了Oracle外,沒有任何應用能夠讀取或編輯offline的資料表空間。因此,offline的資料表空間更不能導到其他資料庫。

4. Oracle在一些情境下會自動切換資料表空間狀態從online到offline。例如,當資料庫寫進程DBWn,嘗試幾次仍不能寫入資料表空間的資料檔案中。使用者訪問offline資料表空間時會收到一個報錯。如果造成這種磁碟IO失敗的問題是介質錯誤,解決這問題之後需要恢複資料表空間。

5. 將資料表空間置為offline可能包含如下原因:

(1) 需要禁止訪問一部分資料庫的情境。

(2) 執行一次offline資料表空間備份(儘管資料表空間可以在online和使用方式下備份)。

(3) 當更新或維護應用時,需要讓應用和對應的表臨時不能訪問。

(4) 重新命名或重分配資料表空間中的資料檔案。

當資料表空間置為offline,資料庫會將關聯的所有資料檔案都置為offline狀態。但是如下資料表空間不能置為offline:

> SYSTEM

> UNDO資料表空間

> 暫存資料表空間

6. 將資料表空間置為offline之前,若有使用者佈建該資料表空間為其預設資料表空間,需要考慮是否需要改變其預設資料表空間。之所以這樣做,是因為這些使用者將不能訪問offline資料表空間中的對象。

7. 使用ALTER TABLESPACE ... OFFLINE語句可以添加如下參數:

NORMAL:如果資料表空間的任何資料檔案沒有出現錯誤,資料表空間能夠正常地置為offline。如果出現寫錯誤,那麼資料表空間中的資料檔案不會被置為offline。當明確使用OFFLINE NORMAL,資料庫會對所有資料檔案進行一次checkpoint檢查點事件,NORMAL是預設設定。

TEMPORARY:資料表空間能夠臨時置為offline狀態,即使一個或多個檔案出現錯誤。當使用OFFLINE TEMPORARY,資料庫會將還沒有置為offline的資料檔案進行置位操作,並執行檢查點事件。

如果沒有檔案是offline,但使用了temporary語句,那麼當將資料表空間置為online時不需要介質恢複。然而,如果資料表空間的一個或多個檔案由於寫入錯誤因此導致offline狀態,能夠臨時將資料表空間置為offline狀態,恢複online之前需要對錶空間進行恢複操作。

IMMEDIATE:資料表空間能夠立即設定為offline狀態,資料庫不會進行任何資料檔案的檢查點事件。當使用OFFLINE IMMEDIATE,那資料表空間置為online之前需要對錶空間進行介質恢複操作。但是如果資料庫處於NOARCHIVELOG模式,資料表空間就不能立即置為offline狀態。

8. 如果必須設定資料表空間為offline狀態,建議首先使用預設的NORMAL語句。他會確保當資料表空間置為online前不需要執行恢複操作,儘管在不完全恢複之後,使用LATER DATABASE OPEN RESTLOGS語句重設了redo日誌sequence。

僅僅當不能使用NORMAL方式將資料表空間置為offline時,可以使用TEMPORARY。使用TEMPORARY後,在資料表空間置為online前,僅需要恢複那些出錯的offline檔案。

如果NORMAL和TEMPORARY都失敗時,才可以選擇使用IMMEDIATE選項。

9. 如果資料表空間沒有“乾淨地”置為offline(也就是沒有使用NORMAL語句執行的offline操作),那麼置為online前需要首先對該資料表空間執行介質恢複操作。否則資料庫會報錯,資料表空間仍處於offline狀態。


實驗:

1. 設定資料表空間DCSOPEN_TBS為offline

SQL> alter tablespace dcsopen_tbs offline;

Tablespace altered.


2. 查詢資料檔案狀態

select file#, name, status from v$datafile;

file  #name status
---  ------------------------------------------------------ ----------

11   /oracle/oradata_petest/petest/dcsopen_tbs02.dbf OFFLINE

DCSOPEN_TBS使用的資料檔案狀態已經置為OFFLINE。


3. 嘗試查詢已OFFLINE資料表空間

SQL> select * from test;
select * from test
              *
ERROR at line 1:
ORA-00376: file 7 cannot be read at this time
ORA-01110: data file 7: '/oracle/oradata_petest/petest/dcsopen_tbs01.dbf'

報錯,提示此時資料檔案不能讀。


4. 將資料表空間置為online

SQL> alter tablespace dcsopen_tbs online;

Tablespace altered.


file  #name status
---  ------------------------------------------------------ ----------

11   /oracle/oradata_petest/petest/dcsopen_tbs02.dbf ONLINE


未完待續。。。

To be continued ...


建立永久資料表空間 與 建立資料表空間一樣?如果不一樣有什不同?

幾個概念你可以明晰一下
永久資料表空間:

一般儲存資料的資料表空間,系統資料表空間,普通使用者使用的資料表空間都為永久資料表空間,永久資料表空間的狀態有三種:讀寫,唯讀,離線,只有在永久資料表空間,才能配置ASSM管理員模式,可以設定記錄記錄模式。建立選yes,以便資料庫出問題後進行恢複,以設定為系統預設資料表空間。這樣,建立使用者時,沒有指定預設資料表空間,就自動化佈建為系統預設資料表空間。
暫存資料表空間:
一般用來排序和建立索引時使用,暫存資料表空間裡不存放實際的資料,所以,即使出了問題,也不需要恢複,而且,也不需要備份,因此也不需要記錄日誌,暫存資料表空間只能使是讀寫入模式,而且只能為手動管理段空間模式,可以設定為系統預設暫存資料表空間。這樣,建立使用者時,沒有指定預設暫存資料表空間,就自動化佈建為系統預設暫存資料表空間。
復原段資料表空間:
用來存放修改中資料的原資料,復原段資料表空間是用來保證資料讀一致性的。
 
在oracle中,所謂的聯機狀態是什?

說的通俗一點,資料表空間處於聯機狀態也就是ONLINE狀態,也就是可用的。使用者可以從中
進行讀寫操作。如果處於離線狀態則使用者無法從中讀取資料。
從備份角度來看:備份可以分聯機備份和離線備份,聯機備份是指你不用關閉資料庫而對其做備份操作,兒離線備份則需要shutdown掉資料庫再備份
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.