使用dbms_backup_restore包恢复数据库学习
2012-04-15 00:20
375 查看
作者 阿九【转载时请务必以超链接形式标明文章原始出处和作者信息】
使用dbms_backup_restore包恢复数据库学习在数据库的极端恢复下,比如,没有spfile、控制文件、数据文件,且catalog库也不可用,也不知道DBID的情况下,只剩下备份集文件的时候,我们可以通过使用dbms_backup_restore包来恢复数据库,这个包在nomount下也能执行。
1、目的:
学习使用dbms_backup_restore包
2、试验设计:
2.1、先创建一张测试表,test_restore
QL> DESC test_restore; Name Null? Type ----------------------------------------- -------- ---------------------------- T_NUM NUMBER T_DATE VARCHAR2(17) SQL> |
SQL> insert into test_restore values(1,to_char(sysdate,'yyyymmdd hh24:mi:ss')); 1 row created. SQL> commit; Commit complete. SQL> select * from test_restore; T_NUM T_DATE ---------- ----------------- 1 20120414 22:49:12 SQL> |
3、试验过程
3.1、备份数据库
[oracle@clone_sigle oracle]$ rman target / [uniread] Loaded history (91 lines) Recovery Manager: Release 10.2.0.4.0 - Production on 星期六 4月 14 22:57:42 2012 Copyright (c) 1982, 2007, Oracle. All rights reserved. connected to target database: ORCLAUX (DBID=2639214075) RMAN> run{ 2> allocate channel disk1 device type disk format='/oracle/backup/backdb<oracleaux_%s_%T.bak'; 3> backup as compressed backupset database include current controlfile; 4> release channel disk1; 5> } using target database control file instead of recovery catalog allocated channel: disk1 channel disk1: sid=1624 devtype=DISK Starting backup at 14-4月 -12 channel disk1: starting compressed full datafile backupset channel disk1: specifying datafile(s) in backupset input datafile fno=00001 name=/dev/raw/raw1 input datafile fno=00002 name=/dev/raw/raw3 input datafile fno=00003 name=/dev/raw/raw2 input datafile fno=00004 name=/dev/raw/raw4 channel disk1: starting piece 1 at 14-4月 -12 channel disk1: finished piece 1 at 14-4月 -12 piece handle=/oracle/backup/backdb<oracleaux_4_20120414.bak tag=TAG20120414T232447 comment=NONE channel disk1: backup set complete, elapsed time: 00:00:45 channel disk1: starting compressed full datafile backupset channel disk1: specifying datafile(s) in backupset including current control file in backupset including current SPFILE in backupset channel disk1: starting piece 1 at 14-4月 -12 channel disk1: finished piece 1 at 14-4月 -12 piece handle=/oracle/backup/backdb<oracleaux_5_20120414.bak tag=TAG20120414T232447 comment=NONE channel disk1: backup set complete, elapsed time: 00:00:03 Finished backup at 14-4月 -12 released channel: disk1 RMAN> |
3.2、关闭数据库并清空相关数据库文件
使用dd 命令清空raw设备上的数据
[oracle@clone_sigle oracle]$ dd if=/dev/zero of=/dev/raw/raw1 bs=8192 count=12800 12800+0 records in 12800+0 records out |
3.3、执行恢复
由于spfile文件已经被清理,可以使用rman来启动一个默认的数据库到nomount状态来执行恢复。
[oracle@clone_sigle oracle]$ rman target / [uniread] Loaded history (130 lines) Recovery Manager: Release 10.2.0.4.0 - Production on 星期六 4月 14 23:31:54 2012 Copyright (c) 1982, 2007, Oracle. All rights reserved. connected to target database (not started) RMAN> startup nomount; startup failed: ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file '/oracle/db10g/dbs/initorclaux.ora' starting Oracle instance without parameter file for retrival of spfile Oracle instance started Total System Global Area 159383552 bytes Fixed Size 1266320 bytes Variable Size 58723696 bytes Database Buffers 92274688 bytes Redo Buffers 7118848 bytes RMAN> |
[oracle@clone_sigle oracle]$ sq [uniread] Loaded history (241 lines) SQL*Plus: Release 10.2.0.4.0 - Production on 星期六 4月 14 23:34:01 2012 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. SQL> conn /as sysdba Connected. SQL> |
恢复spfile文件:
[oracle@clone_sigle oracle]$ sq [uniread] Loaded history (267 lines) SQL*Plus: Release 10.2.0.4.0 - Production on 星期六 4月 14 23:39:24 2012 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. SQL> conn /as sysdba Connected. SQL> select open_mode from v$database; select open_mode from v$database * ERROR at line 1: ORA-01507: database not mounted SQL> DECLARE 2 devtype varchar2(256); 3 done boolean; 4 BEGIN 5 devtype:=sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>'T1'); #如果为磁带,这里type=>'sbt_tape' 6 sys.dbms_backup_restore.restoreSetDatafile; 7 sys.dbms_backup_restore.restoreSpfileTo(sfname=>'/oracle/db10g/dbs/spfileorclaux.ora'); 8 sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'/oracle/backup/backdb<oracleaux_5_20120414.bak', params=>null); #如果为磁带,params不变 9 sys.dbms_backup_restore.deviceDeallocate; 10 END; 11 / PL/SQL procedure successfully completed. SQL> |
SQL> DECLARE 2 devtype varchar2(256); 3 done boolean; 4 BEGIN devtype:=sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>'T1'); 5 devtype:=sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>'T1'); 6 sys.dbms_backup_restore.restoreSetDatafile; 7 sys.dbms_backup_restore.restoreControlFileTo(cfname=>'/dev/raw/raw6'); 8 sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'/oracle/backup/backdb<oracleaux_5_20120414.bak', params=>null); 9 sys.dbms_backup_restore.deviceDeallocate; 10 END; 11 / PL/SQL procedure successfully completed. 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.restoreControlFileTo(cfname=>'/dev/raw/raw7'); 8 sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'/oracle/backup/backdb<oracleaux_5_20120414.bak', params=>null); 9 sys.dbms_backup_restore.deviceDeallocate; 10 END; 11 / PL/SQL procedure successfully completed. 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.restoreControlFileTo(cfname=>'/dev/raw/raw8'); 8 sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'/oracle/backup/backdb<oracleaux_5_20120414.bak', params=>null); 9 sys.dbms_backup_restore.deviceDeallocate; 10 END; 11 / PL/SQL procedure successfully completed. SQL> |
SQL> DECLARE 2 devtype varchar2(256); 3 done boolean; 4 BEGIN 5 devtype:=sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>'T1'); 6 7 BEGIN 8 sys.dbms_backup_restore.restoreSetDatafile; 9 sys.dbms_backup_restore.restoreDataFileTo(dfnumber=>1,toname=>'/dev/raw/raw1'); 10 sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'/oracle/backup/backdb<oracleaux_4_20120414.bak', params=>null); 11 END; 12 13 BEGIN 14 sys.dbms_backup_restore.restoreSetDatafile; 15 sys.dbms_backup_restore.restoreDataFileTo(dfnumber=>2,toname=>'/dev/raw/raw3'); 16 sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'/oracle/backup/backdb<oracleaux_4_20120414.bak', params=>null); 17 END; 18 19 BEGIN 20 sys.dbms_backup_restore.restoreSetDatafile; 21 sys.dbms_backup_restore.restoreDataFileTo(dfnumber=>3,toname=>'/dev/raw/raw2'); 22 sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'/oracle/backup/backdb<oracleaux_4_20120414.bak', params=>null); 23 END; 24 25 BEGIN 26 sys.dbms_backup_restore.restoreSetDatafile; 27 sys.dbms_backup_restore.restoreDataFileTo(dfnumber=>4,toname=>'/dev/raw/raw4'); 28 sys.dbms_backup_restore.restoreBackupPiece(done=>done,handle=>'/oracle/backup/backdb<oracleaux_4_20120414.bak', params=>null); 29 END; 30 31 sys.dbms_backup_restore.deviceDeallocate; 32 END; 33 / PL/SQL procedure successfully completed. SQL> |
这里缺失临时表空间的恢复,在数据库打开的时候会自动创建。
由于日志也被dd清理,因此数据库打开是时候也会自动创建。
在打开数据库之前需要使用rman先恢复数据库。
SQL> shutdown immediate; ORA-01507: database not mounted ORACLE instance shut down. SQL> startup nomount; ORACLE instance started. Total System Global Area 486539264 bytes Fixed Size 1268196 bytes Variable Size 138413596 bytes Database Buffers 339738624 bytes Redo Buffers 7118848 bytes SQL> alter database mount; Database altered. SQL> exit Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production With the Partitioning, OLAP, Data Mining Scoring Engine and Real Application Testing options [uniread] Saved history (422 lines) [oracle@clone_sigle oracle]$ rman target / [uniread] Loaded history (132 lines) Recovery Manager: Release 10.2.0.4.0 - Production on 星期六 4月 14 23:59:12 2012 Copyright (c) 1982, 2007, Oracle. All rights reserved. connected to target database: ORCLAUX (DBID=2639214075, not open) RMAN> recover database; Starting recover at 14-4月 -12 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=1641 devtype=DISK starting media recovery unable to find archive log archive log thread=1 sequence=1 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 04/14/2012 23:59:22 RMAN-06054: media recovery requesting unknown log: thread 1 seq 1 lowscn 579708 #这里报错是因为联机日志被dd命令清空了 RMAN> alter database open resetlogs; database opened RMAN> |
Sat Apr 14 23:59:20 2012 alter database recover datafile list clear Completed: alter database recover datafile list clear Sat Apr 14 23:59:20 2012 alter database recover datafile list 1 , 2 , 3 , 4 Completed: alter database recover datafile list 1 , 2 , 3 , 4 Sat Apr 14 23:59:20 2012 alter database recover if needed start until cancel using backup controlfile Media Recovery Start parallel recovery started with 2 processes ORA-279 signalled during: alter database recover if needed start until cancel using backup controlfile ... Sat Apr 14 23:59:20 2012 alter database recover cancel Sat Apr 14 23:59:22 2012 Media Recovery Canceled Completed: alter database recover cancel Sat Apr 14 23:59:30 2012 alter database open resetlogs Sat Apr 14 23:59:30 2012 Errors in file /oracle/admin/orclaux/udump/orclaux_ora_10992.trc: ORA-00367: checksum error in log file header ORA-00316: log 1 of thread 1, type 0 in header is not log file ORA-00312: online log 1 thread 1: '/dev/raw/raw10' Sat Apr 14 23:59:30 2012 Errors in file /oracle/admin/orclaux/udump/orclaux_ora_10992.trc: ORA-00367: checksum error in log file header ORA-00316: log 2 of thread 1, type 0 in header is not log file ORA-00312: online log 2 thread 1: '/dev/raw/raw12' RESETLOGS after incomplete recovery UNTIL CHANGE 579708 Resetting resetlogs activation ID 2640878604 (0x9d689c0c) Sat Apr 14 23:59:32 2012 Setting recovery target incarnation to 4 Sat Apr 14 23:59:32 2012 Hex dump of (file 201, block 1) in trace file /oracle/admin/orclaux/bdump/orclaux_dbw0_10789.trc Corrupt block relative dba: 0x00400001 (file 201, block 1) Completely zero block found during data file header read Reread of rdba: 0x00400001 (file 201, block 1) found valid data Sat Apr 14 23:59:32 2012 Errors in file /oracle/admin/orclaux/bdump/orclaux_dbw0_10789.trc: ORA-01186: Message 1186 not found; No message file for product=RDBMS, facility=ORA; arguments: [201] ORA-01122: Message 1122 not found; No message file for product=RDBMS, facility=ORA; arguments: [201] ORA-01110: Message 1110 not found; No message file for product=RDBMS, facility=ORA; arguments: [201] [/dev/raw/raw5] ORA-01205: Message 1205 not found; No message file for product=RDBMS, facility=ORA; arguments: [0] File 201 not verified due to error ORA-01122 Sat Apr 14 23:59:32 2012 Assigning activation ID 2640864264 (0x9d686408) LGWR: STARTING ARCH PROCESSES ARC0 started with pid=20, OS id=10997 Sat Apr 14 23:59:32 2012 ARC0: Archival started ARC1: Archival started LGWR: STARTING ARCH PROCESSES COMPLETE ARC1 started with pid=21, OS id=10999 Sat Apr 14 23:59:33 2012 Thread 1 opened at log sequence 1 Current log# 1 seq# 1 mem# 0: /dev/raw/raw10 Current log# 1 seq# 1 mem# 1: /dev/raw/raw11 Successful open of redo thread 1 Sat Apr 14 23:59:33 2012 MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set Sat Apr 14 23:59:33 2012 ARC1: Becoming the 'no FAL' ARCH ARC1: Becoming the 'no SRL' ARCH Sat Apr 14 23:59:33 2012 ARC0: Becoming the heartbeat ARCH Sat Apr 14 23:59:33 2012 SMON: enabling cache recovery Sat Apr 14 23:59:34 2012 Successfully onlined Undo Tablespace 1. Dictionary check beginning Sat Apr 14 23:59:34 2012 Errors in file /oracle/admin/orclaux/bdump/orclaux_dbw0_10789.trc: ORA-01186: Message 1186 not found; No message file for product=RDBMS, facility=ORA; arguments: [201] ORA-01122: Message 1122 not found; No message file for product=RDBMS, facility=ORA; arguments: [201] ORA-01110: Message 1110 not found; No message file for product=RDBMS, facility=ORA; arguments: [201] [/dev/raw/raw5] ORA-01205: Message 1205 not found; No message file for product=RDBMS, facility=ORA; arguments: [0] Sat Apr 14 23:59:34 2012 File 201 not verified due to error ORA-01122 Sat Apr 14 23:59:34 2012 Dictionary check complete Sat Apr 14 23:59:34 2012 SMON: enabling tx recovery Sat Apr 14 23:59:34 2012 Cannot re-create tempfile /dev/raw/raw5, the same name file exists Database Characterset is ZHS16GBK Opening with internal Resource Manager plan where NUMA PG = 1, CPUs = 2 replication_dependency_tracking turned off (no async multimaster replication found) Starting background process QMNC QMNC started with pid=22, OS id=11001 Sat Apr 14 23:59:37 2012 LOGSTDBY: Validating controlfile with logical metadata Sat Apr 14 23:59:37 2012 LOGSTDBY: Validation complete Completed: alter database open resetlogs |
[oracle@clone_sigle oracle]$ sq [uniread] Loaded history (422 lines) SQL*Plus: Release 10.2.0.4.0 - Production on 星期日 4月 15 00:03:28 2012 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. SQL> conn /as sysdba Connected. SQL> alter system switch logfile; System altered. SQL> alter system switch logfile; System altered. SQL> select open_mode from v$database; OPEN_MODE ---------- READ WRITE SQL> select * from test_restore; T_NUM T_DATE ---------- ----------------- 1 20120414 22:49:12 SQL> |
相关文章推荐
- 应对RMAN-06026错误,使用dbms_backup_restore进行恢复
- 利用dbms_backup_restore恢复数据库
- 利用dbms_backup_restore恢复数据库
- 利用dbms_backup_restore恢复数据库
- dbms_backup_restore恢复数据库
- 应对RMAN-06026错误,使用dbms_backup_restore进行恢复
- 数据库恢复报RMAN-06026,尝试dbms_backup_restore包进行恢复
- 利用dbms_backup_restore包手工进行恢复
- ORACLE RMAN 非常规恢复DBMS_BACKUP_RESTORE
- rman备份丢失控制文件,利用dbms_backup_restore恢复
- 手动备份(BACKUP)、恢复(RESTORE)数据库
- 尚未备份数据库 "TEST" 的日志尾部。如果该日志包含您不希望丢失的工作,请使用 BACKUP LOG WITH NORECOVERY 备份该日志。请使用 RESTORE 语句的 WITH REPL
- 使用DBMS_STATS.restore 恢复统计信息
- DB2的备份(backup)和恢复(RESTORE)数据库方法
- 使用Windows Server Backup备份恢复Exchange Server 2010数据库
- centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复
- dbms_backup_restore包的使用
- postgresql使用pg_dump、pg_restore备份及恢复数据库
- centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复
- DB2的备份(backup)和恢复(RESTORE)数据库方法