oracle system 表空間32G問題解決一例

315959312發表於2014-03-10
1.開發的過程中發現oracle資料檔案佔了很大空間,其中system01.dbf檔案佔了30G。
命令:
    cd $ORACLE_HOME/../../../例項/
    ls -lh
2.檢查system表空間使用率,已經達到99.%,基本已經滿了

SELECT UPPER(F.TABLESPACE_NAME) "表空間名",
  D.TOT_GROOTTE_MB "表空間大小(M)",
  D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空間(M)",
  TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比",
  F.TOTAL_BYTES "空閒空間(M)",
  F.MAX_BYTES "最大塊(M)"
  FROM (SELECT TABLESPACE_NAME,
  ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
  ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
  FROM SYS.DBA_FREE_SPACE
  GROUP BY TABLESPACE_NAME) F,
  (SELECT DD.TABLESPACE_NAME,
   ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
  FROM SYS.DBA_DATA_FILES DD
  GROUP BY DD.TABLESPACE_NAME) D
  WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
  ORDER BY 1;

3.檢查system表空間最大的段,段為'sys.fga_log$'和'SYS_LOB0000000393C00013$$',空間基本都被這2個東西佔滿了,'SYS_LOB0000000393C00013$$'是表 sys.fga_log$的索引段。

SELECT *
FROM (SELECT BYTES, segment_name, segment_type, owner
FROM dba_segments
WHERE tablespace_name = 'SYSTEM'
ORDER BY BYTES DESC)
WHERE ROWNUM < 10

4.fga_log$表記錄了 fga審計日誌,檢查oracle中已經沒有fga審計策略了,猜測之前有人開啟了fga審計,後只刪除了審計策略,沒有清除fga審計日誌

5.select count(*) from fga_log$發現其中有 533萬條記錄,使用sys使用者登入後,trancate table fga_log$, 刪除後,問題解決,空間釋放了

也可以使用delete,不過由於資料量較大,且都是無用記錄,所以使用trancate截斷。如果使用其他使用者登入,則使用者必須有 delete any table 許可權。
使用system使用者登入後 通過 grant delete any table to user1(使用者名稱)命令來授權

注:1.關於fga審計,可以自己百度
      2.使用以後system01.dbf檔案還是之前那麼大,在此我只是降低了system表空間的使用率


查詢lob段所屬的表的名字
select a.owner,  
       a.table_name,  
       a.column_name,  
       b.segment_name,  
       ROUND(b.BYTES / 1024 / 1024)  
  from dba_lobs a, dba_segments b  
 where a.segment_name = b.segment_name  
   and a.owner = 'XXX'  
   and a.table_name = 'YYYY' 



查詢臨時表空間使用情況
select se.username,se.sid,su.extents,su.blocks*to_number(rtrim(p.value)) as Space,tablespace,segtype,sql_text from v$sort_usage su,v$parameter p,
v$session se,v$sql s 
where p.name='db_block_size' and su.session_addr=se.saddr and 
s.hash_value=su.sqlhash and s.address=su.sqladdr order by se.username,se.sid;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12478376/viewspace-1104605/,如需轉載,請註明出處,否則將追究法律責任。

相關文章