一大早有用户反映,系统登录不上去。我马上用手机看了一眼,数据库连接失败。我们这台数据库是最新迁移的一台独立的数据库服务器。
到了单位之后,开始着手研究,先执行df -h发现还有剩余空间。这时候,如果开始认为是Oracle的问题了,就跑偏了~
执行df -i发现是Inode满了。
空间没满,但inode满了
简单回顾一下Linux的Inode:
inode 和 block 概述# 文件是存储在硬盘上的,硬盘的最小存储单位叫做扇区sector,每个扇区存储512字节。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块block。这种由多个扇区组成的块,是文件存取的最小单位。块的大小,最常见的是4KB,即连续八个sector组成一个block。
文件数据存储在块中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫做inode,中文译名为索引节点,也叫i节点。因此,一个文件必须占用一个inode,至少占用一个block。
元信息 → inode 数据 → block
好,接下来就是找这些海量文件的位置了。从/目录下,开始执行
for i in /*; do echo i; find i | wc -l; done
usr路径下文件多,然后一层一层cd下去
然后不断的cd到文件最多的目录去,最终定位在/usr/app/oracle/admin/orcl/adump/ 路径下,里面都是*.aud文件。
然后去找这个文件是干嘛的,找到另一篇文章: https://blog.csdn.net/yifeng0504/article/details/103468970
删除后重启,问题解决。附删除方法:
一定要注意:不要直接删除adump目录,否则,你会sqlplus不了数据库。
1.进入审计日志目录:
cd ORACLE_BASE/admin/ORACLE_SID/adump
2.查询3个月前的审计文件:
find ./ -type f -name “*.aud” -mtime +91
3.删除3个月的审计文件:
find ./ -type f -name “*.aud” -mtime +91|xargs rm -f
4.清空所有审计文件: find ./ -type f -name “*.aud”|xargs rm -f
5.新装好一个数据库中查询审计开关的时候,它的默认设置为DB。(查看命令:show parameter audit_trail )
audit_trail=DB,代表的是,oracle将把每次审计跟踪记录在数据库的一张叫做AUD$的表中。
(查看命令:select owner,table_name,tablespace_name from dba_tables a where a.table_name =’AUD$’)
6.如果这张表所在的表空间是oracle数据库最重要的system表空间,此时它正好被设置为自动扩展的话,时间久了,
system表空间会因为过度肥胖把磁盘撑爆,反之,如果system表空间没有自动扩展,AUD$表就没有地方写就会报错,无法分配空间。