分类: Oracle
2008-05-19 15:46:34
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添加第二个成员,将它放在一个不同的驱动器中,然后再次拔出闪存盘(开始打开数据库时应该有一个提示信息)。