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删掉。