首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 物理與邏輯儲存結構深度解析

     編輯:Oracle 資料庫基礎

核心原則:物理結構必須透過指令查看

絕不假設檔案位置。除非你親自安裝並完成所有安全配置,否則前任可能已遷移檔案。誤判路徑將釀成災難。

一、物理結構:作業系統層面的檔案體系

三大核心檔案類型與查詢指令

檔案類型副檔名查詢視圖關鍵查詢欄位
控制檔.ctlv$controlfileSTATUS, NAME
資料檔.dbfv$datafileFILE#, STATUS, NAME
線上重做日誌檔.logv$logfileMEMBER
-- 控制檔路徑與狀態
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
  • 作用:啟動時尋找控制檔,**不參與**資料庫運行時工作
  • 控制檔內容會映射在參數檔中

兩種重做日誌模式

  1. 線上重做日誌:REDO01/02/03.LOG,循環覆寫(寫滿切換,覆蓋最舊)
  2. 歸檔日誌:熱備份模式下產生,保存歷史重做記錄,支援時間點恢復

啟動掛載流程

啟動執行個體
    │
    ▼
讀取參數檔 → 找到控制檔 → 啟動控制檔 (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;

UNDO 表空間關鍵參數

SHOW PARAMETER undo;
-- undo_management = AUTO (10g+ 預設)
-- undo_tablespace = UNDOTBS1
-- undo_retention = 900 (秒,保留時長)

四、Buffer Cache 多池與多區塊大小架構

三大緩衝池

  • DEFAULT:預設池,所有未指定物件
  • KEEP:熱門小表/索引,防止被淘汰
  • RECYCLE:大型掃描表,快速釋放

三池記憶體**互不共享**,需獨立規劃。

多區塊大小支援 (9i+)

同一資料庫可支援 2K/4K/8K/16K/32K 區塊,對應 DB_nK_CACHE_SIZE。
適用場景:不同表空間採用不同區塊大小優化特定負載(如 OLTP 用 8K,DSS 用 16K/32K)。

五、物件儲存屬性與 Rowid 解碼

表建立關鍵儲存參數

參數含義建議
PCTFREE區塊預留更新空間 %高更新表設 20-30
PCTUSED區塊可再用閾值 %配合 PCTFREE 使用
INITRANS初始交易槽數高併發表適當調大
MAXTRANS最大交易槽數 (255 上限)通常保持預設

Rowid 結構解碼 (10g+ 擴展格式)

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

行更新導致空間不足而遷移時,原位置保留「遷移指標」指向新位置,Rowid **不變**,透過指標定位新位置。

六、表空間碎片整理三大方案

方案版本原理鎖定行為索引處理
ALTER TABLE ... MOVE8i/9i重建表段,壓縮空間全表排他鎖需手動 REBUILD
SHRINK SPACE10g+先排序後釋放高水位下空間行級鎖,線上可用需 REBUILD,不觸發行觸發器
EXP/IMP 或 TRUNCATE + DEALLOCATE所有匯出匯入重建 / 截斷釋放區視方式而定隨表重建

SHRINK 實操步驟 (10g+ 推薦)

-- 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;     -- 完全釋放

掌握物理/邏輯結構對應關係,是進行空間規劃、效能調優、備份恢復、故障診斷的核心技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved