【趙強老師】Oracle數據庫的存儲結構

Oracle的存儲結構分爲:物理存儲結構和邏輯存儲結構。

一、物理存儲結構:指硬盤上存在的文件

  • 數據文件(data file)

一個數據庫可以由多個數據文件組成的,數據文件是真正存放數據庫數據的。一個數據文件就是一個操作系統文件。數據庫的對象(表和索引)物理上是被存放在數據文件中的。當我們要查詢一個表的數據的時候,如果該表的數據沒有在內存中,那麼oracle就要讀取該表所在的數據文件,然後把數據存放到內存中。通過下面的語句可以查看當前存在的數據文件和對應的表空間:

select file_name,tablespace_name from dba_data_files;

 

  •  聯機日誌文件(online redo log file)

一個數據庫可以有多個聯機日誌文件,聯機日誌文件包含了重做記錄(undo records).聯機日誌文件記錄了數據庫的改變,例如當一次意外導致對數據的改變沒有及時的寫到數據文件中,那麼oracle就會根據聯機日誌文件中 的信息獲得這些改變,然後把這些改變寫到數據文件中.這也是聯機日誌文件存在的意義.聯機日誌文件中重做記錄的唯一功能就是用來做實例的恢復.比如,一次系統的意外掉電,導致內存中的數據沒有被寫到數據文件中.那麼oralce就會根據聯機日誌文件中的重做記錄功能包數據庫恢復到失敗前的狀態。可以通過下面的語句查看當前存在的日誌文件和對應的日誌組信息:

select member,group# from v$logfile;

 

 注意:Oracle使用日誌組來管理日誌文件。默認有三個日誌組,每組中至少兩個成員。如上圖所示。

另外,我們已經知道了什麼是數據文件和聯機日誌文件,通過下面的圖解來說明他們之間的關係。

  •  控制文件(control file)

一個數據庫至少要有一個控制文件,控制文件中存放的數據庫的"物理結構信息",正是因爲他存放的是數據庫的物理結構信息,所以他就顯得尤其的重要.這些物理結構信息就包括:

  1. 數據庫的名字。

  2. 數據文件和聯機日誌文件的名字及位置。

  3. 創建數據庫時的時間戳。

  4. RMAN備份的元信息

爲了更好的保護數據庫,我們可以鏡像控制文件.每個控制文件中的內容就是相同的.鏡像了控制文件,即使其中的一個控制文件出現了問題,也不會影響到數據庫的損壞,數據的丟失. 在啓動數據庫的時候,oracle就會根據控制文件中的數據文件和聯機日誌文件的信息來打開數據庫.

可以通過下面的語句查看當前存在的控制文件。

select name from v$controlfile;

 

 注意:這裏默認有兩個控制文件,這種方式叫做“多路複用”。

  • 歸檔日誌文件

是聯機日誌文件的副本,他記錄了對數據庫改變的歷史。注意:Oracle默認是非歸檔模式,可以通過下面的語句查看

archive log list;

 

 通過下面的語句,將數據庫切換到歸檔模式。

shutdown immediate
startup mount
alter database archivelog;
alter database open;

  • 參數文件

通常情況下指的就是初始化參數文件(initialization parameter file).參數文件包括了初始化參數文件和服務器端參數文件(server parameter file).在數據庫啓動的時候就會讀取參數文件,然後根據參數文件中的參數來分配SGA並啓動一系列的後臺進程.參數文件中存放的是數據庫和實例的參數.

Oracle的參數文件有兩種類型:

  1. Spfile:二進制形式,9i之後

  2. Pfile:文本形式,9i之前

可以通過下面的語句查看當前的參數文件信息:

show parameter spfile

 

可以使用下面的方式將spfile轉換爲pfile:

create pfile='/home/oracle/pfile.ora' from spfile;

 查看pfile中的參數值:

可以通過下面的語句修改參數的值。

alter system set open_cursors=400 scope=both;
注意:scope的取值有三個:memory、spfile、both

  • 告警日誌文件

記錄了數據庫的重大活動和所發生的錯誤.警報文件按照時間的先後來記錄所發生的重大活動和錯誤.警報文件的名字的格式是 alert_SID.log。警報文件的位置可以通過查詢v$diag_info得到,如下:

select * from v$diag_info;

 

注意:在12c以前的版本,告警日誌的位置可以通過查詢參數background_dump_dest得到。

告警日誌文件中記錄的信息,包括:

  1. 數據庫啓動和停止的信息

  2. 數據庫的結構變化

  3. 強制審計的信息

  4. 死鎖的信息

  •  跟蹤文件

就是跟蹤日誌文件,每個服務器進程和後臺進程都寫跟蹤文件.例如當後臺進程發生了錯誤的時候,oracle就會把錯誤的信息寫到跟蹤文件中.DBA就可以根據跟蹤文件的信息來查看進程中所發生的錯誤。

跟蹤文件的位置跟告警日誌文件,在同一個目錄下:

select * from v$diag_info;

 

  • 備份文件

就是在數據庫發生介質損壞的時候用來還原(restore)數據庫的,恢復(recover)數據的。

 

二、邏輯存儲結構

從邏輯上來看,

  1. 數據庫是由一個或者多個表空間等組成。

  2. 一個表空間(tablespace)由一組段組成

  3. 一個段(segment)由一組區組成

  4. 一個區(extent)由一批數據庫塊組成

  5. 一個數據庫塊(block)對應一個或多個物理塊

  • Database(數據庫)

數據庫是按照數據結構來組織、存儲和管理數據的倉庫。

  • Tablespaces(表空間)

表空間是數據庫的邏輯劃分,一個表空間只能屬於一個數據庫。表空間(tablespace)是最大的邏輯單位,對應一個或多個數據文件,通常由相關的段組成。表空間的大小是它所對應的數據文件大小的總和。所有的數據庫對象都存放在指定的表空間中。但主要存放的對象是表, 所以稱作表空間。

必須存在的表空間

  • system

  • sysaux

  • temp

  • undo

可選的表空間:一般指用戶創建的用戶表空間,比如:users

可以通過下面的語句查看當前數據庫的表空間信息:

select tablespace_name from dba_tablespaces;

 

  • Segments (段)

一個段是分配給一個邏輯結構(一個表、一個索引或其他對象)的一組區,是數據庫對象使用的空間的集合;段可以有表段、索引段、回滾段、臨時段和高速緩存段等。

  • extents (區)

是數據庫存儲空間分配的一個邏輯單位,它由連續數據塊所組成。第一個段是由一個或多個盤區組成。當一段中間所有空間已完全使用,oracle爲該段分配一個新的範圍。

  • Data Block (數據塊)

是oralce 管理數據文件中存儲空間的單位,爲數據庫使用的I/O的最小單位,最小的邏輯部件,其大小可不同於操作系統的標準I/O塊大小。數據塊的大小由DB_BLOCK_SIZE參數確定。塊尺寸是處理Oracle更新、選擇、或者插入數據事務的最小單位。當用戶從表中選擇數據時,選擇操作從數據庫文件中以塊爲單位讀取或者提取數據。例如Oracle塊的大小爲8kb,即使只想檢索4kb的字符的名字,也必須讀取含有這4個字符的整個8kb的塊。

通過下面的語句查看當前數據塊設置的大小:

show parameter db_block_size

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章