RAC恢复的单实例数据库删除日志组时遇到ORA-01567
Oct242018
今天在搞一套测试数据库时遇到了日志组不让删的情况。
故事是这样的:开发人员发邮件要导一张生产库的表到测试数据库,登录测试服务器发现没有可用空间了,那就删点东西吧,一般首先想删的就是告警日志和trace文件了,这些文件不需要分析的情况下,是完全可以删的,不会影响数据库的运行,可是都删掉也就100多MB的空间,还是不够。
那怎么办,再也没啥可以删的了,总不能删数据库的文件吧,还别说,还真可以删,因为这个测试数据库是从一套两节点的RAC克隆出来的,那套RAC有10组REDO LOG FILE,还有STANDBY REDO FILE,而且每个REDO LOG FILE还有2个成员,完全可以把STANDBY REDO FILE删掉,因为测试数据库并没有搭建DG,可是查询后发现,由于之前也遇到磁盘空间不够,STANDBY REDO FILE已经删过了。
因为这个测试数据库是从RAC克隆而来,每个节点都有独立的REDO LOG FILE,变成单实例后,只有节点1的REDO LOG FILE再用,那就把节点2的删掉吧,再删节点2的REDO LOG FILE时,遇到了ORA-01567错误。
下面是操作过程:
先查询REDO LOG FILE的情况,确定哪些可以删。
sys@IVLDB> select GROUP#,member from v$logfile; GROUP# MEMBER ---------- -------------------------------------------------- 1 /u01/app/oracle/oradata/ivldb/redo01.log 1 /u01/app/oracle/oradata/ivldb/redo02.log 2 /u01/app/oracle/oradata/ivldb/redo03.log 2 /u01/app/oracle/oradata/ivldb/redo04.log 3 /u01/app/oracle/oradata/ivldb/redo05.log 3 /u01/app/oracle/oradata/ivldb/redo06.log 5 /u01/app/oracle/oradata/ivldb/redo07.log 5 /u01/app/oracle/oradata/ivldb/redo08.log 6 /u01/app/oracle/oradata/ivldb/redo09.log 6 /u01/app/oracle/oradata/ivldb/redo010.log 7 /u01/app/oracle/oradata/ivldb/redo011.log 7 /u01/app/oracle/oradata/ivldb/redo012.log 8 /u01/app/oracle/oradata/ivldb/redo013.log 8 /u01/app/oracle/oradata/ivldb/redo014.log 10 /u01/app/oracle/oradata/ivldb/redo017.log 10 /u01/app/oracle/oradata/ivldb/redo018.log 16 rows selected. sys@IVLDB> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS ---------- ---------- ---------- ---------- ---------- --- -------- 1 1 31993 524288000 2 NO INACTIVE 2 1 31992 524288000 2 NO INACTIVE 3 1 31994 524288000 2 NO INACTIVE 5 1 31995 524288000 2 NO CURRENT 6 2 1 524288000 2 YES INACTIVE 7 2 0 524288000 2 YES UNUSED 8 2 0 524288000 2 YES UNUSED 10 2 0 524288000 2 YES UNUSED 8 rows selected.
确定6,7,8,10这4个日志组可以删,那就动手。
sys@IVLDB> alter database drop logfile group 7; Database altered. sys@IVLDB> alter database drop logfile group 8; Database altered. sys@IVLDB> alter database drop logfile group 10; alter database drop logfile group 10 * ERROR at line 1: ORA-01567: dropping log 10 would leave less than 2 log files for instance ivldb2 (thread 2) ORA-00312: online log 10 thread 2: '/u01/app/oracle/oradata/ivldb/redo017.log' ORA-00312: online log 10 thread 2: '/u01/app/oracle/oradata/ivldb/redo018.log'
在节点2的REDO LOG FILE就剩2个的时候,就不让删了,这是REDO的机制,每个节点不能少于2个日志组,要不日志怎么切换呀,是吧。
解决方法很简单,把节点2给踢出去就行了。
sys@IVLDB> alter database disable THREAD 2; Database altered. sys@IVLDB> alter database drop logfile group 10; Database altered. sys@IVLDB> alter database drop logfile group 6; Database altered.
然后还得去操作系统上把这些删除掉的REDO LOG FILE删掉。