有备份的control
file,但之后我做了ddl操作,导致当前的control
file比备份的新,然后control
file全部丢失,怎么用备份的control
file来恢复数据库?步骤1:检查当前redo和archive文件sys@PAN
>selectgroup#
,sequence#
,archived
,status
,first_change#
from v$
log; GROUP#
SEQUENCE# ARC STATUS FIRST_CHANGE#---------- ---------- --- ---------------- -------------1 4
NO CURRENT 4433422 2 YES INACTIVE 4433353 3 YES INACTIVE 443338 sys@PAN
>select name
from v$archived_log
where name
is not null; NAME--------------------------------------------------------------------------------
/u01
/flash_recovery_area
/PAN
/archivelog
/2013_06_23
/o1_mf_1_1_8wg0nhky_
.arc
/u01
/flash_recovery_area
/PAN
/archivelog
/2013_06_23
/o1_mf_1_2_8wg0njog_
.arc
/u01
/flash_recovery_area
/PAN
/archivelog
/2013_06_23
/o1_mf_1_3_8wg0nlhz_
.arc步骤2:冷备步骤3:
alter database backup controlfile
to trace
;生成一个trace文件,可以用于恢复控制文件,它是一个文本文件。步骤4:
alter database backup controlfile
to "/backup/pancontrol.bak"
;备份当前的控制文件。步骤5:创建一个表空间,然后在此表空间里建表,加数据,目的是让controlfile改变成新的。
create tablespace ts_test02 datafile"/u01/oradata/pan/ts_test02_01.dbf"
size10m
;sqlplus scott
/tiger
create table tb_test02
(id
int) tablespace ts_test02
;insert into tb_test02
values(1
);insert into tb_test02
values(2
);insert into tb_test02
values(3
);commit;现在这些改变在哪个日志文件里呢?sys@PAN
>selectgroup#
,sequence#
,archived
,status
from v$
log; GROUP#
SEQUENCE# ARC STATUS---------- ---------- --- ----------------1 4
NO CURRENT2 2 YES INACTIVE3 3 YES INACTIVE Elapsed
:00
:00
:00.01理论上在1号日志中,一会要用这个做恢复。步骤6删除当前controlfile步骤7shutdown abort步骤8用备份controlfile转储。
[Oracle@oracle11g pan
]$ cp
/backup
/pancontrol
.bak control01
.ctl
[oracle@oracle11g pan
]$ cp
/backup
/pancontrol
.bak control02
.ctl步骤9起库到mount,若到
open会出错:sys@PAN
>alter database
open;alter database
open*ERROR
at line1
:ORA
-01589
: must
use RESETLOGS
or NORESETLOGS
option for database
open步骤10尝试使用备份的controlfile来恢复数据库。recover database
using backup controlfile
;结果:sys@PAN
>recover database
using backup controlfile
;ORA
-00279
: change443470 generated
at06
/23
/201310
:23
:49 needed
for thread 1ORA
-00289
: suggestion
: /u01
/flash_recovery_area
/PAN
/archivelog
/2013_06_23
/o1_mf_1_4_
%u_
.arcORA
-00280
: change443470
for thread1
is in sequence #4Specify
log:{<RET
>=suggested
| filename
| AUTO
| CANCEL
} 看下这个目录下有没有这个归档日志,发现没有。也就是说数据库会先找你的归档日志来恢复,但我们知道以前的那些DDL操作被记录到1号联机日志里了,所以我要用1号redo日志来做恢复。 继续:recover database
using backup controlfile
;ORA
-00279
: change443470 generated
at06
/23
/201310
:23
:49 needed
for thread 1ORA
-00289
: suggestion
: /u01
/flash_recovery_area
/PAN
/archivelog
/2013_06_23
/o1_mf_1_4_
%u_
.arcORA
-00280
: change443470
for thread1
is in sequence #4Specify
log:{<RET
>=suggested
| filename
| AUTO
| CANCEL
}/u01
/oradata
/pan
/redo01
.logORA
-00283
: recovery
session canceled due
to errorsORA
-01244
: unnamed datafile
(s
) added
to control
fileby media recoveryORA
-01110
:data file9
:"/u01/oradata/pan/ts_test02_01.dbf"ORA
-01112
: media recovery
not started又出错了!它说没有这个文件,因为日志里记录着ts_test02_01
.dbf,但控制文件里却没有,好的,现在我查看下控制文件里那个文件叫什么。sys@PAN
>selectfile#
,status
,name
from v$datafile
; FILE# STATUS NAME---------- ---------------------------------------------------------------------------------------1 SYSTEM
/u01
/oradata
/pan
/system01
.dbf2
ONLINE /u01
/oradata
/pan
/sysaux01
.dbf3
ONLINE /u01
/oradata
/pan
/lxtbs01
.dbf4
ONLINE /u01
/oradata
/pan
/users01
.dbf5
ONLINE /u01
/oradata
/pan
/undotbs02
.dbf6
ONLINE /u01
/oradata
/pan
/ts_test01
.dbf7
ONLINE /u01
/oradata
/pan
/ts_readonly01
.dbf8
ONLINE /u01
/oradata
/pan
/app2_01
.dbf9 RECOVER
/u01
/oracle
/dbs
/UNNAMED00009 9
rows selected
.现在明白了,控制文件里的这个文件名为“
/u01
/oracle
/dbs
/UNNAMED00009”,我把它先重命名成正确的。sys@PAN
>alter database
rename file"/u01/oracle/dbs/UNNAMED00009"2
to"/u01/oradata/pan/ts_test02_01.dbf"
;现在再一次恢复,使用1号redo日志。recover database
using backup controlfile
;ORA
-00279
: change443687 generated
at06
/23
/201310
:27
:38 needed
for thread 1ORA
-00289
: suggestion
: /u01
/flash_recovery_area
/PAN
/archivelog
/2013_06_23
/o1_mf_1_4_
%u_
.arcORA
-00280
: change443687
for thread1
is in sequence #4Specify
log:{<RET
>=suggested
| filename
| AUTO
| CANCEL
}/u01
/oradata
/pan
/redo01
.logLog applied
.Media recovery complete
.果??,恢复成功!步骤11
alter database
open resetlogs
;步骤12 冷备更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12Oracle冷备和热备脚本Oracle日志挖掘相关资讯 恢复Oracle数据库 本文评论 查看全部评论 (0)