ORA-01653: unable to extend table SYSMAN.MGMT_SYSTEM_ERROR_LOG ... in tablespace SYSAUXUNDOTBS1 (27GB) + TEMP (20GB) 佔滿,導致 SYSAUX 無法擴展。SELECT file_name, bytes/1024/1024 MB
FROM dba_data_files
WHERE tablespace_name = 'UNDOTBS1';
-- 結果範例:
-- +ORADG/danaly/datafile/undotbs1.265.600173875 27810 MB
SELECT usn, xacts,
rssize/1024/1024/1024 GB_RSSIZE,
hwmsize/1024/1024/1024 GB_HWM,
shrinks
FROM v$rollstat
ORDER BY rssize;
觀察 XACTS (作用中交易數) 與 STATUS (稍後步驟需用)。
-- ASM 環境自動配置大小,亦可指定 SIZE
CREATE UNDO TABLESPACE undotbs2;
-- 非 ASM 需指定資料檔
-- CREATE UNDO TABLESPACE undotbs2 DATAFILE '/u01/app/oracle/oradata/undotbs2_01.dbf' SIZE 1G AUTOEXTEND ON;
ALTER SYSTEM SET undo_tablespace = undotbs2 SCOPE = BOTH;
SCOPE=BOTH 同時修改記憶體參數與 SPFILE,避免重啟後參數衝突。
SELECT usn, xacts, status,
rssize/1024/1024/1024 GB_RSSIZE,
hwmsize/1024/1024/1024 GB_HWM
FROM v$rollstat
ORDER BY rssize;
關鍵觀察 STATUS 欄位:
ONLINE:正在使用或可用PENDING OFFLINE:等待現有交易結束後離線OFFLINE:已完全離線,可安全刪除執行上述查詢直到 UNDOTBS1 所有 Segment 顯示 OFFLINE (或從 V$ROLLSTAT 消失)。通常需數秒至數分鐘,視作用中長交易而定。
DROP TABLESPACE undotbs1 INCLUDING CONTENTS AND DATAFILES;
INCLUDING CONTENTS:刪除段內物件AND DATAFILES:同時刪除 ASM/Datafile 實體檔案,徹底釋放磁碟空間[oracle@danaly ~]$ export ORACLE_SID=+ASM
[oracle@danaly ~]$ asmcmd
ASMCMD> du
Used_MB Mirror_used_MB
21625 21625
ASMCMD> exit
Used_MB 大幅下降,確認 27GB 空間已釋放。
| 風險 | 影響 | 應對 |
|---|---|---|
| 長時間交易阻礙 Segment OFFLINE | 無法刪除舊 Undo,空間持續佔用 | 識別長交易 SELECT * FROM V$TRANSACTION WHERE START_TIME < SYSDATE - 1/24;,評估是否可終止 (KILL SESSION) |
| 誤刪除正在使用的 Undo | 資料庫掛起、交易失敗 | 務必確認 V$ROLLSTAT.STATUS = 'OFFLINE' 後再刪除 |
| 參數未寫入 SPFILE | 重啟後切回舊 Undo 導致啟動失敗 | 使用 SCOPE=BOTH 或手動修改 PFILE/SPFILE |
UNDO_TABLESPACE 固定大小並關閉 AUTOEXTEND,避免再次暴增。RETENTION GUARANTEE 保護閃回查詢。TEMP_UNDO_ENABLED = TRUE (12c+) 將臨時 Undo 導向 Temp。透過「建新→切換→等待離線→刪除含檔案」四步驟,可安全、快速回收異常膨脹的 Undo 表空間。關鍵在於耐心等待 PENDING OFFLINE 轉為 OFFLINE,並使用 AND DATAFILES 徹底釋放儲存空間。