ORA-01650: unable to extend rollback segment NAME by NUM in tablespace NAME
大量資料操作(批次刪除/更新/匯入)產生大量 Undo,現有回滾段表空間不足,無法分配新區塊。
ALTER TABLESPACE rbs_ts ADD DATAFILE '/path/rbs02.dbf' SIZE 500M;
SELECT tablespace_name, SUM(bytes)/1024/1024 MB_FREE
FROM dba_free_space GROUP BY tablespace_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');
若 waitstat.count / sysstat.sum > 1% 需增加回滾段。
UNDO_MANAGEMENT=AUTO,UNDO_TABLESPACE=UNDOTBS,Oracle 自動管理擴縮。ORA-01652: unable to extend temp segment by NUM in tablespace NAME
排序、哈希連接、建立索引、全表掃描等操作需臨時段,臨時表空間不足或碎片化導致無法分配連續空間。
SELECT file_id, block_id, blocks, bytes
FROM dba_free_space WHERE tablespace_name = 'TEMP';
SELECT initial_extent, next_extent, min_extents, pct_increase
FROM dba_tablespaces WHERE tablespace_name = 'TEMP';
ALTER TABLESPACE TEMP DEFAULT STORAGE (INITIAL 1M NEXT 1M PCTINCREASE 0);
ALTER USER app_user TEMPORARY TABLESPACE LARGE_TEMP;
ALTER TABLESPACE TEMP ADD TEMPFILE '/path/temp02.dbf' SIZE 1G;
ORA-01578: ORACLE data block corrupted (file # NUM, block # NUM)
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 為錯誤訊息中的檔號、塊號)
ALTER INDEX idx REBUILD;ANALYZE TABLE table_name VALIDATE STRUCTURE CASCADE;
-- 1. 關庫
-- 2. init.ora 加入:event="10231 trace name context forever, level 10"
-- 3. STARTUP RESTRICT
-- 4. CREATE TABLE salvage AS SELECT * FROM corrupted_table;
-- 5. 移除 event 參數,重啟
-- 6. RENAME 損壞表,salvage 改回原名
-- 7. 重建索引、約束、授權
ORA-01628: max # extents NUM reached for rollback segment NUM
區塊數達到 MAXEXTENTS 參數上限(非硬體極限,受 DB_BLOCK_SIZE 影響)。
ALTER TABLESPACE ts_name DEFAULT STORAGE (MAXEXTENTS UNLIMITED);
或對特定段:
ALTER ROLLBACK SEGMENT rbs_name STORAGE (MAXEXTENTS UNLIMITED);
INITIAL/NEXT 的表空間/段EXPORT COMPRESS=Y → 刪除重建 → IMPORT| 錯誤代碼 | 核心原因 | 首要行動 | 長期對策 |
|---|---|---|---|
| ORA-01650 | 回滾段表空間滿 | ADD DATAFILE | 自動 Undo 管理 |
| ORA-01652 | 臨時表空間滿/碎片 | ADD TEMPFILE / 調整 STORAGE | 大臨時表空間 + 監控 |
| ORA-01578 | 資料塊損壞 | 定位物件 / ANALYZE VALIDATE | 備份驗證 + 硬體巡檢 + Event 10231 搶救 |
| ORA-01628 | MAXEXTENTS 達上限 | ALTER STORAGE MAXEXTENTS UNLIMITED | 大區塊策略 + 遷移至 LMT/ASSM |
DB_BLOCK_CHECKING、DB_BLOCK_CHECKSUM 早期發現壞塊RMAN VALIDATE、ANALYZE VALIDATE STRUCTURE 關鍵表錯誤代碼是資料庫發出的求救信號,理解其背後機制、建立監控預警、準備標準化處置流程,才能從被動救火轉為主動防禦。