Oracle體系結構之-物理結構

pingyuan發表於2008-08-07
Oracle體系結構之-物理結構[@more@]

一、物理檔案的分類
Oracle資料庫的物理檔案可以分成三類:

·資料檔案
·日誌檔案
·控制檔案

二、資料檔案
資料檔案顧名思義是用來儲存資料的。例如:表,索引等等。從資料檔案中讀取出來的資料會首先存放在記憶體中的SGA,作為緩衝資料。應用對資料的修改也是先保持在SGA中。由DBWR在某一時刻將其寫入到資料檔案中。

那麼如何檢視資料庫中的資料檔案呢?我們可以使用以下的SQL語句:

SQL>select * from dba_data_files;
SQL>select * from v$datafile;
第一個SQL語句查詢到的是檔案的靜態資訊,第二個SQL語句查詢到的動態資訊,其中特別重要的就是系統的檢查號(SCN)。

我們可以透過查詢dba_free_space表來了解各個表空間的使用資訊,從這個表中我們看到每一個表空間下每一個塊的BLOCK_ID,BYTES,BLOCKS值。

SQL>select * from dba_free_space;
我們可以透過給某個表空間新增資料檔案來增加其儲存空間的大小,例如:

SQL>alter tablespace 'table space name' add datafile 'data file name' size ***m autoextend off;

如果我們覺得資料檔案的可用空間已經所剩不多了,那麼要重新調整資料檔案的大小,這時就可用透過執行以下的SQL語句來完成了:

SQL>alter database dbname datafile 'data file name' resize ***M

但是如果每次都要管理員手動來調整增加表空間的大小是一件很麻煩的事情,所以Oracle為我們提供了一些關鍵字,透過這些關鍵字我們可以輕鬆地讓表空間在空間不夠時自動擴充套件表空間。例如:

SQL>alter database dbname datafile 'data file name' autoextended on next 50m maxsize unlimited;
上面的SQL語句使到資料庫dbname下面的資料檔案'data file name'在空間不夠時自動擴充套件,每次擴充套件50M。不設上限。

如果我們不加以控制的話,那麼表空間有可能無限制地擴充套件下去,所以我們又可以透過maxsize來限制上限。

SQL>alter database dbname datafile 'data file name' autoextend on next 50m maxsize 400m;

二、重做日誌檔案

重做日誌檔案記錄了對資料庫的所有修改的資訊。

每一個Oracle資料庫中都有至少兩個的重做日誌檔案組,每個重做日誌檔案組都包含了一個到多個的重做日誌檔案-即日誌成員。同一個日誌檔案組中的各個日誌成員之間是映象關係,它們的內容都是一模一樣的。

Oracle在寫日誌的時候是以日誌組為單位的,只有寫完了同一個日誌組中的所有日誌成員之後,寫日誌才會結束。當一個日誌檔案組中所有的成員同時被寫滿資料時,系統自動轉換到下一個日誌檔案組,這個轉換過程稱為日誌切換。

當日志切換後,會給前一個日誌組編一個號,用於歸檔日誌的編號,這個編號稱為日誌序列號。此編號由1開始,每切換一次,序列號自動加1,最大值受引數MAXLOGHISTORY限制,該引數的最大值為65534。

當oracle把最後一個日誌組寫滿了以後,自動轉向第一個日誌組,這時,再向第一個日誌組寫日誌的時候, 如果資料庫執行在非歸檔模式下,這個日誌組中的原有日誌資訊就會被覆蓋。

如果我們想檢視日誌檔案的具體資訊,可以透過以下的SQL語句來檢視:

SQL>select * from v$log
這個動態檢視的查詢結果中包含了幾個比較重要的資訊,例如:

·GROUP#:日誌檔案組號
·SEQUENCE#:日誌序列號
·STATUS:該組狀態(CURRENT表示當前正在使用的,NACTIVE表示非活動組,ACTIVE表示歸檔未完成)
·FIRST_CHANGE#:系統改變號SCN(也稱為檢查點號)

上面我們提到日誌檔案有兩種方式,第一種是非歸檔日誌(NOARCHIVELOG),第二種是歸檔日誌(ARCHIVELOG)。其中非歸檔日誌在切換時,原日誌檔案的內容會被新的日誌內容所覆蓋,而對於對檔模式日誌,Oracle會首先對原日誌檔案進行歸檔儲存,且在歸檔未完成之前不允許覆蓋原日誌。

如果我們想了解自己的資料庫到底採用什麼型別的日誌模式,可以使用以下語句查詢

SQL>select log_mode from v$database

上面我們提到一個叫做SCN(系統檢查點號)的東西,SCN是系統恢復時一個非常重要的標誌,在資料檔案,日誌檔案,控制檔案,資料庫頭都包含了這個標記。SCN由Oracle的後臺程式CKPT在DBWR將資料寫入磁碟後更新。查詢SCN的方式有3種:

SQL>select first_change# from v$log;
SQL>select checkpoint_change# from v$datafile;
SQL>select checkpoint_change# from v$database;
三、控制檔案
控制檔案是一個二進位制檔案,用來描述資料庫的物理結構,一個資料庫只需要一個控制檔案,控制檔案的內容包括:

·資料庫名及資料庫惟一標識
·資料檔案及日誌檔案的標識
·系統恢復的必要資訊,即SCN

我們可以在Oracle的init.ora檔案中看到這樣一個引數:controller_files = ('file1','file2'...'filen'),這說明資料庫有多個控制檔案,這些控制檔案彼此之間都是映象的關係。只要其中一個檔案是完好的資料庫就可以啟動。

同樣的,我們也可以透過如下的SQL語句來檢視控制檔案的資訊:

SQL>select * from v$controller_file

總結:

Oracle中各種物理檔案的操作

操作專案

SQL語句

建立資料檔案

alter tablespace *** add datafile *** size ***m autoextend on maxsize unlimited
調整資料檔案alter database *** datafile *** resize ***m
檢視資料檔案select * from dba_data_files/select * from v$datafile
檢視空閒空間select * from dba_free_space
檢視日誌檔案select * from v$log
檢視檢查點號select first_change# / checkpoint_change# from v$log/v$datafile/v$database
檢視控制檔案select * from v$controller

注:本文參考了CSDN網友方友松的技術Blog,作者Blog地址:http://blog.csdn.net/truexf/

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

相關文章