程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle的物理存儲結構

Oracle的物理存儲結構

編輯: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

從上述的結果看,系統當前運行的日志文件組已經改變。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved