Oracle數據庫的存儲結構分為邏輯存儲結構和物理存儲結構.
一、邏輯存儲結構
邏輯存儲結構主要描述Oracle數據庫的內部存儲結構,即從技術概念上描述在Oracle數據庫種如何組織、管理數據.因此,邏輯存儲結構是和操作系統平台無關的,是由Oracle數據庫創建和管理的.
從邏輯上來看.
- 數據庫是由一個或者多個表空間等組成。
- 一個表空間(tablespace)由一組段組成,
- 一個段(segment)由一組區組成,
- 一個區(extent)由一批數據庫塊組成,
- 一個數據庫塊(block)對應一個或多個物理塊
Database(數據庫)
數據庫是按照數據結構來組織、存儲和管理數據的倉庫。
Tablespaces(表空間)
表空間是數據庫的邏輯划分,一個表空間只能屬於一個數據庫。表空間(tablespace)是最大的邏輯單位,對應一個或多個數據文件,通常由相關的段組成。表空間的大小是它所對應的數據文件大小的總和。所有的數據庫對象都存放在指定的表空間中。但主要存放的對象是表, 所以稱作表空間。
Segments (段):
一個段是分配給一個邏輯結構(一個表、一個索引或其他對象)的一組區,是數據庫對象使用的空間的集合;段可以有表段、索引段、回滾段、臨時段和高速緩存段等。Types of segments (段的類型詳解)
extents (盤區)
是數據庫存儲空間分配的一個邏輯單位,它由連續數據塊所組成。第一個段是由一個或多個盤區組成。當一段中間所有空間已完全使用,oracle為該段分配一個新的范圍。
Data Block (數據塊)
是oralce 管理數據文件中存儲空間的單位,為數據庫使用的I/O的最小單位,最小的邏輯部件,其大小可不同於操作系統的標准I/O塊大小。數據塊的大小由DB_BLOCK_SIZE參數確定。塊尺寸是處理Oracle更新、選擇、或者插入數據事務的最小單位。當用戶從表中選擇數據時,選擇操作從數據庫文件中以塊為單位讀取或者提取數據。例如Oracle塊的大小為8kb,即使只想檢索4kb的字符的名字,也必須讀取含有這4個字符的整個8kb的塊。
操作系統也有一個磁盤塊尺寸,oracle塊尺寸應該為磁盤尺寸的倍數。否則在每個I/O中只使用部分數據,可能會浪費時間去讀寫磁盤快。
- 如果行比較小並且訪問很隨機,這設置較小的塊尺寸
- 如果行比較小且訪問主要是連續的(或者隨機且連續的),或者如果有較大的行,則選擇較大的塊尺寸。
DB_BLOCK_SIZE初始化參數決定ORACLE 數據庫的標准塊尺寸,並且Oracle還可以指定4個額外的非標准的塊尺寸。多個塊尺寸主要用於在不同的數據庫尺寸的數據庫之間傳送表空間。如果選擇配置多個Oracle塊尺寸,還必須配置SGA的緩沖區高速緩存中相應的子高速緩存。
二、物理存儲結構
Oracle物理存儲結構組成:
- 數據文件(data file)、
- 聯機日志文件(online redo log file)、
- 控制文件(control file)組成的
- 歸檔日志文件、
- 參數文件、
- 警報文件、
- 跟蹤文件、
- 備份文件
數據文件(data file):
一個數據庫可以由多個數據文件組成的,數據文件是真正存放數據庫數據的.一個數據文件就是一個操作系統文件.數據庫的對象(表和索引)物理上是被存放在數據文件中的。當我們要查詢一個表的數據的時候,如果該表的數據沒有在內存中,那么oracle就要讀取該表所在的數據文件,然后把數據存放到內存中.數據文件的特征是:
- 一個數據文件只能屬於一個數據庫.
- 數據文件可以被設置成自動增長.
- 一個或多個數據文件組成了表空間.
- 一個數據文件只能屬於一個表空間.
控制文件(control file):
一個數據庫至少要有一個控制文件,控制文件中存放的數據庫的"物理結構信息",正是因為他存放的是數據庫的物理結構信息,所以他就顯得尤其的重要.這些物理結構信息就包括:
- 數據庫的名字.
- 數據文件和聯機日志文件的名字及位置.
- 創建數據庫時的時間戳.
為了更好的保護數據庫,我們可以鏡像控制文件.每個控制文件中的內容就是相同的.鏡像了控制文件,即使其中的一個控制文件出現了問題,也不會影響到數據庫的損壞,數據的丟失. 在啟動數據庫的時候,oracle就會根據控制文件中的數據文件和聯機日志文件的信息來打開數據庫.
聯機日志文件(online redo log file):
一個數據庫可以有多個聯機日志文件,聯機日志文件包含了重做記錄(undo records).聯機日志文件記錄了數據庫的改變,例如當一次意外導致對數據的改變沒有及時的寫到數據文件中,那么oracle就會根據聯機日志文件中 的信息獲得這些改變,然后把這些改變寫到數據文件中.這也是聯機日志文件存在的意義.聯機日志文件中重做記錄的唯一功能就是用來做實例的恢復.比如,一次系統的意外掉電,導致內存中的數據沒有被寫到數據文件中.那么oralce就會根據聯機日志文件中的重做記錄功能包數據庫恢復到失敗前的狀態.
歸檔日志文件(Archive log file):
是聯機日志文件的副本,他記錄了對數據庫改變的歷史.
參數文件(parameter file):
通常情況下指的就是初始化參數文件(initialization parameter file).參數文件包括了初始化參數文件和服務器端參數文件(server parameter file).在數據庫啟動的時候就會讀取參數文件,然后根據參數文件中的參數來分配SGA並啟動一系列的后台進程.參數文件中存放的是數據庫和實例的參 數.
警報文件(alert log file):
就是警報日志文件,他記錄了數據庫的重大活動和所發生的錯誤.警報文件按照時間的先后來記錄所發生的重大活動和錯誤.警報文件的名字的格式是 alertSID.log.警報文件的位置是由初始化參數background_dump_desc指定的.
跟蹤文件(trace log file):
就是跟蹤日志文件,每個服務器進程和后台進程都寫跟蹤文件.例如當后台進程發生了錯誤的時候,oracle就會把錯誤的信息寫到跟蹤文件中.DBA就可以根據跟蹤文件的信息來查看進程中所發生的錯誤.跟蹤文件被寫到了兩個目錄中.和服務器進程有關的信息被寫到了由初始化參數user_dump_desc指定的目錄中,和后台進程有關信息被寫到了由初始化參數background_dump_desc指定的目錄中.伴隨着時間跟蹤文件就會被寫滿,DBA可以 手動來刪除跟蹤文件,也可以限制跟蹤文件的大小.初始化參數MAX_DUMP_FILE_SIZE就可以限制跟蹤文件的大小.
備份文件(backup file):
就是在數據庫發生介質損壞的時候用來還原(restore)數據庫的,恢復(recover)數據的.