author:skate
time: 2009/08/01
1. 故障现象:
一次突然断电导致我的standby,open时报如下的错误:
ORA-16004: 备份数据库需要恢复
ORA-01196: 文件 1 由于介质恢复会话失败而不一致
ORA-01110: 数据文件 1: 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCLDG/SYSTEM01.DBF'
2. 环境:
os: windows XP
oracle : oracle10.2
3.解决:
standby库操作:
C:/Documents and Settings/skate>sqlplus "sys/aibo@orcl as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 8月 1 14:35:19 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已连接到空闲例程。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 247466884 bytes
Database Buffers 356515840 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
SQL> alter database recover managed standby database using current logfile disconnect from session;
在primary 库
sql> alter system switch logfile; ---目的使standby更完全的apply来自primary的log
在standby库:
SQL> alter database recover managed standby database cancel;
数据库已更改。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-16004: 备份数据库需要恢复
ORA-01196: 文件 1 由于介质恢复会话失败而不一致
ORA-01110: 数据文件 1: 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCLDG/SYSTEM01.DBF'
这个时候要注意,一般对于单库活着primary库可以用resotre database或recover database
如果用这两个命令会报:Ora-01666:controlfile is for a standby database
但这里不能用,一般的方法是:
1.把standby库启动到recover模式,
SQL> alter database recover managed standby database using current logfile disconnect from session;
2.然后在paimary库执行归档sql
SQL> alter system switch logfile;
3.standby取消recover模式,一般到这里就可以open了
SQL> alter database recover managed standby database cancel;
SQL> alter database open;
插曲结束,实际继续操作:
在standby库:
SQL> alter database recover managed standby database using current logfile disconnect from session;
数据库已更改。
这时在primary库上:
SQL> alter system switch logfile;
系统已更改。
在回到standby库:
SQL> alter database recover managed standby cancel;
alter database recover managed standby cancel
*
第 1 行出现错误:
ORA-02000: 缺失 DATABASE 关键字
SQL> alter database recover managed standby database cancel;
数据库已更改。
这个时候应该可以打开standby库了
SQL> alter database open;
数据库已更改。
SQL>
但是如果standby库没有primary的datafile,这个可以结合standby库和主库的v$datafile
例如: select * from v$database。 在alert.log里面提示很全面的
这个时候就需要手工为standby创建一个datafile
方法:
alter database create datafile 'v$datafile_name' as 'expected_file_name';
然后:
1.alter database recover managed standby database using current logfile disconnect from session;
2.primary 数据库做alter system switch logfile;
3. 在standby库, alter database recover managed standby database
此时standby数据库应该能够open了。
---end----