现在的位置: 首页 > 综合 > 正文

丢失控制文件(归档情况下)

2013年09月15日 ⁄ 综合 ⁄ 共 6990字 ⁄ 字号 评论关闭

 

 

 

 

丢失控制文件(归档情况下)

 

 

 

Oracle 9i环境下,丢失一个控制文件

恢复要点:

1)       查看当前正在使用的控制文件

2)       模拟丢失控制文件‘e:/oracle/ora92/test/control01.ctl’的情况

3)       修改字符集

4)       启动数据库

5)       检查警告文件(alert.log

6)       进行恢复(修改参数文件或者复制可用的控制文件来覆盖损坏的控制文件)

7)       重新打开数据库

 

具体操作步骤:

查看当前正在使用的控制文件

SQL> show parameter control_files

 

NAME                            TYPE       
VALUE

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

control_files                       string     
e:/oracle/ora92/test/control01.ctl,

                                            e:/oracle/ora92/test/control02.ctl,

                                            e:/oracle/ora92/test/control03.ctl

SQL>

 

模拟丢失控制文件‘e:/oracle/ora92/test/control01.ctl’的情况

(注意,在Unix环境下可以联机删除控制文件;但是在Window环境下不能联机删除控制文件。)

SQL> shutdown immediate;

数据库已经关闭。

已经卸载数据库。

ORACLE例程已经关闭。

SQL> exit

Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.1.0 - Production中断开

 

删除控制文件e:/oracle/ora92/test/control01.ctl

 

修改字符集

C:/>set nls_lang=AMERICAN_AMERICA.US7ASCII

 

启动数据库

C:/>sqlplus "/ as sysdba"

 

SQL*Plus: Release 9.2.0.1.0 - Production on Sat Feb 2 20:31:47 2002

 

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

 

 

Connected to:

Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.1.0 - Production

 

SQL> startup

ORACLE instance started.

 

Total System Global Area 135338868 bytes

Fixed Size                  453492 bytes

Variable Size            109051904 bytes

Database Buffers          25165824 bytes

Redo Buffers                667648 bytes

ORA-00205: error in identifying controlfile, check alert log for more info

SQL>

 

 

可见由于当前控制文件不可用,导致ORA-00205错误。

 

检查警告文件(alert.log)我们可以看见损坏(或者丢失)的控制文件是'e:/oracle/ora92/test/control01.ctl'

ALTER DATABASE  MOUNT

Sat Feb 02 20:32:10 2002

ORA-00202: controlfile: 'e:/oracle/ora92/test/control01.ctl'

ORA-27041: unable to open file

OSD-04002:无法打开文件

O/S-Error: (OS 2)系统找不到指定的文件。

 

关闭数据库

SQL> shutdown abort;

ORACLE instance shut down.

SQL>

 

 

恢复方法1——修改参数文件

 

修改参数文件

'e:/oracle/ora92/test/control01.ctl'control_files参数中去掉

control_files=(" e:/oracle/ora92/test/control02.ctl", "e:/oracle/ora92/test/control03.ctl")

 

使用pfile参数打开数据库

C:/>sqlplus "/ as sysdba"

 

SQL*Plus: Release 9.2.0.1.0 - Production on Sat Feb 2 20:52:15 2002

 

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

 

Connected to an idle instance.

 

SQL> startup pfile=E:/oracle/admin/test/pfile/init.ora

ORACLE instance started.

 

Total System Global Area 135338868 bytes

Fixed Size                  453492 bytes

Variable Size            109051904 bytes

Database Buffers          25165824 bytes

Redo Buffers                667648 bytes

Database mounted.

Database opened.

SQL>

 

检查一下当前可用的控制文件

SQL> show parameter control_files

 

NAME                   TYPE       
VALUE

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

control_files              string     
e:/oracle/ora92/test/control02.ctl,

                                   e:/oracle/ora92/test/con trol03.ctl

SQL>

 

重建spfile

SQL> create spfile from pfile='E:/oracle/admin/test/pfile/init.ora';

 

File created.

 

SQL>

 

 

恢复方法二——把任一一个可用的控制文件拷贝为损坏的控制文件
把任一一个可用的控制文件拷贝为'e:/oracle/ora92/test/control01.ctl'

SQL> host copy e:/oracle/ora92/test/control02.ctl e:/oracle/ora92/test/control01.ctl

已复制        1
个文件。

SQL>

 

重新打开数据库

SQL> startup

ORACLE instance started.

 

Total System Global Area 135338868 bytes

Fixed Size                  453492 bytes

Variable Size            109051904 bytes

Database Buffers          25165824 bytes

Redo Buffers                667648 bytes

Database mounted.

Database opened.

SQL>

 

检查一下当前可用的控制文件

SQL> show parameter control_files

 

NAME                            TYPE     
  VALUE

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

control_files                       string     
e:/oracle/ora92/test/control01.ctl,

                                            e:/oracle/ora92/test/control02.ctl,

                                            e:/oracle/ora92/test/control03.ctl

SQL>

 

 

 

