資料庫的資料檔案,表空間,不能直接刪除,會損壞資料庫!!!不能直接刪除,會損壞資料庫!!!不能直接刪除,會損壞資料庫!!!重要的事情說三遍。
ORA-09817: Write to audit file failed 報錯解決辦法
分析:是由於linux磁碟滿了,導致sqlplus / as sysdba 進不去 報ORA-09817,
可以考慮刪除linux下的無用檔案,我是清理trm 和trc檔案,清理監聽日誌,然後清理無用的表空間
——檢視磁碟,檔案使用情況
df -lh
du -sh *
——只要刪除linux下一些不用的檔案,磁碟空間釋放一下,也可以登入成功,不用進行下面的操作
——清理trm 和trc檔案 十幾G
find /u01/app/oracle/diag/rdbms/orcl/orcl/trace -mtime +7 -name “*。trm” | xargs rm -f
——清理監聽日誌 挺大的40G
find /u01/app/oracle/diag/tnslsnr/oracle11g/listener/alert -mtime +7 -name “log_*。xml” | xargs rm -f
——到這裡就可以登入成功了,下面刪除表空間是因為這些表空間沒有過,而且分配很多空間,浪費,切記生產庫不能刪除表空間
——查看錶空間使用
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
——查看錶空間裡面有沒存資料
——以表空間NONTAX_INDEX為例
select * from dba_tables t where t。tablespace_name=‘NONTAX_INDEX’;
select * from dba_indexes i where i。tablespace_name=‘NONTAX_INDEX’;
切記:刪除表或者表的資料無法釋放磁碟空間,只能減低表空間使用率,刪除表空間才能減低磁碟使用率,注意磁碟空間和表空間的區別,表空間是個容器,存放各種資料檔案,資料檔案存放表資料
——刪除表空間和資料檔案 contents引數表示刪除資料表示資料 datafiles表示資料檔案
drop tablespace NONTAX_INDEX including contents and datafiles;
如果要刪除的表空間太大,刪除後可能磁碟空間沒釋放,
輸入 lsof -n | grep deleted 檢視pid 再 kill -9 pid
後記:很多表空間有初始的大小,雖然不存入資料,但是用drop tablespace tablespace_name including datafiles;會報錯,因為雖然不存資料,但是還有有使用了幾兆,
要用drop tablespace tablespace_name including contents and datafiles;
——刪除空表空間,包含物理檔案
drop tablespace tablespace_name including datafiles;
——刪除非空表空間,包含物理檔案
drop tablespace tablespace_name including contents and datafiles;