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

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/7325.html
標籤:Oracle
