最近在还原Oracle数据库后open的时候碰到了如下报错:
ORA-00349: 无法获得 '+RACDB_DATA/racdb/onlinelog/group_18.log' 的块大小
SP2-0642: SQL*Plus 内部错误状态 2137, 上下文 76:3:78
原因是是把rac还原到单实例上后,redo log的地址发生了变化。控制文件记录的是rac环境下的redo log的地址。
解决方法有2个,一是将它们重命名,改为正确的绝对路径;二是删除后重建。
直接删除后重建,第一次尝试,新建了group31、group32、group33,想删除group17、group18、group19,但是不允许。
第二次尝试,删除成员:
SQL> select group#,status from v$log;
GROUP# STATUS
---------- ----------------
32 UNUSED
17 CLEARING_CURRENT
33 UNUSED
31 UNUSED
18 CLEARING
19 CLEARING_CURRENT
已选择6行。
SQL> alter database drop logfile member '+RACDB_DATA/racdb/onlinelog/group_19.log';
alter database drop logfile member '+RACDB_DATA/racdb/onlinelog/group_19.log'
*
第 1 行出现错误:
ORA-01609: 日志 19 是线程 2 的当前日志 - 无法删除成员 ORA-00312:
联机日志 19 线程 2: '+RACDB_DATA/racdb/onlinelog/group_19.log'
ORA-00312: 联机日志 19 线程 2: '+FRA/racdb/onlinelog/redo19.log'
SQL> alter database drop logfile member '+RACDB_DATA/racdb/onlinelog/group_18.log';
alter database drop logfile member '+RACDB_DATA/racdb/onlinelog/group_18.log'
*
第 1 行出现错误:
ORA-00361: 无法删除最后一个日志成员 +RACDB_DATA/racdb/onlinelog/group_18.log
(组 18)
SQL> alter database drop logfile member '+RACDB_DATA/racdb/onlinelog/group_19.log';
alter database drop logfile member '+RACDB_DATA/racdb/onlinelog/group_19.log'
*
第 1 行出现错误:
ORA-01609: 日志 19 是线程 2 的当前日志 - 无法删除成员 ORA-00312:
联机日志 19 线程 2: '+RACDB_DATA/racdb/onlinelog/group_19.log'
ORA-00312: 联机日志 19 线程 2: '+FRA/racdb/onlinelog/redo19.log'
ORA-00312: 联机日志 19 线程 2: '/u01/app/oracle/oradata/racdb/onlinelog/redo19.log'
SQL> alter database clear logfile '+RACDB_DATA/racdb/onlinelog/group_19.log';
alter database clear logfile '+RACDB_DATA/racdb/onlinelog/group_19.log'
*
第 1 行出现错误:
ORA-01514: 日志说明中出现错误: 没有此类日志 ORA-01517:
日志成员: '+RACDB_DATA/racdb/onlinelog/group_19.log'
SQL> alter database clear logfile '+RACDB_DATA/racdb/onlinelog/group_18.log';
alter database clear logfile '+RACDB_DATA/racdb/onlinelog/group_18.log'
*
第 1 行出现错误:
ORA-01514: 日志说明中出现错误: 没有此类日志 ORA-01517:
日志成员: '+RACDB_DATA/racdb/onlinelog/group_18.log'
SQL> alter database drop logfile member '+RACDB_DATA/racdb/onlinelog/group_18.log';
alter database drop logfile member '+RACDB_DATA/racdb/onlinelog/group_18.log'
*
第 1 行出现错误:
ORA-00362: 要求输入成员以组成组 18 中的有效日志文件 ORA-01517:
日志成员: '+RACDB_DATA/racdb/onlinelog/group_18.log'
但是既不能直接删除组也不能删除成员,因此第三次尝试,想在现有组上添加正确路径的成员后再清除需要删除的成员:
SQL> alter database add logfile member '/u01/app/oracle/oradata/racdb/onlinelog/redo17.log' to group 17;
数据库已更改。
SQL> alter database add logfile member '/u01/app/oracle/oradata/racdb/onlinelog/redo18.log' to group 18;
数据库已更改。
SQL> alter database add logfile member '/u01/app/oracle/oradata/racdb/onlinelog/redo19.log' to group 19;
数据库已更改。
SQL> alter database drop logfile member '+RACDB_DATA/racdb/onlinelog/group_19.log';
alter database drop logfile member '+RACDB_DATA/racdb/onlinelog/group_19.log'
*
第 1 行出现错误:
ORA-01609: 日志 19 是线程 2 的当前日志 - 无法删除成员 ORA-00312:
联机日志 19 线程 2: '+RACDB_DATA/racdb/onlinelog/group_19.log'
ORA-00312: 联机日志 19 线程 2: '+FRA/racdb/onlinelog/redo19.log'
ORA-00312: 联机日志 19 线程 2: '/u01/app/oracle/oradata/racdb/onlinelog/redo19.log'
SQL> alter database clear logfile '+RACDB_DATA/racdb/onlinelog/group_19.log';
alter database clear logfile '+RACDB_DATA/racdb/onlinelog/group_19.log'
*
第 1 行出现错误:
ORA-01514: 日志说明中出现错误: 没有此类日志 ORA-01517:
日志成员: '+RACDB_DATA/racdb/onlinelog/group_19.log'
SQL> alter database drop logfile member '+RACDB_DATA/racdb/onlinelog/group_18.log';
alter database drop logfile member '+RACDB_DATA/racdb/onlinelog/group_18.log'
*
第 1 行出现错误:
ORA-00362: 要求输入成员以组成组 18 中的有效日志文件 ORA-01517:
日志成员: '+RACDB_DATA/racdb/onlinelog/group_18.log'
无法直接删除,因为说是无效。
无奈之下,只好第四次尝试,试试能不能重命名:
SQL> alter database rename file '+RACDB_DATA/racdb/onlinelog/group_18.log' to '/u01/app/oracle/oradata/racdb/onlinelog/group18.log';
数据库已更改。
SQL> alter database rename file '+RACDB_DATA/racdb/onlinelog/group_19.log' to '/u01/app/oracle/oradata/racdb/onlinelog/group19.log';
SP2-0734: 未知的命令开头 "执行该命令..." - 忽略了剩余的行。
SQL> alter database rename file '+RACDB_DATA/racdb/onlinelog/group_17.log' to '/u01/app/oracle/oradata/racdb/onlinelog/group17.log';
数据库已更改。
SQL> alter database rename file '+RACDB_DATA/racdb/onlinelog/group_19.log' to '/u01/app/oracle/oradata/racdb/onlinelog/group19.log';
数据库已更改。
SQL> alter database rename file '+FRA/racdb/onlinelog/redo17.log' to '/u01/app/oracle/oradata/racdb/onlinelog/redo177.log';
数据库已更改。
SQL> alter database rename file '+FRA/racdb/onlinelog/redo19.log' to '/u01/app/oracle/oradata/racdb/onlinelog/redo179.log';
数据库已更改。
SQL> select group#,member from gv$logfile;
GROUP# MEMBER
---------- --------------------------------------------------
33 /u01/app/oracle/oradata/racdb/onlinelog/redo33.log
17 /u01/app/oracle/oradata/racdb/onlinelog/redo17.log
18 /u01/app/oracle/oradata/racdb/onlinelog/redo18.log
19 /u01/app/oracle/oradata/racdb/onlinelog/redo19.log
17 /u01/app/oracle/oradata/racdb/onlinelog/redo177.log
19 /u01/app/oracle/oradata/racdb/onlinelog/redo179.log
1 +RACDB_DATA/racdb/onlinelog/group_01.log
2 +RACDB_DATA/racdb/onlinelog/group_02.log
17 /u01/app/oracle/oradata/racdb/onlinelog/group17.log
3 +FRA/racdb/onlinelog/redo03.log
18 /u01/app/oracle/oradata/racdb/onlinelog/group18.log
3 +RACDB_DATA/racdb/onlinelog/group_03.log
19 /u01/app/oracle/oradata/racdb/onlinelog/group19.log
4 +FRA/racdb/onlinelog/redo04.log
5 +FRA/racdb/onlinelog/redo05.log
6 +FRA/racdb/onlinelog/redo06.log
7 +FRA/racdb/onlinelog/redo07.log
7 +RACDB_DATA/racdb/onlinelog/group_07.log
8 +FRA/racdb/onlinelog/redo08.log
9 +FRA/racdb/onlinelog/redo09.log
10 +RACDB_DATA/racdb/onlinelog/group_10.log
已选择21行。
将所有v$log
视图里能看到的组17 18 19的成员都改为了正确路径。
数据库正常开库。
但是遗留了一个问题:
刚恢复好之后v$log
、gv$log
里只有组17、18、19,为什么v$logfile
、gv$logfile
里除了17、18、19还有1-17呢?并且无法删除