oracle system 表空間32G問題解決一例
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段所屬的表的名字
命令:
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;
查詢臨時表空間使用情況
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- system表空間不足的問題分析
- system表空間爆滿解決方法
- ORACLE的SYSTEM 表空間Oracle
- 解決Oracle臨時表空間佔滿的問題Oracle
- 轉:Oracle 臨時表空間過大問題解決Oracle
- system表空間不足的問題分析(二)
- oracle的臨時表空間解決問題的步驟Oracle
- oracle 傳輸表空間一例Oracle
- 【UNDO】使用重建UNDO表空間方法解決UNDO表空間過大問題
- 【實驗】重建臨時表空間解決臨時表空間過大問題
- oracle的臨時表空間寫滿磁碟空間,解決改問題的具體步驟Oracle
- swap空間不足問題解決
- Oracle delete資料後的釋放表空間問題的解決 --轉Oracledelete
- 臨時表空間ORA-1652問題解決
- oracle的還原表空間UNDO寫滿磁碟空間,解決該問題的具體步驟Oracle
- 解決linux下刪除檔案或oracle表空間後空間不釋放的問題LinuxOracle
- oracle 11g sysaux表空間使用率非常高的問題解決OracleUX
- 遷移SYSTEM表空間為本地管理表空間
- Oracle DRM引起的問題解決一例Oracle
- 解決FRA空間滿的問題
- Oracle undo表空間爆滿的解決Oracle
- Oracle rman 備份與恢復 臨時表空間的檔案問題解決Oracle
- Oracle 解決鎖表問題Oracle
- oracle 9i 臨時表空間問題Oracle
- imp中的indexfile引數解決imp指定表空間問題Index
- 【實驗】RESIZE方法解決臨時表空間過大問題
- ORACLE SYSTEM表空間異常與審計的功能Oracle
- Oracle表空間操作詳解Oracle
- oracle系統表空間過大問題處理Oracle
- ORACLE表空間、資料檔案離線問題Oracle
- Oracle使用者預設表空間的問題Oracle
- 解決Oracle 11g空表不能exp匯出的問題Oracle
- ORACLE 中undo表空間爆滿的解決方法Oracle
- oracle之EXP匯出表空間錯誤解決Oracle
- oracle 段空間管理問題Oracle
- Tablespace Fragmentation - 表空間碎片問題Fragment
- 為什麼問題空間與解決方案空間如此重要? - Nikhil Gupta
- UNDO表空間不足解決方法