塗抹ORACLE--第16章--資料庫物理儲存結構(2)

junsansi發表於2010-03-19

塗抹ORACLE試閱章節:第16章-體系結構之資料庫結構

===========================================================================

16.1.2 資料檔案(Datafiles )

  資料庫中的實際資料儲存於資料檔案中。一個資料庫中會有很多個資料檔案。其實不要說資料庫,一個表空間都有可能存在多個資料檔案(表空間是一個邏輯儲存結構,一個資料庫中包含多個表空間),一個資料檔案只能屬於一個表空間。

  每個資料檔案在物理上都對應一個作業系統檔案,或者一個裸裝置。Oracle在建立資料檔案時,是通過作業系統在指定路徑下分配一塊指定大小的磁碟空間,並將這塊空間內的資料清空,然後按照指定的塊大小格式化這塊儲存區域。如果一次分配的空間比較大,那麼視磁碟的I/O速率,本步操作有可能要花費相當長的時間。如果建立資料檔案時,指向的是裸裝置的話,那麼該資料檔案指定的容量不能大於裸裝置最大空間,並且,一個裸裝置上只能建立一個資料檔案。

    提示:什麼叫裸裝置?

    裸裝置,英文叫Raw Device,你可以把它理解成沒有檔案系統的儲存裝置,如剛買回來一塊硬碟,分完區(或者不分割槽),不執行格式化操作,直接掛到作業系統上使用。如果你腦細胞轉得足夠快,這會兒是不是已經琢磨過來了,沒錯,裸裝置就是一種底層原始裝置,作業系統提供的檔案系統不過是於裸裝置之上加了一層管理罷了,因此,某些情況下直接將資料檔案、日誌檔案、控制檔案儲存於裸裝置,能夠在一定程度上提高I/O的讀寫效率(跳過了作業系統層嘛)。不過,號稱Oracle的下一個版本12g就不再提供對裸裝置的支援。

  一定要清晰地認識到,雖然資料檔案是資料的最終存放地,但資料檔案是一個物理概念,無法在建立物件或儲存物件時,為物件指定存放到哪個資料檔案中。物件在儲存時只能指定儲存的表空間,然後由Oracle自動對儲存區域進行分配,如果指定的表空間含有多個資料檔案,那麼該物件就可能被儲存到多個資料檔案中。

  資料檔案有多種狀態,其中聯機(Online)、離線(Offline)和SYSTEM(只有SYSTEM表空間資料檔案的狀態會顯示為SYSTEM)比較常見,只有當資料檔案處於聯機狀態或SYSTEM狀態時,使用者才能正常訪問該資料檔案中儲存的資料。除非DBA手動指定資料檔案(或資料檔案所屬的表空間)為離線狀態,否則在預設情況下資料檔案將一直是聯機狀態。

  要將資料檔案置為離線狀態,可以通過下列語句實現,例如將SCOTT物件的資料檔案置為離線狀態:

    SQL>  ALTER DATABASE DATAFILE  ' F:\ORACLE\ORADATA\JSSBOOK\SCOTT01.DBF '   OFFLINE ;

    Database altered.

  注意喲,SYSTEM 表空間對應的資料檔案必須是SYSTEM狀態。

  將資料檔案置於聯機狀態的語句與上類似,只需要將 OFFLINE 關鍵字換為 ONLINE 即可,例如:

    SQL>  ALTER DATABASE DATAFILE   ' F:\ORACLE\ORADATA\JSSBOOK\SCOTT01.DBF '   ONLINE ;

    Database altered.

  查詢資料庫中資料檔案,以及檔案的狀態可以通過查詢DBA_DATA_FILES和V$DATAFILE兩個檢視實現:

    SQL>  SELECT NAME,STATUS FROM V$DATAFILE;

    NAME                                      STATUS

    ----------------------------------------  -------

    F:\ORACLE\ORADATA\JSSBOOK\SYSTEM01.DBF    SYSTEM

    F:\ORACLE\ORADATA\JSSBOOK\UNDOTBS01.DBF   ONLINE

    F:\ORACLE\ORADATA\JSSBOOK\SYSAUX01.DBF    ONLINE

    F:\ORACLE\ORADATA\JSSBOOK\USERS01.DBF     ONLINE

    F:\ORACLE\ORADATA\JSSBOOK\SCOTT01.DBF     ONLINE

    提示:V$* 和DBA_*的區別。

    你可能會感到疑惑,實現相同(或類似)功能為什麼會有兩種檢視呢?V$*檢視和DBA_*檢視有什麼區別嗎?什麼時候使用V$*檢視,什麼時候應該使用DBA_*檢視呢?

    這裡三思並不想描述得太複雜,下面簡單通過三五十萬字描述一下這幾個問題!噢,你說時間緊任務急,沒空看大段文字,能不能稍簡短描述?這個,好吧,那就把萬字去了說。

    在Oracle的定義中,V$*檢視是指動態效能檢視,而DBA_*(含ALL_*和USER_*等)則是資料字典表,V$*檢視和DBA_*檢視均是由Oracle自行維護的包含資料庫中物件資訊或當前執行狀態的物件,兩者並不一個東西,實現的功能也不同,至多隻是類似。如說上面提到的兩個檢視,都可以用來查詢資料檔案資訊,但是就上面的兩個檢視而言,V$*檢視中提供的資訊更全。

    從應用的角度來看,V$*檢視應用範圍更廣,只要Oracle資料庫啟動到MOUNT狀態,就可以訪問V$*檢視;而對於DBA_*類的資料字典表,只有當Oracle資料庫處於OPEN狀態時才能查詢。究竟何時應使用V$*檢視,何時使用DBA_*檢視,一方面是根據DBA的個人使用習慣而定,另一方面則是Oracle看資料庫的實際狀態。

