Oracle实战:备份和恢复游戏(2)

王朝other·作者佚名  2008-05-21
窄屏简体版  字體: |||超大  

下面显示了警告日志(这只是其中一部分):

Thu Mar 06 12:41:15 2008

Errors in file d:\oracle\product\10.2.0\admin\db10\bdump\db10_ckpt_2756.trc:

ORA-00206: error in writing (block 3, # blocks 1) of control file

ORA-00202: control file: 'F:\ORACLE\CONTROL03.CTL'

ORA-27072: File I/O error

OSD-04008: WriteFile() failure, unable to write to file

O/S-Error: (OS 1006) The volume for a file has been externally altered so that the opened file is no longer valid.

…some more messages…

Thu Mar 06 12:41:29 2008

Instance terminated by CKPT, pid = 2756

修复这个问题其实很简单,但是你真的了解了当一个控制文件丢失后发生了什么吗?

修复问题,重新连接并启动

SQL> prompt Remove the reference to control03

SQL> startup

ORA-24324: service handle not initialized

ORA-01041: internal error. hostdef extension doesn't exist

SQL> conn sys/oracle as sysdba

Connected to an idle instance.

SQL> startup

ORACLE instance started.

Total System Global Area 289406976 bytes

Fixed Size 1290184 bytes

Variable Size 104857656 bytes

Database Buffers 176160768 bytes

Redo Buffers 7098368 bytes

Database mounted.

Database opened.

SQL>

回到在线重做日志文件,丢失了一个成员,实例会象丢失控制文件那样崩溃吗?答案是:依情况而定。一个组可能有一个或多个成员,我们先看一看 #members=1的情况,与前面的例子类似,我将在一个闪存盘上创建一个成员的组,并使这个组成为活动组(意味着STATUS的值是ACTIVE, CURRENT, INACTIVE和UNUSED吗?),一旦组是活动的,我将拔出闪存盘,当前的重做日志组是哪一个?从警告日志可以看到:

提取自警告日志

Thu Mar 06 13:22:11 2008

Thread 1 advanced to log sequence 211

Current log# 10 seq# 211 mem# 0: F:\ORACLE\REDO10.LOG

如丢失控制文件一样,实例停止运转了。

SQL> select * from v$logfile;

GROUP# STATUS TYPE MEMBER

---------- ------- ------- ------------------------------------------------

7 ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\DB10\REDO07.LOG

8 ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\DB10\REDO08.LOG

10 ONLINE F:\ORACLE\REDO10.LOG

9 ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\DB10\REDO09.LOG

SQL> select * from v$logfile;

select * from v$logfile

*

ERROR at line 1:

ORA-03113: end-of-file on communication channel

在这个例子中,是LGWR导致了实例终止,注意在其他例子中是CKPT,在控制文件中记录了什么呢?SCN,哪个进程使用SCN给控制文件做的印记?checkpoint进程。

如果想在家中尝试,将数据库运行在非归档模式,并在当前日志组中只使用一个成员,它能再次打开数据库吗?

那个组被多路复用,相同的文件从系统中拔出,会发生什么?生命还是要继续,在警告日志中记录了一条关于丢失成员的消息,让我们向组10添加第二个成员,将它放在一个不同的驱动器中,然后再次拔出闪存盘(开始打开数据库时应该有一个提示信息)。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航