今天遇到一个问题,同事来说归档目录已经全部删除了,但是归档目录的大小还是100%,且执行shutdown immediate挂死。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ bdf Filesystem kbytes used avail %used Mounted on /dev/vg00/lvol3 262144 181520 80040 69% / /dev/vg00/lvol1 314736 84360 198896 30% /stand /dev/vg00/lvol8 4718592 1056280 3633752 23% /var /dev/vg00/lvol7 2654208 1435160 1209576 54% /usr /dev/vg00/lvol4 1540096 1028512 508264 67% /tmp /dev/vg00/lvol9 10485760 4948670 5365096 48% /oracle /dev/vg00/lvol6 94208000 7317328 86211936 8% /opt /dev/vg00/lvol5 163840 2480 160104 2% /home /dev/vg00/lv_arch 51216384 51112984 102632 100% /arch $ cd /arch $ ll total 0 drwxr-xr-x 2 oracle dba 96 Dec 18 2007 lost+found $ |
同时alertlog中也在不断的报错:
1 2 3 4 5 |
ORA-16014: log 2 sequence# 28801 not archived, no available destinations ORA-00312: online log 2 thread 1: '/dev/vg_audit01/rredo_128m_02' ORA-00312: online log 2 thread 1: '/dev/vg_audit01/rredo_128m_12' ORA-00312: online log 2 thread 1: '/dev/vg_audit01/rredo_128m_22' Mon Sep 1 10:28:55 2008 |
引起该问题的主要原因,就是在/arch目录下,使用了rm *命令来删除归档,但是当前正好有归档进程(arch)正在写出,rm后文件系统的句柄无法释放,因此空间也没有释放。
此时我们用shutdown immediate命令无法关闭数据库,这是因为,在现在的状态下,arch已经被撑爆,所有组的redolog均为非inactive状态,shutdown immediate需要做checkpoint,checkpoint会将dirty buffer中的东西写入到db buffer,lgwr的触发条件之一就是dbwr进程写db file,此时,lgwr发现所有的redolog都是非inactive状态,都不能写,继续寻求arch切出,以期待能写redolog。而此时arch目录爆满,因此就报上述的错了。
我们用shutdown abort关闭数据库后,空间就释放了。
1 2 3 4 5 6 7 8 9 10 11 |
SQL> !bdf Filesystem kbytes used avail %used Mounted on /dev/vg00/lvol3 262144 181520 80040 69% / /dev/vg00/lvol1 314736 84360 198896 30% /stand /dev/vg00/lvol8 4718592 1072672 3617488 23% /var /dev/vg00/lvol7 2654208 1435160 1209576 54% /usr /dev/vg00/lvol4 1540096 1028512 508264 67% /tmp /dev/vg00/lvol9 10485760 4945978 5367702 48% /oracle /dev/vg00/lvol6 94208000 7317328 86211936 8% /opt /dev/vg00/lvol5 163840 2480 160104 2% /home /dev/vg00/lv_arch 51216384 107384 50709848 0% /arch |
我们在删除归档的时候,一定不能全部删除,一定要留最后一个归档,以防万一。最安全的方法,当然是在rman中用delete input删除了。