16.1.3 臨時檔案(Tempfiles )

  臨時檔案並不是指臨時存在的檔案,而是臨時表空間對應的資料檔案,從實際表現上來看,該檔案也不是說用完就會被刪除,而是指該檔案中儲存的物件屬於臨時存在物件。

  這是一類特殊的資料檔案,該檔案也是用來儲存資料。通常,Oracle在執行大規模排序操作時,如果PGA記憶體區中無法存放,就會將資料儲存到臨時表空間中作為中轉,但是這部分空間並不是永久佔用,當操作執行完畢後,這部分空間又可以隨時再被其他操作臨時使用,因此你可以把這類檔案理解成需要時臨時拿來用用的檔案。不過,臨時表空間的資料檔案確實與普通表空間資料檔案有不同之外:

  • 因為臨時表空間必須處於N ologging 模式,因此臨時表空間資料檔案也處於N ologging 模式。
  • 臨時表空間資料檔案不能被置為只讀。
  • 不能通過ALTER DATABASE語句建立臨時表空間資料檔案。
  • 通過RMAN備份時不會備份臨時表空間資料檔案,恢復時自然也不會對其進行恢復。不過10g環境下,通過RMAN執行資料庫恢復後,當開啟資料庫時,會自動建立臨時表空間資料檔案。
  • 臨時表空間資料檔案在分配儲存空間時也與普通表空間資料檔案不同。普通表空間資料檔案分配空間時,需要等待作業系統格式化相應空間。臨時表空間資料檔案是一種稀疏( S parse )型別的檔案,初始建立時只是看起來佔用了指定大小的空間,但實際上此時空間並未真正佔用,這類檔案的空間將會在實際使用時進行分配。

  可以通過DBA_TEMP_FILES或V$TEMPFILE檢視查詢當前資料庫中臨時表空間的資料檔案資訊,例如:

    SQL>  SELECT NAME FROM V$TEMPFILE;

    NAME

    --------------------------------------------------

    F:\ORACLE\ORADATA\JSSBOOK\TEMP01.DBF

=================================================

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-629879/,如需轉載,請註明出處,否則將追究法律責任。

相關文章