记一次由Oracle引起的No space left on device问题

记一次由Oracle引起的No space left on device问题

一大早有用户反映,系统登录不上去。我马上用手机看了一眼,数据库连接失败。我们这台数据库是最新迁移的一台独立的数据库服务器。

到了单位之后,开始着手研究,先执行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$表就没有地方写就会报错,无法分配空间。

发表评论

电子邮件地址不会被公开。 必填项已用*标注