首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 常見錯誤 ORA-01650/ORA-01652 解決方案:Rollback Segment 與 Temp Segment 擴展失敗處理

     編輯:Oracle 資料庫相關知識

ORA-01650: Unable to extend rollback segment

原因:大量資料操作導致現有回滾段不足,表空間已滿無法分配。
解決:

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。

ORA-01652: Unable to extend temp segment

原因:臨時段表空間不足,Oracle 偏好連續空間,碎片化導致無法分配。
解決:

  1. 查看指定表空間可用空間碎片:
SELECT file_id, block_id, blocks, bytes
  FROM sys.dba_free_space
 WHERE tablespace_name = '<users>';

確認最大可用塊是否小於錯誤提示尺寸。

  1. 檢視預設儲存參數:
SELECT initial_extent, next_extent, min_extents, pct_increase
  FROM sys.dba_tablespaces
 WHERE tablespace_name = 'name';
  1. 修改臨時段預設儲存值:
ALTER TABLESPACE name DEFAULT STORAGE (INITIAL xxx NEXT yyy);
  1. 或修改用戶臨時表空間:
ALTER USER username TEMPORARY TABLESPACE new_tablespace_name;

ALTER TABLESPACE 即時生效無需離線。注意:資料檔一旦新增無法單獨刪除,需刪除整個表空間。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved