dataguard- ORA-16004/ORA-01196/ORA-01110

               

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----

           

猜你喜欢

转载自blog.csdn.net/qq_44906603/article/details/89521628