資料庫是資料的實體儲存,無論關聯或物件導向結構,Oracle 均將資料存放於資料檔。內部透過表空間進行邏輯劃分,不同資料分開儲存。
SYSTEM 系統表空間)。ONLINE/OFFLINE/READ ONLY/READ WRITE、支援部分備份恢復、透過新增資料檔擴展。常用管理 SQL:
-- 修改表空間屬性
ALTER TABLESPACE ts_name READ ONLY;
-- 查詢表空間狀態
SELECT tablespace_name, status FROM dba_tablespaces;
-- 查詢表空間與資料檔對應
SELECT tablespace_name, bytes, file_name FROM dba_data_files;
-- 查詢使用者預設表空間
SELECT username, default_tablespace FROM dba_users;
-- 移動表至其他表空間
ALTER TABLE tbl_name MOVE TABLESPACE ts_name;
注意:SYSTEM、UNDO、TEMP 不可設為 OFFLINE。
AUTOEXTEND),但一旦加入表空間無法移出或關聯其他表空間。資料庫三大必要檔案:Data File、Control File、Redo Log File。參數檔、密碼檔、歸檔日誌屬輔助檔案。
-- 查看實體檔案組成
SELECT * FROM v$datafile; -- 資料檔
SELECT * FROM v$controlfile; -- 控制檔
SELECT * FROM v$logfile; -- 日誌檔
實例是存取資料庫檔案的記憶體結構(SGA)與背景進程的集合,亦稱「伺服器」。一個資料庫可被多個實例存取(RAC)。
實例啟動時讀取初始化參數檔(init.ora 或 spfile.ora),參數修改需重啟生效。
| 區域 | 說明 | 主要元件 |
|---|---|---|
| SGA (System Global Area) | 共享記憶體,儲存資料庫資訊與控制資訊,實體記憶體不足時使用虛擬記憶體 | Shared Pool、Database Buffer Cache、Redo Log Buffer、Large Pool、Java Pool、Streams Pool |
| PGA (Program Global Area) | 專用記憶體,單一伺服器/背景進程專用,進程建立時配置、終止時回收 | Sort Area、Session Info、Cursor State、SQL Work Area |
| 進程 | 職責 |
|---|---|
| PMON | 進程失敗時清理資源、釋放鎖、重啟死掉的 Dispatcher(共享伺服器模式) |
| SMON | 執行個體恢復、整理自由空間、清理臨時段 |
| DBWn | 將緩衝區「髒資料塊」寫入資料檔(觸發條件:Checkpoint、髒塊閾值、緩衝區不足、Timeout 3 秒、Tablespace Offline/Read Only、Drop/Truncate Table、Begin Backup) |
| LGWR | 將 Redo Log Buffer 寫入線上 Redo Log File(觸發:Commit、1/3 滿、1MB 紅重做、每 3 秒、DBWn 寫入前) |
| CKPT | 觸發 DBWn 寫入髒塊,更新資料檔與控制檔檔頭(Checkpoint 資訊),確保所有檔案同步 |
| ARCn | 歸檔模式下自動備份線上 Redo Log(可選進程) |
並非所有背景進程參與每條 SQL,視語句類型與系統狀態動態參與。
STARTUP → 配置 SGA → 啟動背景進程 → 掛載/開啟資料庫。