丢失控制文件(归档情况下)
在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),需要用备份的控制文件恢复数据库,一直恢复到redo中commit的数据,必须执行以下步骤:
1) 备份数据库(backup controlfile to trace)
2) nomount
3) 重建控制文件
4) RECOVER DATABASE;
5) ALTER DATABASE OPEN;
备份数据库并做准备工作
(前题是在进行下面的操作之前已经做过一次数据库全备,这里是以热备份为例的,冷备份同理。以下操作说明,在进行了部分提交工作后,还没有进行归档,数据库就crash了,那么,如果能够使用数据库备份完成完全恢复,用户lunar应该可以她看到提交的两条数据:1和2。因为没有归档,所以它们是在在实例恢复时前滚而恢复的;但是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>