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

Oracle 常見錯誤代碼分析與解決:ORA-01650/01652/01578 表空間不足與壞塊處理

     編輯:Oracle 資料庫相關知識

ORA-01650: Unable to extend rollback segment

原因:回滾段表空間不足,大量交易耗盡可用擴展區。
解決:ALTER TABLESPACE ADD DATAFILE '' SIZE 新增資料檔。先查詢剩餘空間:
SELECT user_name, sql_text FROM V$OPEN_CURSOR WHERE 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');
若 count/sum(value) > 1% 應增加回滾段。

ORA-01652: Unable to extend temp segment

原因:臨時段表空間不足,Oracle 偏好連續空間,碎片導致無法分配。
解決:
1. 查詢可用碎片:SELECT file_id, block_id, blocks, bytes FROM SYS.DBA_FREE_SPACE WHERE tablespace_name='...';
2. 檢視預設儲存參數:SELECT INITIAL_EXTENT, NEXT_EXTENT, MIN_EXTENTS, PCT_INCREASE FROM SYS.DBA_TABLESPACES WHERE TABLESPACE_NAME='...';
3. 調大預設儲存:ALTER TABLESPACE DEFAULT STORAGE (INITIAL NEXT );
4. 或更改用戶臨時表空間:ALTER USER TEMPORARY TABLESPACE ;
5. ALTER TABLESPACE ... ADD DATAFILE 即時生效,無需離線。注意:資料檔一旦新增不可單獨刪除,只能刪除整個表空間。

ORA-01578: ORACLE data block corrupted

原因:硬體 I/O 錯誤、OS I/O/緩衝問題、記憶體/分頁錯誤、讀取未格式化系統塊、資料檔溢出等導致邏輯/物理壞塊。
解決:錯誤發生時間可能晚於實際損壞時間。若壞塊在用戶資料檔:
查詢壞塊所屬段:
SELECT owner, segment_name, segment_type FROM DBA_EXTENTS WHERE file_id= AND BETWEEN block_id AND block_id+blocks-1;
若為索引 → ALTER INDEX ... REBUILD 即可修復。
若為表資料 → 需配合 RMAN 區塊恢復或表重建。

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