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

Oracle UNDO 表空間暴漲緊急回收實戰:創建新 UNDO 切換刪除舊表空間

     編輯:Oracle 資料庫基礎

現象

磁盤空間告警,查詢表空間佔用發現:UNDOTBS1 27GB、TEMP 20GB,合併佔用 47GB。疑有大事務導致 Undo 膨脹,AUM (Auto Undo Management) 僅擴不縮。

回收步驟(零停機)

  1. 確認文件:
    SELECT file_name, bytes/1024/1024 FROM dba_data_files WHERE tablespace_name='UNDOTBS1';
  2. 檢查 Undo Segment 狀態:
    SELECT usn, xacts, rssize/1024/1024/1024, hwmsize/1024/1024/1024, shrinks
    FROM v$rollstat ORDER BY rssize;
    觀察是否有活躍事務(xacts>0)。
  3. 創建新 Undo 表空間:
    CREATE UNDO TABLESPACE undotbs2;
  4. 動態切換:
    ALTER SYSTEM SET undo_tablespace=undotbs2 SCOPE=BOTH;
    新事務將使用 undotbs2,舊表空間進入 PENDING OFFLINE 狀態。
  5. 等待舊 Segment 全部 OFFLINE:
    SELECT usn, xacts, status, rssize/1024/1024/1024
    FROM v$rollstat ORDER BY rssize;
    輪詢直到所有 Segment 狀態為 OFFLINE(無活躍事務引用)。
  6. 刪除舊表空間釋放空間:
    DROP TABLESPACE undotbs1 INCLUDING CONTENTS;
  7. 驗證 ASM 磁盤空間釋放:
    ASMCMD> du
    Used_MB  Mirror_used_MB
    21625    21625  -- 明顯下降

關鍵注意點

  • 切換前務必確認無長時間運行事務,否則舊 Undo 無法 OFFLINE。
  • 生產環境建議預先設置 UNDO_TABLESPACE 並關閉自動擴展,定期監控 Undo 使用率。
  • TEMP 表空間同理可通過創建新 Temp 切換方式回收。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved