原因:大量資料操作導致現有回滾段不足,表空間已滿無法分配。
解決:
ALTER TABLESPACE tablespace_name ADD DATAFILE 'filename' SIZE size_of_file;
視情況新增一或多個資料檔。若裸裝置無空間,勿盲目擴大。先查詢剩餘空間:
SELECT user_name, sql_text FROM v$open_cursor WHERE user_name = '<user>';
若餘裕充足,可追加大型回滾段。檢測 Rollback Segment 爭用:
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%,應增加 Rollback Segment。
原因:臨時段表空間不足,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 即時生效無需離線。注意:資料檔一旦新增無法單獨刪除,需刪除整個表空間。