|
【赛迪网-it技术报道】问题:在数据库损坏的情况下,如果恢复时报rman-06026错误应当如何解决?
style="text-indent:2em">解答:如果你没有使用catalog,你可以选择dbms_backup_restore来进行恢复。
1、具体的错误信息示例
你可以发现虽然list backup可以显示备份集,但是已经没有办法再进行恢复了,错误为rman-06026,rman-06026。
[oracle@jumper oradata]$ rman target /
recovery manager: release 9.2.0.4.0 - production
copyright (c) 1995, 2002, oracle corporation. all rights reserved.
connected to target database: conner (dbid=3152029224)
rman> restore database;
starting restore at 11-jun-05
using target database controlfile instead of recovery catalog
allocated channel: ora_disk_1
channel ora_disk_1: sid=11 devtype=disk
rman-00571: ===========================================================
rman-00569: =============== error message stack follows ===============
rman-00571: ===========================================================
rman-03002: failure of restore command at 06/11/2005 01:19:01
rman-06026: some targets not found - aborting restore
rman-06023: no backup or copy of datafile 3 found to restore
rman-06023: no backup or copy of datafile 2 found to restore
rman-06023: no backup or copy of datafile 1 found to restore
rman> list backup;
list of backup sets
===================
bs key type lv size device type elapsed time completion time
------- ---- -- ---------- ----------- ------------ ---------------
13 full 1g disk 00:03:20 09-jun-05
bp key: 13 status: available tag: tag20050609t173346
piece name: /opt/oracle/product/9.2.0/dbs/0ggmiabq_1_1
spfile included: modification time: 08-jun-05
list of datafiles in backup set 13
file lv type ckp scn ckp time name
---- -- ---- ---------- --------- ----
1 full 240560269 09-jun-05 /opt/oracle/oradata/conner/system01.dbf
2 full 240560269 09-jun-05 /opt/oracle/oradata/conner/undotbs01.dbf
3 full 240560269 09-jun-05 /opt/oracle/oradata/conner/users01.dbf
rman> exit
recovery manager complete.
2、然后使用dbms_backup_restore来进行恢复
dbms_backup_restore是一个非常强大的package,可以在数据库nomount下使用,用于从备份集中读取各类文件。
本例使用如下脚本:
declare
devtype varchar2(256);
done boolean;
begin
devtype:=sys.dbms_backup_restore.deviceallocate (type=>'',ident=>'t1');
sys.dbms_backup_restore.restoresetdatafile;
sys.dbms_backup_restore.restoredatafileto(dfnumber=>01,toname=>'/opt/oracle/oradata/conner/system01.dbf');
sys.dbms_backup_restore.restoredatafileto(dfnumber=>02,toname=>'/opt/oracle/oradata/conner/undotbs01.dbf');
sys.dbms_backup_restore.restoredatafileto(dfnumber=>03,toname=>'/opt/oracle/oradata/conner/users01.dbf');
sys.dbms_backup_restore.restorebackuppiece(done=>done,handle=>'/opt/oracle/product/9.2.0/dbs/0ggmiabq_1_1', params=>null);
sys.dbms_backup_restore.devicedeallocate;
end;
/
3、执行恢复的过程
[oracle@jumper conner]$ sqlplus "/ as sysdba"
sql*plus: release 9.2.0.4.0 - production on sat jun 11 01:24:34 2005
copyright (c) 1982, 2002, oracle corporation. all rights reserved.
connected to an idle instance.
sql> startup nomount;
oracle instance started.
total system global area 101782828 bytes
fixed size 451884 bytes
variable size 37748736 bytes
database buffers 62914560 bytes
redo buffers 667648 bytes
sql> declare
2 devtype varchar2(256);
3 done boolean;
4 begin
5 devtype:=sys.dbms_backup_restore.deviceallocate (type=>'',ident=>'t1');
6 sys.dbms_backup_restore.restoresetdatafile;
7 sys.dbms_backup_restore.restoredatafileto(dfnumber=>01,toname=>'/opt/oracle/oradata/conner/system01.dbf');
8 sys.dbms_backup_restore.restoredatafileto(dfnumber=>02,toname=>'/opt/oracle/oradata/conner/undotbs01.dbf');
9 sys.dbms_backup_restore.restoredatafileto(dfnumber=>03,toname=>'/opt/oracle/oradata/conner/users01.dbf');
10 sys.dbms_backup_restore.restorebackuppiece(done=>done,handle=>'/opt/oracle/product/9.2.0/dbs/0ggmiabq_1_1',
params=>null);
11 sys.dbms_backup_restore.devicedeallocate;
12 end;
13 /
pl/sql procedure successfully completed.
sql>
注释:从备份集中读取文件完成。
4、恢复控制文件
如果由于疏忽没有备份控制文件,你可以选择重建控制文件。
sql> alter database mount;
database altered.
sql> alter database backup controlfile to trace;
database altered.
然后找到trace文件,编辑并且执行重建控制文件需要部分:
[oracle@jumper oracle]$ sqlplus "/ as sysdba"
sql*plus: release 9.2.0.4.0 - production on sat jun 11 01:30:50 2005
copyright (c) 1982, 2002, oracle corporation. all rights reserved.
connected to:
oracle9i enterprise edition release 9.2.0.4.0 - production
with the partitioning option
jserver release 9.2.0.4.0 - production
sql> shutdown immediate;
ora-01109: database not open
database dismounted.
oracle instance shut down.
sql> startup nomount;
oracle instance started.
total system global area 101782828 bytes
fixed size 451884 bytes
variable size 37748736 bytes
database buffers 62914560 bytes
redo buffers 667648 bytes
sql> set echo on
sql> @ctl
sql>
sql> create controlfile reuse database "conner" resetlogs archivelog
2 -- set standby to maximize performance
3 maxlogfiles 5
4 maxlogmembers 3
5 maxdatafiles 100
6 maxinstances 1
7 maxloghistory 1361
8 logfile
9 group 1 '/opt/oracle/oradata/conner/redo01.log' size 10m,
10 group 2 '/opt/oracle/oradata/conner/redo02.log' size 10m,
11 group 3 '/opt/oracle/oradata/conner/redo03.log' size 10m
12 -- standby logfile
13 datafile
14 '/opt/oracle/oradata/conner/system01.dbf',
15 '/opt/oracle/oradata/conner/undotbs01.dbf',
16 '/opt/oracle/oradata/conner/users01.dbf'
17 character set zhs16gbk
18 ;
control file created.
5、执行恢复步骤
sql> recover database;
ora-00283: recovery session canceled due to errors
ora-01610: recovery using the backup controlfile option must be done
sql> recover database using backup controlfile until cancel;
ora-00279: change 240560269 generated at 06/09/2005 17:33:48 needed for thread 1
ora-00289: suggestion : /opt/oracle/oradata/conner/archive/1_7.dbf
ora-00280: change 240560269 for thread 1 is in sequence #7
specify log: {=suggested | filename | auto | cancel}
auto
ora-00279: change 240600632 generated at 06/10/2005 10:42:26 needed for thread 1
ora-00289: suggestion : /opt/oracle/oradata/conner/archive/1_8.dbf
ora-00280: change 240600632 for thread 1 is in sequence #8
ora-00278: log file '/opt/oracle/oradata/conner/archive/1_7.dbf' no longer needed for this recovery
specify log: {=suggested | filename | auto | cancel}
auto
ora-00279: change 240620884 generated at 06/10/2005 10:45:42 needed for thread 1
ora-00289: suggestion : /opt/oracle/oradata/conner/archive/1_9.dbf
ora-00280: change 240620884 for thread 1 is in sequence #9
ora-00278: log file '/opt/oracle/oradata/conner/archive/1_8.dbf' no longer needed for this recovery
ora-00283: recovery session canceled due to errors
ora-00600: internal error code, arguments: [3020], [4242465], [1], [9], [314], [272], [], []
ora-10567: redo is inconsistent with data block (file# 1, block# 48161)
ora-10564: tablespace system
ora-01110: data file 1: '/opt/oracle/oradata/conner/system01.dbf'
ora-10560: block type 'data segment header - unlimited'
ora-01112: media recovery not started
sql> recover database using backup controlfile until cancel;
ora-00279: change 240620949 generated at 06/10/2005 10:45:44 needed for thread 1
ora-00289: suggestion : /opt/oracle/oradata/conner/archive/1_9.dbf
ora-00280: change 240620949 for thread 1 is in sequence #9
specify log: {=suggested | filename | auto | cancel}
cancel
media recovery cancelled.
sql> alter database open resetlogs;
database altered.
sql> select name from v$datafile;
name
------------------------------------------------------------
/opt/oracle/oradata/conner/system01.dbf
/opt/oracle/oradata/conner/undotbs01.dbf
/opt/oracle/oradata/conner/users01.dbf
sql>
恢复现已完成。 |