场景:突然之间,oracle数据库链接不上了,报获取链接失败,然后用oracle
登录服务器,执行如下命令登录。
sqlplus '/as sysdba'
登录失败,报如下错误:
ORA-09925:Unable to create audit trail fail
Linux-x86_64 Error:28:No space left on device
分析:一开始看到第二行,设备没有剩余空间,以为是磁盘空间满了,登录上服务器执行df -h命令查看磁盘空间使用情况,发现没毛病,还有很多剩余。后面再看第一行,创建审计跟踪失败?这个不就是创建文件失败么,记起以前遇到过的情况,一个目录下文件太多了,然后就写不了文件了,原因是inode超过限制,想到会不会也是这样,果断执行命令df -i查看inode空间使用情况,一看结果用到了100%,问题定位成功。
解决办法:
1、找出文件数目最多的文件夹
在根目录下执行如下命令
find / -xdev -printf '%h\n' |sort |uniq -c |sort -k 1 -n
然后最后就是文件数目最多的文件夹,我们发现是oracle的审计跟踪文件。
2、判断是否可以删除,若是可以则删除。
删除命令是用
ls |xargs rm -rf
因为目录下文件太多,用rm -rf *会报太长了,删除不了。
注意:一定要确定文件可删除再删除,这里可能需要先把Oracle停止再删除,不然不知道会出什么毛病,我们就只删除删到一半,这个目录突然变成只读了,用root用户都删除不了了,所以文件不能乱删,最好明确可以删除再删,搞得只能重启机器,好像重启机器都报错,可能磁盘空间被损坏了,也有可能是我们再这个目录下执行了
ls,然后界面卡死,我们强行关闭导致的。
3、最后还是找运维重启机器才搞定,不知道为啥变得只读了。
inode在linux中,每个文件,不管大小是多少都会对应一个inode,inode就是一个专门用来保存文件属性,权限和指针(指向block),都有一个上限。