ORA-01650: unable to extend rollback segment NAME by NUM in tablespace NAME
用戶執行大批量 DML(大量 INSERT/UPDATE/DELETE),產生大量 UNDO,導致回滾段表空間可用空間耗盡,無法分配新擴展。這是 DBA 最常見的空間類錯誤之一。
ALTER TABLESPACE rbs_tbs ADD DATAFILE '/path/rbs02.dbf' SIZE 2G;
可一次添加多個文件,根據裸設備剩餘空間決定大小。
SELECT tablespace_name, SUM(bytes)/1024/1024 MB_FREE
FROM dba_free_space
WHERE tablespace_name = 'RBS_TBS'
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');
-- 若任一 class count / 總訪問量 > 1%,建議增加回滾段
UNDO_MANAGEMENT=AUTO + UNDO_TABLESPACE),由 Oracle 自動調整回滾段大小與數量,徹底消除手工管理痛點。Cause: Failed to allocate extent from the rollback segment in tablespace
Action: Use the ALTER TABLESPACE ADD DATAFILE statement to add one or more files to the specified tablespace.
ORA-01652: unable to extend temp segment by NUM in tablespace NAME
排序、哈希連接、創建索引、全表掃描等操作需要臨時段空間,但臨時表空間(或用戶臨時表空間)無足夠連續空間。Oracle 傾向分配連續擴展,碎片化嚴重時即使總空閒足夠也會報錯。
SELECT file_id, block_id, blocks, bytes
FROM dba_free_space
WHERE tablespace_name = 'TEMP_TBS'
ORDER BY file_id, block_id;
關注最大連續空閒塊是否滿足報錯需求的 NUM(以塊為單位)。
SELECT initial_extent, next_extent, min_extents, pct_increase
FROM dba_tablespaces
WHERE tablespace_name = 'TEMP_TBS';
若 NEXT 過小導致大量微小擴展,加劇碎片。
ALTER TABLESPACE temp_tbs DEFAULT STORAGE (INITIAL 10M NEXT 10M PCTINCREASE 0);
現代最佳實踐:本地管理臨時表空間 + UNIFORM SIZE,完全避免碎片:
CREATE TEMPORARY TABLESPACE temp2 TEMPFILE '/path/temp2.dbf' SIZE 5G
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M;
ALTER USER app_user TEMPORARY TABLESPACE temp2;
ALTER TABLESPACE temp_tbs ADD TEMPFILE '/path/temp02.dbf' SIZE 2G AUTOEXTEND ON NEXT 1G MAXSIZE 10G;
ALTER TABLESPACE ... ADD DATAFILE/TEMPFILE 完成即可使用,無需離線表空間或重啟UNIFORM SIZEORA-01652: unable to extend temp segment by 207381 in tablespace TEMPSPACE
-- 207381 塊 × 8K = ~1.6GB 連續空間需求,典型大排序/哈希連接場景
Cause: Failed to allocate extent for temp segment in tablespace
Action: Use the ALTER TABLESPACE ADD DATAFILE statement to add one or more files to the specified tablespace or create the object in another tablespace.
| 維度 | ORA-01650 | ORA-01652 |
|---|---|---|
| 段類型 | 回滾段 (UNDO) | 臨時段 (SORT/HASH/INDEX) |
| 觸發操作 | 大事務 DML | 大排序/哈希連接/建索引 |
| 表空間類型 | 永久表空間 (回滾段專用) | 臨時表空間 / 用戶臨時表空間 |
| 核心解決 | 加數據文件 / 遷移自動 UNDO | 加臨時文件 / 改本地管理 UNIFORM SIZE |
| 長期治理 | UNDO_MANAGEMENT=AUTO | 本地管理臨時表空間 + 適當 UNIFORM SIZE |
UNDO_MANAGEMENT=AUTO,廢棄手工回滾段EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M~100MDBMS_SPACE_ADMIN.TABLESPACE_FIX_SEGMENT_STATES 修復位圖異常