Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92494222
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-05-19 15:46:34

作者: Steve Callan/黄永兵 译 出处:51CTO.com 
 
 
下面显示了警告日志(这只是其中一部分):

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

阅读(211) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~