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

Oracle UNDO表空間三大核心操作:創建、修改與刪除實戰指南

     編輯:Oracle 資料庫基礎

UNDO表空間特性速覽

  • 專門存儲UNDO數據(事務前鏡像)
  • 不可創建任何用戶對象(表、索引、簇等)
  • 每實例同一時刻僅能使用一個UNDO表空間
  • RAC環境:每實例獨立UNDO表空間,不可共享

一、 創建UNDO表空間

1. 隨數據庫創建(推薦生產環境)

CREATE DATABASE prod_db
  ...
  UNDO TABLESPACE undotbs1
  DATAFILE '/u01/oradata/prod/undo01.dbf' SIZE 1G AUTOEXTEND ON MAXSIZE 4G
  EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

注意:若UNDO_MANAGEMENT=AUTO且未指定UNDO TABLESPACE,Oracle自動創建SYS_UNDOTBS,名稱不可控、大小不可預期,生產環境務必顯式指定。

2. 獨立創建(擴容/遷移/切換)

CREATE UNDO TABLESPACE undotbs2
  DATAFILE '/u01/oradata/prod/undo02.dbf' SIZE 2G AUTOEXTEND ON MAXSIZE 8G;

二、 修改UNDO表空間

使用ALTER TABLESPACE / ALTER DATABASE:

操作語法示例適用場景
增加數據文件ALTER TABLESPACE undotbs1 ADD DATAFILE '/u02/undo03.dbf' SIZE 1G;空間不足、磁盤擴容
重命名/遷移文件ALTER TABLESPACE undotbs1 RENAME DATAFILE '/old/undo01.dbf' TO '/new/undo01.dbf';存儲重組、遷移ASM
離線/上線ALTER TABLESPACE undotbs1 OFFLINE / ONLINE;維護窗口、文件遷移中轉
備份模式ALTER TABLESPACE undotbs1 BEGIN BACKUP; ... END BACKUP;ARHIVELOG模式下OS級熱備份

三、 切換UNDO表空間

熱切換,無需重啟,舊表空間等待活躍事務提交後自動PENDING OFFLINE:

ALTER SYSTEM SET UNDO_TABLESPACE = undotbs2 SCOPE=BOTH;

-- 監控切換進度
SELECT tablespace_name, status, contents
FROM dba_tablespaces
WHERE contents = 'UNDO';

狀態流轉:ONLINE → PENDING OFFLINE → OFFLINE。

四、 刪除UNDO表空間

前提:目標表空間非當前使用中(狀態OFFLINE)。

-- 1. 確認當前使用
SHOW PARAMETER undo_tablespace;

-- 2. 列出所有UNDO表空間
SELECT tablespace_name, status FROM dba_tablespaces WHERE contents = 'UNDO';

-- 3. 刪除(含數據文件)
DROP TABLESPACE undotbs1 INCLUDING CONTENTS AND DATAFILES;

五、 空間規劃與統計收集

高峰期收集V$UNDOSTAT,科學定容:

SELECT TO_CHAR(begin_time, 'HH24:MI') begin_time,
       TO_CHAR(end_time, 'HH24:MI') end_time,
       undoblks * 8 / 1024 undo_mb,  -- 假設8K塊
       txncount,
       maxquerylen
FROM v$undostat
WHERE begin_time > SYSDATE - 7
ORDER BY begin_time;
  • UNDOBLKS:該10分鐘窗口消耗的UNDO塊數
  • MAXQUERYLEN:最長查詢持續秒數(指導UNDO_RETENTION)
  • TXNCOUNT:事務數(評估併發)

六、 RAC環境特殊規則

  • 每實例強制擁有專屬UNDO表空間(UNDO_TABLESPACE指向不同表空間)
  • 實例啟動參數UNDO_TABLESPACE=UNDOTBS_INST1、UNDO_TABLESPACE=UNDOTBS_INST2
  • 不可跨實例共享同一UNDO表空間(即使共享存儲)

七、 避坑清單

  1. 勿在UNDO表空間創建用戶對象——報錯ORA-30013。
  2. 勿直接OFFLINE當前UNDO表空間——會導致實例崩潰。
  3. 切換後舊表空間不可立即刪除——需等待PENDING OFFLINE轉OFFLINE。
  4. AUTOEXTEND建議開啟+MAXSIZE上限——防止單文件撐爆磁盤導致實例掛起。
  5. 定期檢查V$UNDOSTAT.MAXQUERYLEN > UNDO_RETENTION——預警ORA-01555風險。

總結

UNDO表空間管理三板斧:創建時顯式指定、運行中熱切換擴容、科學統計定容。掌握CREATE/ALTER/DROP UNDO TABLESPACE與ALTER SYSTEM SET UNDO_TABLESPACE,配合V$UNDOSTAT監控,即可駕馭核心一致性引擎的存儲後端。

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