錯誤原因: 當使用者執行大量資料操作,導致現有回滾段空間耗盡,無法再分配新的擴展區時,就會拋出此錯誤。這是 Oracle DBA 最常遇到的問題之一。
解決方案:
ALTER TABLESPACE tablespace_name ADD DATAFILE filename SIZE size_of_file 指令新增資料檔案,擴充表空間。可根據實際情況一次新增一個或多個檔案。SELECT user_name, sql_text FROM V$open_cursor WHERE user_name = '<user_name>';
SELECT class, count FROM V$waitstat WHERE class IN ('system undo header', 'system undo block', 'undo header', 'undo block');
SELECT SUM(value) FROM V$sysstat WHERE name IN ('db_block_gets', 'consistent gets');
若任一 class_count / SUM(value) 超過 1%,建議增加回滾段數量。
錯誤原因: Oracle 傾向分配連續空間,當臨時表空間缺乏足夠連續可用空間時觸發此錯誤。
解決方法:
SELECT file_id, block_id, blocks, bytes FROM sys.dba_free_space WHERE tablespace_name = '<users>';
SELECT INITIAL_EXTENT, NEXT_EXTENT, MIN_EXTENTS, PCT_INCREASE FROM SYS.DBA_TABLESPACES WHERE TABLESPACE_NAME = 'name';
ALTER TABLESPACE name DEFAULT STORAGE (INITIAL XXX NEXT YYY);
ALTER USER username TEMPORARY TABLESPACE new_tablespace_name;
執行 ALTER TABLESPACE 後新增空間即時生效,無需離線。但需注意:資料檔案一旦新增無法單獨刪除,若需移除必須刪除整個表空間。
範例錯誤: ORA-1652: unable to extend temp segment by 207381 in tablespace TEMPSPACE
可能成因: 硬體 I/O 錯誤、作業系統 I/O 或緩衝問題、記憶體/分頁問題、嘗試存取未格式化的系統區塊、資料檔案部分溢位等,導致邏輯或實體壞塊。
處理策略:
Oracle 僅在存取到損壞區塊時回報錯誤,時間可能晚於實際損壞時間。若壞塊位於使用者資料檔:
SELECT owner, segment_name, segment_type FROM dba_extents WHERE file_id = <F> AND <B> BETWEEN block_id AND block_id + blocks - 1;
(<F>、<B> 為錯誤訊息中的檔案號與區塊號)
ANALYZE TABLE VALIDATE STRUCTURE CASCADE; 多跑幾次以區分永久性(實體壞塊)與隨機性(記憶體/硬體錯誤)壞塊。init<SID>.ora 加入:event="10231 trace name context forever, level 10"STARTUP RESTRICTCREATE TABLE errortemp AS SELECT * FROM error;若壞塊涉及資料字典或回滾段,請立即聯繫 Oracle 支援。
原因: 回滾段或表空間的擴展區數量達到 MAXEXTENTS 參數設定值(非硬體極限,硬體極限取決於 DB_BLOCK_SIZE)。
解決: 執行 ALTER TABLESPACE … STORAGE (MAXEXTENTS XXXX) 提高上限,但不得超過 LARGEST MAXEXTENT。若已達硬體上限,需以 COMPRESS=Y 匯出表、重建較大範圍的表空間再匯入。若錯誤發生在回滾段或索引,需刪除重建;若在臨時表空間,修改其儲存參數即可。
範例: ORA-1628: max # extents 50 reached for rollback segment RBS_1
性質: Oracle 核心程式碼異常,僅對 Oracle 支援與開發團隊有診斷意義。通常伴隨追蹤檔傾印(系統狀態與程序狀態)。第一個參數標記錯誤位置,其餘提供輔助資訊。
處理: 一般無法自行解決,需透過升級硬體、調效、或啟用 OPS(非最佳方案)等方式緩解。建議收集追蹤檔並開立 Service Request。
範例: ORA-00600: internal error code, arguments: [1237], [], [], [], [], [], [], []
原因: 用戶端與伺服器連線非正常終止。
排查步驟:
alert.log 是否有服務進程異常終止紀錄原因: 多為 CATEXP.SQL 未執行導致匯出視圖缺失,或版本不相容。
對策: 匯入/匯出共用視圖依賴 CATEXP.SQL 載入,版本差異易導致不同步。建議自行開發匯出應用程式以規避此錯誤。
NOT ONLINE,改為 ONLINE 即可。ONLINE,無需重複上線。原因:回滾未提交交易失敗,可能因資料檔/表空間離線、Undo 區塊或回滾段損壞。
initsid.ora 加入:event="10015 trace name context forever level 10"$ORACLE_HOME/rdbms/log 找啟動時產生的追蹤檔error recovery tx(#,#) object #object# 查 SYS.DBA_OBJECTS 取得物件名稱rollback_segments 參數,移除 event,再重啟若仍未解決,表示回滾段本身損壞。
原因: 目標表空間已滿。
解決: 執行 ALTER TABLESPACE ADD DATAFILE 新增檔案系統檔案或原始分割區;或調大 INITIAL(如 ALTER TABLESPACE CDRS101 DEFAULT STORAGE (NEXT 500M PCTINCREASE 1))。若仍不足,可能有其他大型物件佔用該表空間。
範例: ORA-1688: unable to extend table RMMCDR.LOCAL_CDR partition LOCAL_CDR101 by 460800 in tablespace CDRS101