丢失全部控制文件(不包括数据文件和redo

 

恢复要点

shutdown abort的以后,如果丢失全部控制文件(不包括数据文件和redo),需要用备份的控制文件恢复数据库,一直恢复到redocommit的数据,必须执行以下步骤:

1)       备份数据库(backup
controlfile to trace

2)       nomount

3)       重建控制文件

4)       RECOVER
DATABASE;

5)       ALTER
DATABASE OPEN;

 

备份数据库并做准备工作

(前题是在进行下面的操作之前已经做过一次数据库全备,这里是以热备份为例的,冷备份同理。以下操作说明,在进行了部分提交工作后,还没有进行归档,数据库就crash了,那么,如果能够使用数据库备份完成完全恢复,用户lunar应该可以她看到提交的两条数据:12。因为没有归档,所以它们是在在实例恢复时前滚而恢复的;但是insert
into test values(3)
是没有提交的,应该在实例恢复时回滚。)

 

Microsoft Windows 2000 [Version 5.00.2195]

(C)版权所有 1985-2000 Microsoft Corp.

 

C:/>sqlplus "lunar/lunar"

 

SQL*Plus: Release 9.2.0.1.0 - Production on星期日 2
3 09:53:24 2002

 

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

 

 

连接到:

Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.1.0 - Production

 

SQL> create table test(ff number);

 

表已创建。

 

SQL> insert into test values(1);

 

已创建1
行。

 

SQL> insert into test values(2);

 

已创建 1行。

 

SQL> commit;

 

提交完成。

 

SQL> insert into test values(3);

 

已创建 1行。

 

SQL>

 

另外打开一个窗口,模拟数据库crash

 

 

删除所有控制文件,模拟所有控制文件丢失的情况

然后再次启动数据的时候会出现如下错误提示:

SQL> startup

ORACLE instance started.

 

Total System Global Area 135338868 bytes

Fixed Size                  453492 bytes

Variable Size            109051904 bytes

Database Buffers          25165824 bytes

Redo Buffers                667648 bytes

ORA-00205: error in identifying controlfile, check alert log for moreinfo

 

检查alert.log文件,可以看见如下错误信息

ORA-00202: controlfile: 'e:/oracle/ora92/test/control02.ctl'

ORA-27041: unable to open file

OSD-04002:无法打开文件

O/S-Error: (OS 2)系统找不到指定的文件。

 

Sun Feb 03 10:09:23 2002

ORA-205 signalled during: ALTER DATABASE  MOUNT...

 

 

使用重建控制文件的方法恢复数据库
编辑备份的控制文件(TO TRACE)

SQL> startup

ORACLE instance started.

 

Total System Global Area 135338868 bytes

Fixed Size                  453492 bytes

Variable Size            109051904 bytes

Database Buffers          25165824 bytes

Redo Buffers                667648 bytes

ORA-00205: error in identifying controlfile, check alert log for more info

 

 

重建控制文件

SQL>CREATE CONTROLFILE
REUSE DATABASE "TEST1"NORESETLOGS 
ARCHIVELOG

 2     
MAXLOGFILES 5

 3     
MAXLOGMEMBERS 3

 4     
MAXDATAFILES 100

 5     
MAXINSTANCES 1

 6     
MAXLOGHISTORY 226

 7 
LOGFILE

 8   
GROUP 1 'E:/ORACLE/ORA92/TEST/REDO01.LOG' SIZE 30M,

 9   
GROUP 2 'E:/ORACLE/ORA92/TEST/REDO02.LOG' SIZE 30M,

 10   GROUP 3 'E:/ORACLE/ORA92/TEST/REDO03.LOG' 
SIZE 30M

 11 DATAFILE

 12   'E:/ORACLE/ORA92/TEST/SYSTEM01.DBF',

 13   'E:/ORACLE/ORA92/TEST/UNDOTBS01.DBF',

 14   'E:/ORACLE/ORA92/TEST/DRSYS01.DBF',

 15   'E:/ORACLE/ORA92/TEST/INDX01.DBF',

 16   'E:/ORACLE/ORA92/TEST/TOOLS01.DBF',

 17   'E:/ORACLE/ORA92/TEST/USERS01.DBF',

 18   'E:/ORACLE/ORA92/TEST/XDB01.DBF',

 19   'E:/ORACLE/ORA92/TEST/RMAN01.DBF'

 20 CHARACTER SET ZHS16GBK

 21 ;

 

Control file created.

 

完全恢复数据库

SQL> recover database;

Media recovery complete.

 

打开数据库

SQL>alter database open;

 

Database altered.

 

验证恢复

SQL> conn lunar/lunar

Connected.

SQL> select * from test;

 

       FF

----------

        1

        2

 

SQL> conn / as sysdba

Connected.

SQL> archive log list;

Database log mode             Archive Mode

Automatic archival            Enabled

Archive destination           e:/oracle/oradata/test/archive

Oldest online log sequence    21

Next log sequence to archive  23

Current log sequence          23

SQL>

 

 

抱歉!评论已关闭.