絕不假設檔案位置。除非你親自安裝並完成所有安全配置,否則前任可能已遷移檔案。誤判路徑將釀成災難。
| 檔案類型 | 副檔名 | 查詢視圖 | 關鍵查詢欄位 |
|---|---|---|---|
| 控制檔 | .ctl | v$controlfile | STATUS, NAME |
| 資料檔 | .dbf | v$datafile | FILE#, STATUS, NAME |
| 線上重做日誌檔 | .log | v$logfile | MEMBER |
-- 控制檔路徑與狀態
SELECT status, name FROM v$controlfile;
-- 資料檔編號、狀態、路徑
SELECT file#, status, name FROM v$datafile;
-- 線上日誌檔路徑
SELECT member FROM v$logfile;
/u01/app/oracle/oradata//
$ORACLE_HOME/dbs/spfile.ora REDO01/02/03.LOG,循環覆寫(寫滿切換,覆蓋最舊)啟動執行個體
│
▼
讀取參數檔 → 找到控制檔 → 啟動控制檔 (NOMOUNT → MOUNT)
│
▼
控制檔指引開啟資料檔 (MOUNT → OPEN)
物理結構層面,資料檔、控制檔、日誌檔可任意遷移至任何儲存裝置(含裸裝置),僅需在控制檔中更新路徑資訊。
表空間
│ (由 1+N 個資料檔組成)
▼
段 —— 物件佔用空間 (表段、索引段、回滾段、臨時段...)
│
▼
區 —— 一次性分配的連續區塊組 (預設 8 區塊 = 64KB)
│
▼
區塊 —— 最小儲存/IO 單位 (預設 8KB)
DB_BLOCK_SIZE 決定,建庫後不可變| 類型 | 代表名稱 | 用途 | 特殊屬性 |
|---|---|---|---|
| 系統表空間 | SYSTEM, SYSAUX | 資料字典、系統物件、輔助工具 | 必須 ONLINE,不可離線 |
| 使用者資料/索引表空間 | USERS, 自建表空間 | 業務表、索引 | 建議分離資料與索引,多表空間分散 I/O |
| 回滾/UNDO 表空間 | UNDOTBS1 | 儲存未提交交易舊映像 (Undo) | 關鍵組件,影響一致性讀與交易回滾 |
| 臨時表空間 | TEMP | 排序、雜湊、臨時表中間結果 | 關閉資料庫自動清空,屬暫時性表空間 |
-- 建立永久表空間 (區域管理 + 自動分配 + ASSM)
CREATE TABLESPACE ts_data
DATAFILE '/u01/oradata/ts_data01.dbf' SIZE 100M
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
SEGMENT SPACE MANAGEMENT AUTO;
-- 建立臨時表空間 (僅支援 UNIFORM + MANUAL)
CREATE TEMPORARY TABLESPACE ts_temp
TEMPFILE '/u01/oradata/ts_temp01.dbf' SIZE 100M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
-- 新增資料檔擴充表空間
ALTER TABLESPACE ts_data ADD DATAFILE '/u01/oradata/ts_data02.dbf' SIZE 500M;
-- 設定資料檔自動擴充
ALTER DATABASE DATAFILE '/u01/oradata/ts_data01.dbf'
AUTOEXTEND ON NEXT 100M MAXSIZE 2G;
-- 離線/上線
ALTER TABLESPACE ts_data OFFLINE;
ALTER TABLESPACE ts_data ONLINE;
-- 唯讀/讀寫
ALTER TABLESPACE ts_data READ ONLY;
ALTER TABLESPACE ts_data READ WRITE;
-- 重命名
ALTER TABLESPACE ts_data RENAME TO ts_biz;
-- 連同資料檔一併刪除
DROP TABLESPACE ts_data INCLUDING CONTENTS AND DATAFILES;
-- 所有表空間狀態
SELECT * FROM dba_tablespaces;
-- 表空間大小統計
SELECT tablespace_name, SUM(bytes)/1024/1024 AS size_mb
FROM dba_data_files GROUP BY tablespace_name;
-- 表空間剩餘空間
SELECT tablespace_name, SUM(bytes)/1024/1024 AS free_mb
FROM dba_free_space GROUP BY tablespace_name;
-- 臨時表空間檔案
SELECT * FROM dba_temp_files;
SHOW PARAMETER undo;
-- undo_management = AUTO (10g+ 預設)
-- undo_tablespace = UNDOTBS1
-- undo_retention = 900 (秒,保留時長)
三池記憶體**互不共享**,需獨立規劃。
同一資料庫可支援 2K/4K/8K/16K/32K 區塊,對應 DB_nK_CACHE_SIZE。
適用場景:不同表空間採用不同區塊大小優化特定負載(如 OLTP 用 8K,DSS 用 16K/32K)。
| 參數 | 含義 | 建議 |
|---|---|---|
| PCTFREE | 區塊預留更新空間 % | 高更新表設 20-30 |
| PCTUSED | 區塊可再用閾值 % | 配合 PCTFREE 使用 |
| INITRANS | 初始交易槽數 | 高併發表適當調大 |
| MAXTRANS | 最大交易槽數 (255 上限) | 通常保持預設 |
Rowid = 物件編號(6) + 相對檔號(3) + 區塊號(6) + 行號(3)
-- 共 18 位元組
-- 解碼範例
SELECT dbms_rowid.rowid_object(rowid) AS obj#,
dbms_rowid.rowid_relative_fno(rowid) AS file#,
dbms_rowid.rowid_block_number(rowid) AS block#,
dbms_rowid.rowid_row_number(rowid) AS row#
FROM scott.dept;
行更新導致空間不足而遷移時,原位置保留「遷移指標」指向新位置,Rowid **不變**,透過指標定位新位置。
| 方案 | 版本 | 原理 | 鎖定行為 | 索引處理 |
|---|---|---|---|---|
| ALTER TABLE ... MOVE | 8i/9i | 重建表段,壓縮空間 | 全表排他鎖 | 需手動 REBUILD |
| SHRINK SPACE | 10g+ | 先排序後釋放高水位下空間 | 行級鎖,線上可用 | 需 REBUILD,不觸發行觸發器 |
| EXP/IMP 或 TRUNCATE + DEALLOCATE | 所有 | 匯出匯入重建 / 截斷釋放區 | 視方式而定 | 隨表重建 |
-- 1. 啟用行移動
ALTER TABLE test1 ENABLE ROW MOVEMENT;
-- 2. 壓縮空間 (不釋放高水位)
ALTER TABLE test1 SHRINK SPACE COMPACT;
-- 3. 釋放空間 (降低高水位)
ALTER TABLE test1 SHRINK SPACE;
-- 錯誤:DELETE 產生大量 Redo/Undo
-- 正確:
TRUNCATE TABLE big_table REUSE STORAGE; -- 保留高水位
-- 或
TRUNCATE TABLE big_table DROP STORAGE; -- 釋放空間
-- 系統閒置時進一步釋放
ALTER TABLE big_table DEALLOCATE UNUSED KEEP 100M; -- 保留 100M
ALTER TABLE big_table DEALLOCATE UNUSED KEEP 0; -- 完全釋放
掌握物理/邏輯結構對應關係,是進行空間規劃、效能調優、備份恢復、故障診斷的核心技能。