控制文件丢失,分两种情况:
1. 有备份,但要保证该备份是最后一次resetlogs之后的备份。
恢复步骤如下:
SQL> shutdown immediate
拷贝备份文件到相应目录。(如果控制文件所在的磁盘不能访问,修改初始化文件,更新控制文件路经)
SQL> STARTUP NOMOUNT
ORACLE 例程已经启动。
1. 有备份,但要保证该备份是最后一次resetlogs之后的备份。
恢复步骤如下:
SQL> shutdown immediate
拷贝备份文件到相应目录。(如果控制文件所在的磁盘不能访问,修改初始化文件,更新控制文件路经)
SQL> STARTUP NOMOUNT
ORACLE 例程已经启动。
Total System Global Area 603979776 bytes
Fixed Size 1250380 bytes
Variable Size 171969460 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes
SQL> recover database using backup controlfile until cancel
ORA-00279: 更改 439723 (在 03/24/2010 23:47:36 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\STUDY\ARCHIVELOG\2010_03_25\O1_MF_1
Fixed Size 1250380 bytes
Variable Size 171969460 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes
SQL> recover database using backup controlfile until cancel
ORA-00279: 更改 439723 (在 03/24/2010 23:47:36 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\STUDY\ARCHIVELOG\2010_03_25\O1_MF_1
_23_%U_.ARC
ORA-00280: 更改 439723 (用于线程 1) 在序列 #23 中
ORA-00280: 更改 439723 (用于线程 1) 在序列 #23 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO03.LOG
ORA-00328: 归档日志在更改 432393 结束, 需要稍后的更改 439723
ORA-00334: 归档日志: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO03.LOG'
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01152: 文件 1 没有从过旧的备份中恢复
ORA-01110: 数据文件 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSTEM01.DBF'
SQL> recover database using backup controlfile until cancel
ORA-00279: 更改 439723 (在 03/24/2010 23:47:36 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\STUDY\ARCHIVELOG\2010_03_25\O1_MF_1
_23_%U_.ARC
ORA-00280: 更改 439723 (用于线程 1) 在序列 #23 中
ORA-00280: 更改 439723 (用于线程 1) 在序列 #23 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG
已应用的日志。
完成介质恢复。
这里最后输入的是在线日志未归档日志的的路经.
可以通过
SQL> select * from v$log
2 /
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ----------- ---------------- --------------
1 1 22 52428800 1 YES INACTIVE 432394 24-3月 -10
3 1 21 52428800 1 YES INACTIVE 423957 24-3月 -10
2 1 23 52428800 1 NO CURRENT 439627 24-3月 -10
第二个未归档
SQL> select * from v$logfile
2 /
GROUP# STATUS TYPE MEMBER
--------------------------------------
1 ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO01.LOG
2 ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG
3 ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO03.LOG
路经为:ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG
SQL> alter database open
2 /
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
--------------------------------------
1 ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO01.LOG
2 ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG
3 ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO03.LOG
路经为:ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG
SQL> alter database open
2 /
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL> alter database open noresetlogs
2 /
alter database open noresetlogs
*
第 1 行出现错误:
ORA-01588: 要打开数据库则必须使用 RESETLOGS 选项
SQL> alter database open resetlogs
2 /
数据库已更改。
即完成恢复.
2. 无备份
这种情况需要重建控制文件,一般通过
alter database backup controlfile to trace命令即可。(控制文件都丢失了,怎么执行这个命令,解决方法:
找个ORACLE实例运行产生脚本,修改下就成)。脚本大体如下:
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "STUDY" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO01.LOG' SIZE 50M,
GROUP 2 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG' SIZE 50M,
GROUP 3 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO03.LOG' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSTEM01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\UNDOTBS01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSAUX01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\USERS01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\STUDY.DBF'
CHARACTER SET ZHS16GBK;
RECOVER DATABASE
ALTER DATABASE OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\TEMP01.DBF'
SIZE 20971520 REUSE AUTOEXTEND OFF;
这里是NORESETLOGS,因为在线日志是完好的。
恢复步骤如下:
SQL> shutdown immediate
ORA-01109: ??????
即完成恢复.
2. 无备份
这种情况需要重建控制文件,一般通过
alter database backup controlfile to trace命令即可。(控制文件都丢失了,怎么执行这个命令,解决方法:
找个ORACLE实例运行产生脚本,修改下就成)。脚本大体如下:
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "STUDY" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO01.LOG' SIZE 50M,
GROUP 2 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG' SIZE 50M,
GROUP 3 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO03.LOG' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSTEM01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\UNDOTBS01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSAUX01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\USERS01.DBF',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\STUDY.DBF'
CHARACTER SET ZHS16GBK;
RECOVER DATABASE
ALTER DATABASE OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\TEMP01.DBF'
SIZE 20971520 REUSE AUTOEXTEND OFF;
这里是NORESETLOGS,因为在线日志是完好的。
恢复步骤如下:
SQL> shutdown immediate
ORA-01109: ??????
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> STARTUP NOMOUNT
ORACLE 例程已经启动。
Total System Global Area 603979776 bytes
Fixed Size 1250380 bytes
Variable Size 171969460 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "STUDY" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO01.LOG' SIZE 50M,
9 GROUP 2 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG' SIZE 50M,
10 GROUP 3 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO03.LOG' SIZE 50M
11 DATAFILE
12 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSTEM01.DBF',
13 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\UNDOTBS01.DBF',
14 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSAUX01.DBF',
15 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\USERS01.DBF',
16 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\STUDY.DBF'
17 CHARACTER SET ZHS16GBK
18 ;
Fixed Size 1250380 bytes
Variable Size 171969460 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "STUDY" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO01.LOG' SIZE 50M,
9 GROUP 2 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO02.LOG' SIZE 50M,
10 GROUP 3 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\REDO03.LOG' SIZE 50M
11 DATAFILE
12 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSTEM01.DBF',
13 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\UNDOTBS01.DBF',
14 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSAUX01.DBF',
15 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\USERS01.DBF',
16 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\STUDY.DBF'
17 CHARACTER SET ZHS16GBK
18 ;
控制文件已创建。
SQL> RECOVER DATABASE
ORA-00283: ??????????
ORA-00264: ?????
ORA-00283: ??????????
ORA-00264: ?????
SQL> ALTER SYSTEM ARCHIVE LOG ALL
2 /
ALTER SYSTEM ARCHIVE LOG ALL
*
第 1 行出现错误:
ORA-00271: ?????????
SQL> ALTER DATABASE OPEN;
数据库已更改。
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\
TEMP01.DBF' REUSE;
TEMP01.DBF' REUSE;
表空间已更改。
SQL> select * from test
2 /
ID NAME
---------- -------------
1 afda
完成恢复.
2 /
ID NAME
---------- -------------
1 afda
完成恢复.
本文转自 anranran 51CTO博客,原文链接:http://blog.51cto.com/guojuanjun/287826