1. 程式人生 > >ORA-01653報錯解決方法(表空間使用率過高處理)

ORA-01653報錯解決方法(表空間使用率過高處理)

建立oracle表時遇見以下報錯:

ORA-01653: unable to extend table JT_AUDIT.CFG_AUSYS_AUDIT_PROC by 128 in tablespace AUDIT_TABLESPACE
從報錯資訊來看,應該是oracle表空間不足導致的, 首先檢查一下oracle表空間(以下sql可直接複製執行):
SELECT a.tablespace_name ,
      a.bytes / 1024 / 1024                              Total_tablespace,--表空間大小(M)
      ( a.bytes - b.bytes ) / 1024 / 1024                Used_tablespace,--已使用空間(M)
      b.bytes / 1024 / 1024                              Idel_tablespace,--空閒空間(M)
      Round(( ( a.bytes - b.bytes ) / a.bytes ) * 100, 2) UseRate_tablespace--使用比率
FROM  (SELECT tablespace_name,
              SUM(bytes) bytes
        FROM  dba_data_files
        GROUP  BY tablespace_name) a,
      (SELECT tablespace_name,
              SUM(bytes) bytes,
              Max(bytes) largest
        FROM  dba_free_space
        GROUP  BY tablespace_name) b
WHERE  a.tablespace_name = b.tablespace_name
ORDER  BY ( ( a.bytes - b.bytes ) / a.bytes ) DESC;
執行結果:從結果來看“AUDIT_TABLESPACE”表空間使用率已達到100%,導致該表空間下無法建立新表,以下從兩個角度來進行解決表空間過高。

1,表空間擴容

檢視“AUDIT_TABLESPACE”表空間所使用資料檔案:

select file_name,tablespace_name,bytes/1024/1024,maxbytes/1024/1024 from dba_data_files where tablespace_name='AUDIT_TABLESPACE';

查詢結果:

增加資料檔案(本文采用增加資料檔案的方式擴容,也可根據實際選擇更改資料檔案大小或開啟自動增長,建議使用增加資料檔案的方式):

ALTER TABLESPACE AUDIT_TABLESPACEADD DATAFILE '/data/oradata/dwca/AUDIT_TABLESPACE7.dbf' size 30G autoextend off ;   

---注:一個數據檔案最大隻能32G

2,清理表

查詢對應表空間下最佔空間的20個物件:

Select OWNER,SEGMENT_NAME,SEGMENT_TYPE,total||'M' from 
(select OWNER,SEGMENT_NAME,SEGMENT_TYPE,bytes/1024/1024 total from dba_segments 
where TABLESPACE_NAME='AUDIT_TABLESPACE' order by bytes/1024/1024 desc ) where rownum <21;

查詢結果:

挨個表查詢該表是否為必要表,資料是否異常,總能清理出大量的無用表。

刪除表的同時不放入回收站,否則達不到清理表空間的目的:

  drop table tablename purge

小記

因為挨個表進行核對清理的過程比較慢,所以大家可以先採用第一種方式,先擴容表空間,再進行挨個大表清理,清理完畢後的表空間容量如下(sql如上:檢查oracle表空間sql):


從檢查結果可以看到“AUDIT_TABLESPACE”表空間使用率已經降低到67.71%。