某日師傅接到告警:某表空間滿了。原來昨晚跑存儲過程出問題,佔滿空間。這讓我意識到:必須搞懂 Oracle 存儲結構。
| 文件類型 | 作用 |
|---|---|
| 數據文件 | 真正存放表、索引等對象數據;一個數據文件對應一個 OS 文件。 |
| 控制文件 | 記錄數據庫名、數據文件/日志文件路徑、創建時間戳;至少 1 個,建議多路徑鏡像。 |
| 重做日志文件 | 記錄所有變更(用戶 DML + DDL);用於故障恢復;至少 2 組,每組多成員。 |
| 歸檔日志文件 | 非活動重做日志的存檔備份;備份恢復關鍵;開啟歸檔模式後產生。 |
| 參數文件 | 啟動實例時讀取的初始化參數(PFILE/SPFILE)。 |
| 警報日志 | 記錄重大事件與錯誤;名稱 alert_SID.log;位置由 background_dump_dest 決定。 |
| 跟蹤文件 | 服務器/後台進程錯誤診斷信息;受 MAX_DUMP_FILE_SIZE 限制。 |
| 備份文件 | 介質故障時用於還原恢復的副本(RMAN 備份集、拷貝等)。 |
數據庫
└─ 表空間
└─ 段
└─ 區
└─ 數據塊(最小存儲單位,默認 8KB)
CREATE TABLESPACE testTBSP
DATAFILE 'D:\DBFILE\dbfile1.dbf'
SIZE 50M
AUTOEXTEND ON NEXT 20M MAXSIZE UNLIMITED
LOGGING
EXTENT MANAGEMENT LOCAL;
若將 MAXSIZE 限制為固定值(如 20480M),寫入超過即報「表空間滿」。
TABLESPACE 子句。CREATE TABLE tb_student(name VARCHAR2(20)) TABLESPACE testTBSP;
-- 查詢表所在表空間
SELECT table_name, tablespace_name FROM dba_tables WHERE table_name = 'TB_STUDENT';
DBA_FREE_SPACE、DBA_DATA_FILES 可預警空間不足;