Oracle的實體儲存體結構,oracle實體儲存體
Oracle資料庫的體繫結構是從某一角度來分析資料庫的組成,工作過程以及資料庫如何管理和組織資料的,主要包括實體儲存體結構,邏輯儲存結構,記憶體結構以及進程結構。
Oracle的實體儲存體結構:
Oracle實體儲存體結構主要包括三種類型的物理檔案,分別是資料檔案(*.dbf),控制檔案(*.ctl)和重做記錄檔(*.log)。
1. 資料檔案
資料檔案主要是儲存資料的檔案。例如,資料文儲存的表的記錄和索引。在這些資料檔案中,如果使用者頻繁的訪問某些資料,那麼這些資料就會被儲存在記憶體的緩衝區中。當對這些資料進行讀取時,Oracle首先會從記憶體de緩衝區中找到相關的資料資訊。如果記憶體的緩衝區中不存在相關的資料,則從資料庫檔案中讀取資料,然後存放到記憶體的資料緩衝區中,以供查詢時使用。這種資料的存取方式不僅可以減少磁碟的I/O操作,還可以提高系統的相應效能。
如果需要瞭解資料檔案的資訊可以通過查詢資料字典視圖DBA_DATA_FILES和V$DATAFILE。首先通過DESC命令來瞭解一下資料字典視圖DBA_DATA_FILES和V$DATAFILE的結構,資料字典視圖DBA_DATA_FILES的結構如下:
SQL> DESCDBA_DATA_FILES;
名稱 是否為空白? 類型
----------------------------------- --------------------------------
FILE_NAME VARCHAR2(513)
FILE_ID NUMBER
TABLESPACE_NAME VARCHAR2(30)
BYTES NUMBER
BLOCKS NUMBER
STATUS VARCHAR2(9)
RELATIVE_FNO NUMBER
AUTOEXTENSIBLE VARCHAR2(3)
MAXBYTES NUMBER
MAXBLOCKS NUMBER
INCREMENT_BY NUMBER
USER_BYTES NUMBER
USER_BLOCK NUMBER
ONLINE_STATUS VARCHAR2(7)
在上述的結果中,FILE_NAME表示資料檔案的名稱以及存放的路徑;FILE_ID表示資料檔案在資料庫中的ID號;TABLESPACE_NAME表示資料檔案對應的資料表空間名;BYTES表示的是資料檔案的大小;BLOCKS表示資料文
件所佔用的資料區塊;STATUS表示資料檔案的狀態;AUTOEXTENSIBLE表示資料檔案是否可擴充。資料字典
視圖V$DATAFILE記錄了資料檔案的動態資訊,其結構如下:
SQL> DESCV$DATAFILE;
名稱 是否為空白? 類型
----------------------------------- --------------------------------
FILE# NUMBER
CREATION_CHANGE# NUMBER
CREATION_ TI DATE
TS# NUMBER
RFILE# NUMBER
STATUS VARCHAR2(7)
ENABLED VARCHAR2(10)
CHECKPOINT_CHAN NUMBER
CHECKPOINT_TIME DATE
UNRECOVERABLE_CHANGE# NUMBER
UNRECOVERABLE_TIME DATE
LAST_CHANGE# NUMBER
LAST_TIME DATE
OFFLINE_CHANGE# NUMBER
ONLINE_CHANGE# NUMBER
ONLINE_TIME DATE
BYTES NUMBER
BLOCKS NUMBER
CREATE_BYTES NUMBER
BLOCK_SIZE NUMBER
NAME VARCHAR2(513)
PLUGGED_IN NUMBER
BLOCK1_OFFSET NUMBER
AUX_NAME VARCHAR2(513)
FIRST_NONLOGGED_SCN NUMBER
FIRST_NONLOGGED_TIME DATE
FOREIGN_DBID NUMBER
FOREIGN_CREATION_CHANGE# NUMBER
FOREIGN_CREATION_TIME DATE
PLUGGED_READONLY VARCHAR2(3)
PLUGIN_CHANGE# N MBER
PLUGIN_RESETLOGS_CHANGE# NUMBER
PLUGIN_RESETLOGS_TIME DATE
CON_ID NUMBER
在上述的結果中FILE#表示存放資料檔案的編號;STATUS表示資料檔案的狀態;CHECKPOINT_CHANGE#表示資料檔案的同步號,隨著系統的運行自動修改,以鑑效組資料檔案的同步;BYTES表示資料檔案的大小;BLOCKS表示資料檔案所佔用的資料區塊數;NAME表示資料檔案的名稱以及存放的路徑。
2. 控制檔案
控制檔案是一個很小的二進位檔案,主要包含與關於資料庫物理結構的重要訊息,存放資料庫中的資料檔案和記錄檔的資訊。
控制檔案對於資料庫的成功啟動和正常運行至關重要。在載入資料庫時必須先找到資料庫的控制檔案。如果控制檔案正常,執行個體才能載入並開啟資料庫。但是如果控制檔案中記錄了錯誤的資訊,或者執行個體無法找到一個可用的控制檔案,資料庫將無法載入,當然也無法開啟。
一個Oracle資料庫通常包含有多個控制檔案,在資料庫啟動並執行過程中,Oracle資料庫需要不斷的更新控制檔案,因此控制檔案必須在整個資料庫開啟期間始終保持可用狀態。如果某種原因導致控制檔案不可用,那麼資料庫將會崩潰。
控制檔案的資訊可以通過資料字典視圖V$CONTROLFILE來瞭解,其結構如下:
SQL> DESC V$CONTROLFILE;
名稱 是否為空白? 類型
----------------------------------- -------------
STATUS VARCHAR2(7)
NAME VARCHAR2(513)
IS_RECOVERY_DEST_FILE VARCHAR2(3)
BLOCK_SIZE NUMBER
FILE_SIZE_BLKS NUMBER
CON_ID NUMBER
在上述的結果中,STATUS表示控制檔案的狀態;NAME表示控制檔案的名稱以及路徑的資訊。例如查詢控制檔案的名稱以及路徑資訊,如下:
SQL> SELECT NAME FROM V$CONTROLFILE;
NAME
-------------------------------------------------
D:\ORACLE\ORADATA\ORACLE12C\CONTROL01.CTL
D:\ORACLE\ORADATA\ORACLE12C\CONTROL02.CTL
從上述的結果可以看出,Oracle一般會預設建立兩個包含相同資訊的控制檔案。其目的是為了當其中一個控制檔案受損時可以調用另一個控制檔案繼續工作。
3. 重做記錄檔
重做記錄檔即日至檔案,主要記錄使用者對資料庫的操作資訊。記錄檔是資料庫系統中最重要的檔案之一,通過記錄檔可以保證資料庫的安全,也可以實現資料庫的備份與恢複。一旦記錄檔受損,那麼資料庫可能無法正常運行。
為了確保日誌的安全,在實際的應用中,允許對記錄檔進行鏡像,記錄檔與其鏡像檔案記錄同樣的日誌資訊,他們構成一個記錄檔組,同一個組中的記錄檔最好存放在不同的磁碟中,以便可以保證一個記錄檔受損時,還有其他的記錄檔提供日誌資訊。
通過資料字典V$LOG,可以瞭解系統當前正在使用哪個記錄檔組,如下:
SQL>SELECT GROUP#,MEMBERS,STATUS FROM V$LOG;
GROUP# MEMBERS STATUS
-------------------- ----------------
1 1 INACTIVE
2 1 CURRENT
3 1 INACTIVE
4 2 INACTIVE
在上述的結構中,如果STATUS欄位的值為CURRENT,則表示當前系統正在使用該欄位對應的記錄檔組。
當一個記錄檔組的空間被佔用完之後,Oracle系統會自動轉換到另一個記錄檔組,不過,管理員可以使用ALTER STSTEM命令驚醒手動切換記錄檔。如下:
SQL> ALTER SYSTEM SWITCH LOGFILE;
系統已更改。
重新查詢資料字典V$LOG,如下:
SQL> SELECT GROUP#,MEMBERS,STATUS FROMV$LOG;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 1 INACTIVE
2 1 ACTIVE
3 1 CURRENT
4 2 INACTIVE
從上述的結果看,系統當前啟動並執行記錄檔組已經改變。