Oracle的存儲結構分為:物理存儲結構和邏輯存儲結構。 一、物理存儲結構:指硬碟上存在的文件 數據文件(data file) 一個資料庫可以由多個數據文件組成的,數據文件是真正存放資料庫數據的。一個數據文件就是一個操作系統文件。資料庫的對象(表和索引)物理上是被存放在數據文件中的。當我們要查詢一個 ...
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)
一個資料庫至少要有一個控制文件,控制文件中存放的資料庫的"物理結構信息",正是因為他存放的是資料庫的物理結構信息,所以他就顯得尤其的重要.這些物理結構信息就包括:
- 資料庫的名字。
- 數據文件和聯機日誌文件的名字及位置。
- 創建資料庫時的時間戳。
- 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的參數文件有兩種類型:
- Spfile:二進位形式,9i之後
- 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得到。
告警日誌文件中記錄的信息,包括:
- 資料庫啟動和停止的信息
- 資料庫的結構變化
- 強制審計的信息
- 死鎖的信息
- 跟蹤文件
就是跟蹤日誌文件,每個伺服器進程和後臺進程都寫跟蹤文件.例如當後臺進程發生了錯誤的時候,oracle就會把錯誤的信息寫到跟蹤文件中.DBA就可以根據跟蹤文件的信息來查看進程中所發生的錯誤。
跟蹤文件的位置跟告警日誌文件,在同一個目錄下:
select * from v$diag_info;
- 備份文件
就是在資料庫發生介質損壞的時候用來還原(restore)資料庫的,恢復(recover)數據的。
二、邏輯存儲結構
從邏輯上來看,
- 資料庫是由一個或者多個表空間等組成。
- 一個表空間(tablespace)由一組段組成
- 一個段(segment)由一組區組成
- 一個區(extent)由一批資料庫塊組成
- 一個資料庫塊(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