启动数据库报错,错误如下:
SQL> startup nomount pfile=’/oracle/admin/ecis/ecis.ora1’;
ORA-27154: post/wait create failed
ORA-27300: OS system dependent operation:semget failed with status: 28
ORA-27301: OS failure message: No space left on device
ORA-27302: failure occurred at: sskgpsemsper
看如上报错空间不足,但是查看分区磁盘空间都充裕,为啥报这个错误呢?
查看系统日志发现如下信息:
告警信息:
DISK CRITICAL - free space : /backup/script 5773 MB (28% inode=99%);/u01/app/oracle/oradata 171485 MB (20% inode=99%);/u01/app/oracle/archivelog 12059 MB (7% inode=99%);
以上告警可知,inode空间不足,这类告警出现的频率相对是比较少的,想要彻底解决此类告警,就不得不说一下有关存储的相关知识了。
文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。
而系统会把真是的数据和文件属性(rwx,group,uid…..),存放到不通的块,权限等属性存放到不同的inode中,实际数据会存放到data block中,另外还有一个超级块superblock会记录文件系统的基本信息,如inode,block总量使用量以及剩余量等。
inode 中除了记录文件属性外,还记录了文件所在的block号,一个文件占一个inode,因此 我们知道的是,如果得到inode就很轻松知道对应的文件的block,也就能找到data block了。
inode包含文件的元信息,具体来说有以下内容:
* 文件的字节数
* 文件拥有者的User ID
* 文件的Group ID
* 文件的读、写、执行权限
* 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
* 链接数,即有多少文件名指向这个inode
* 文件数据block的位置
可以用stat命令,查看某个文件的inode信息:
[root@pcrdb01 ~]# stat install.log
File: `install.log'
Size: 50712 Blocks: 112 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 652802 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-06-06 19:59:43.111889181 +0800
Modify: 2018-05-09 14:34:04.278999817 +0800
Change: 2018-05-09 14:34:13.545999813 +0800
三