Oracle 学习之RMAN(十一)恢复实战场景一

场景一、数据库机器崩溃,需要使用备份在其他机器上还原数据库。

  1. 首先假设我们做了一个全库的备份。
RMAN> backup database include current controlfile plus archivelog delete all input;

Starting backup at 2015/07/09 06:47:15
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=26 RECID=25 STAMP=884584809
input archived log thread=1 sequence=27 RECID=26 STAMP=884587635
channel ORA_DISK_1: starting piece 1 at 2015/07/09 06:47:15
channel ORA_DISK_1: finished piece 1 at 2015/07/09 06:47:16
piece handle=/u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_annnn_TAG20150709T064715_bsvb3mor_.bkp tag=TAG20150709T064715 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_1: deleting archived log(s)
archived log file name=/backup/archivelog/1_26_884357806.dbf RECID=25 STAMP=884584809
archived log file name=/backup/archivelog/1_27_884357806.dbf RECID=26 STAMP=884587635
Finished backup at 2015/07/09 06:47:16

Starting backup at 2015/07/09 06:47:16
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u01/app/oracle/oradata/devdb/system01.dbf
input datafile file number=00002 name=/u01/app/oracle/oradata/devdb/sysaux01.dbf
input datafile file number=00005 name=/u01/app/oracle/oradata/devdb/example01.dbf
input datafile file number=00003 name=/u01/app/oracle/oradata/devdb/undotbs01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/devdb/users01.dbf
input datafile file number=00006 name=/u01/app/oracle/oradata/devdb/idx01.dbf
channel ORA_DISK_1: starting piece 1 at 2015/07/09 06:47:17
channel ORA_DISK_1: finished piece 1 at 2015/07/09 06:49:02
piece handle=/u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_nnndf_TAG20150709T064716_bsvb3ob4_.bkp tag=TAG20150709T064716 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:45
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 2015/07/09 06:49:03
channel ORA_DISK_1: finished piece 1 at 2015/07/09 06:49:04
piece handle=/u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_ncsnf_TAG20150709T064716_bsvb6zjt_.bkp tag=TAG20150709T064716 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2015/07/09 06:49:04

Starting backup at 2015/07/09 06:49:04
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=28 RECID=27 STAMP=884587744
channel ORA_DISK_1: starting piece 1 at 2015/07/09 06:49:05
channel ORA_DISK_1: finished piece 1 at 2015/07/09 06:49:06
piece handle=/u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_annnn_TAG20150709T064904_bsvb713d_.bkp tag=TAG20150709T064904 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_1: deleting archived log(s)
archived log file name=/backup/archivelog/1_28_884357806.dbf RECID=27 STAMP=884587744
Finished backup at 2015/07/09 06:49:06

2. 将数据库文件全部删除,包括数据文件、控制文件、日志文件(在线及归档)。

SELECT ‘rm -f ‘ || name
  FROM (SELECT name FROM v$datafile
        UNION ALL
        SELECT name FROM v$controlfile
        UNION ALL
        SELECT name FROM v$tempfile
        UNION ALL
        SELECT MEMBER FROM v$logfile
        UNION ALL
        SELECT VALUE
          FROM v$parameter
         WHERE name = ‘spfile‘);

使用sql生成的rm命令,将文件全部删除。并且将库关闭。

3.我们现在手里只有备份文件,要想使用RMAN恢复数据库,必须先把spfile和控制文件恢复出来。

RMAN> restore spfile to ‘/u01/app/oracle/product/11.2.0/db_1/dbs/spfiledevdb.ora‘ from ‘/u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_nnndf_TAG20150709T064716_bsvb3ob4_.bkp‘;

Starting restore at 2015/07/09 07:03:58
using target database control file instead of recovery catalog
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 07/09/2015 07:03:58
RMAN-12010: automatic channel allocation initialization failed
RMAN-06403: could not obtain a fully authorized session
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory

实例没有启动时,是无法使用RMAN进行工作的。可是我们的spfile已经丢失了,实例启动不了。那怎么办呢?当然RMAN肯定考虑到了这种情况的发生,在没有参数文件时,使用RMAN启动实例,RMAN会帮我们启动一个临时的实例来用。

RMAN> startup nomount

startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file ‘/u01/app/oracle/product/11.2.0/db_1/dbs/initdevdb.ora‘

starting Oracle instance without parameter file for retrieval of spfile
Oracle instance started

Total System Global Area     158662656 bytes

Fixed Size                     2226456 bytes
Variable Size                 92276456 bytes
Database Buffers              58720256 bytes
Redo Buffers                   5439488 bytes

RMAN>

我们再次尝试恢复spfile

RMAN> restore spfile to ‘/u01/app/oracle/product/11.2.0/db_1/dbs/spfiledevdb.ora‘ from ‘/u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_nnndf_TAG20150709T064716_bsvb3ob4_.bkp‘;

Starting restore at 2015/07/09 07:15:57
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=17 device type=DISK

channel ORA_DISK_1: restoring spfile from AUTOBACKUP /u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_nnndf_TAG20150709T064716_bsvb3ob4_.bkp
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 07/09/2015 07:15:59
ORA-19687: SPFILE not found in backup set

RMAN> restore spfile to ‘/u01/app/oracle/product/11.2.0/db_1/dbs/spfiledevdb.ora‘ from ‘/u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_ncsnf_TAG20150709T064716_bsvb6zjt_.bkp‘;

Starting restore at 2015/07/09 07:16:32
using channel ORA_DISK_1

channel ORA_DISK_1: restoring spfile from AUTOBACKUP /u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_ncsnf_TAG20150709T064716_bsvb6zjt_.bkp
channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete
Finished restore at 2015/07/09 07:16:33

现在,我们就可以用恢复出来的spfile启动实例,然后去恢复控制文件。

RMAN> shutdown immediate

Oracle instance shut down

RMAN> startup nomount

connected to target database (not started)
Oracle instance started

Total System Global Area     839282688 bytes

Fixed Size                     2233000 bytes
Variable Size                553651544 bytes
Database Buffers             281018368 bytes
Redo Buffers                   2379776 bytes

RMAN> restore controlfile from ‘/u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_ncsnf_TAG20150709T064716_bsvb6zjt_.bkp‘;

Starting restore at 2015/07/09 07:19:24
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=19 device type=DISK

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/u01/app/oracle/oradata/devdb/control01.ctl
output file name=/u01/app/oracle/fast_recovery_area/devdb/control02.ctl
Finished restore at 2015/07/09 07:19:25

控制文件一旦有了,就什么都不怕了。所有的备份信息都能看到啦。

将实例mount

RMAN> alter database mount;

database mounted
released channel: ORA_DISK_1

RMAN> 

Recovery Manager complete.
11gdg-> rman target /

Recovery Manager: Release 11.2.0.3.0 - Production on Thu Jul 9 07:25:56 2015

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: DEVDB (DBID=789087786, not open)

RMAN> list backup;

using target database control file instead of recovery catalog

List of Backup Sets
===================

BS Key  Size       Device Type Elapsed Time Completion Time    
------- ---------- ----------- ------------ -------------------
71      41.55M     DISK        00:00:01     2015/07/09 06:47:16
        BP Key: 73   Status: AVAILABLE  Compressed: NO  Tag: TAG20150709T064715
        Piece Name: /u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_annnn_TAG20150709T064715_bsvb3mor_.bkp

  List of Archived Logs in backup set 71
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    26      1236243    2015/07/08 21:00:16 1257660    2015/07/09 06:00:08
  1    27      1257660    2015/07/09 06:00:08 1258926    2015/07/09 06:47:15

BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
------- ---- -- ---------- ----------- ------------ -------------------
72      Full    1.11G      DISK        00:01:43     2015/07/09 06:49:00
        BP Key: 74   Status: AVAILABLE  Compressed: NO  Tag: TAG20150709T064716
        Piece Name: /u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_nnndf_TAG20150709T064716_bsvb3ob4_.bkp
  List of Datafiles in backup set 72
  File LV Type Ckp SCN    Ckp Time            Name
  ---- -- ---- ---------- ------------------- ----
  1       Full 1258934    2015/07/09 06:47:17 /u01/app/oracle/oradata/devdb/system01.dbf
  2       Full 1258934    2015/07/09 06:47:17 /u01/app/oracle/oradata/devdb/sysaux01.dbf
  3       Full 1258934    2015/07/09 06:47:17 /u01/app/oracle/oradata/devdb/undotbs01.dbf
  4       Full 1258934    2015/07/09 06:47:17 /u01/app/oracle/oradata/devdb/users01.dbf
  5       Full 1258934    2015/07/09 06:47:17 /u01/app/oracle/oradata/devdb/example01.dbf
  6       Full 1253618    2015/07/09 03:39:14 /u01/app/oracle/oradata/devdb/idx01.dbf

4. 现在我们就能还原恢复数据库啦。

RMAN> restore database;

Starting restore at 2015/07/09 07:29:43
Starting implicit crosscheck backup at 2015/07/09 07:29:43
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1 device type=DISK
Crosschecked 2 objects
Finished implicit crosscheck backup at 2015/07/09 07:29:44

Starting implicit crosscheck copy at 2015/07/09 07:29:44
using channel ORA_DISK_1
Finished implicit crosscheck copy at 2015/07/09 07:29:44

searching for all files in the recovery area
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: /u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_annnn_TAG20150709T064904_bsvb713d_.bkp
File Name: /u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_ncsnf_TAG20150709T064716_bsvb6zjt_.bkp

using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to /u01/app/oracle/oradata/devdb/system01.dbf
channel ORA_DISK_1: restoring datafile 00002 to /u01/app/oracle/oradata/devdb/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00003 to /u01/app/oracle/oradata/devdb/undotbs01.dbf
channel ORA_DISK_1: restoring datafile 00004 to /u01/app/oracle/oradata/devdb/users01.dbf
channel ORA_DISK_1: restoring datafile 00005 to /u01/app/oracle/oradata/devdb/example01.dbf
channel ORA_DISK_1: restoring datafile 00006 to /u01/app/oracle/oradata/devdb/idx01.dbf
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_nnndf_TAG20150709T064716_bsvb3ob4_.bkp
channel ORA_DISK_1: piece handle=/u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_nnndf_TAG20150709T064716_bsvb3ob4_.bkp tag=TAG20150709T064716
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:01:25
Finished restore at 2015/07/09 07:31:10

5. 恢复数据库

RMAN> recover database;

Starting recover at 2015/07/09 07:33:33
using channel ORA_DISK_1
datafile 6 not processed because file is read-only

starting media recovery

channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=28
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_annnn_TAG20150709T064904_bsvb713d_.bkp
channel ORA_DISK_1: piece handle=/u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_annnn_TAG20150709T064904_bsvb713d_.bkp tag=TAG20150709T064904
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=/backup/archivelog/1_28_884357806.dbf thread=1 sequence=28
unable to find archived log
archived log thread=1 sequence=29
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 07/09/2015 07:33:36
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 29 and starting SCN of 1258979

RMAN告诉我们找不到sequence=29的日志文件。我们查看一下备份的归档日志。

RMAN> list backup of archivelog all;

List of Backup Sets
===================

BS Key  Size       Device Type Elapsed Time Completion Time    
------- ---------- ----------- ------------ -------------------
71      41.55M     DISK        00:00:01     2015/07/09 06:47:16
        BP Key: 73   Status: AVAILABLE  Compressed: NO  Tag: TAG20150709T064715
        Piece Name: /u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_annnn_TAG20150709T064715_bsvb3mor_.bkp

  List of Archived Logs in backup set 71
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    26      1236243    2015/07/08 21:00:16 1257660    2015/07/09 06:00:08
  1    27      1257660    2015/07/09 06:00:08 1258926    2015/07/09 06:47:15

BS Key  Size       Device Type Elapsed Time Completion Time    
------- ---------- ----------- ------------ -------------------
73      3.00K      DISK        00:00:00     2015/07/09 06:49:05
        BP Key: 75   Status: AVAILABLE  Compressed: NO  Tag: TAG20150709T064904
        Piece Name: /u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_annnn_TAG20150709T064904_bsvb713d_.bkp

  List of Archived Logs in backup set 73
  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    28      1258926    2015/07/09 06:47:15 1258979    2015/07/09 06:49:04

我们的日志确实只备份到了sequence=28. 我们其实要实现一个不完全恢复。

RMAN> run{
2> set until sequence 29;
3> recover database;
4> }

executing command: SET until clause

Starting recover at 2015/07/09 07:47:25
using channel ORA_DISK_1
datafile 6 not processed because file is read-only

starting media recovery
media recovery complete, elapsed time: 00:00:00

Finished recover at 2015/07/09 07:47:26

6.打开数据库

RMAN> alter database open resetlogs;

database opened

RMAN>
时间: 2024-10-12 21:10:34

Oracle 学习之RMAN(十一)恢复实战场景一的相关文章

[转]Oracle DB 使用RMAN执行恢复

? 在丢失关键或非关键数据文件后执行完全恢复 ? 使用增量更新的备份进行恢复 ? 切换到映像副本进行快速恢复 ? 将数据库还原到新主机上 ? 使用备份控制文件进行恢复 使用RMAN RESTORE和RECOVER命令 ? RESTORE命令:从备份中还原数据库文件 ? RECOVER命令:通过应用增量备份和重做日志文件中记录的更改来恢复已还原文件 RMAN> SQL 'ALTER TABLESPACE inv_tbs OFFLINE IMMEDIATE'; RMAN> RESTORE TABL

Oracle 学习之RMAN(十二)恢复实战--控制文件丢失

首先我们进行一次全库备份 RMAN> run {   backup database    format '/backup/full_%d_%T_%s'   plus archivelog    format '/backup/arch_%d_%T_%s'   delete all input;  }  Starting backup at 2015/07/09 09:35:03 current log archived using channel ORA_DISK_1 channel ORA_

Oracle 学习之RMAN(十五)恢复实战--TSPITR

TSPITR是英文Tablespace Point In Time Recovery的缩写.也就是表空间定点时间恢复.TSPITR是一种相对细粒度的不完全恢复技术.我们通常见到的还原操作,都是将所有的表空间和数据还原到相同的一个时间点上.而TSPITR则是以表空间为粒度单元,单独将某个表空间内容还原到一个特定可恢复时间点上.举一个例子:一个Oracle数据库运行在归档模式下,在夜间零时保留一份完全备份.早上七点时候,某个特定表空间上数据表(单个表独占表空间)发生一个误操作,数据损坏.要求在不伤害

Oracle 学习之RMAN(十四)恢复实战--基于时间点恢复

1. 我们先做一个全备 RMAN> backup database ; Starting backup at 2015/07/09 13:40:47 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=28 device type=DISK channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in b

Oracle 学习之RMAN(十三)恢复实战--数据块修复

在很多情况下,数据库只是某个数据文件的些许数据块发生损坏.这种情况,我们当然可是使用数据库恢复或者数据文件恢复的方式来解决问题.但是有点高射炮打蚊子的感觉.幸好RMAN提供了块级别的恢复.下面我们来演示一下. 1. 创建一个表空间,大小小一点. SQL> conn / as sysdba Connected. SQL> create tablespace tbs_blkerr datafile '/u01/app/oracle/oradata/devdb/blkerr01.dbf' size 

Oracle 学习之RMAN(一)

Recovery Manager(RMAN)是Oracle提供的一个实用工具,使用RMAN可以对Oracle数据库进行备份.还原.恢复等.RMAN还可以自动管理Oracle的备份策略.RMAN提供了命令行与图形界面两种访问方式.我们主要学习命令行方式操作RMAN. 进入RMAN非常简单,执行在OS环境下敲入rman命令即可. [[email protected] ~]# su - oracle 11gdg-> rman Recovery Manager: Release 11.2.0.3.0 -

Oracle 学习之RMAN(一)架构

Recovery Manager(RMAN)是Oracle提供的一个实用工具,使用RMAN可以对Oracle数据库进行备份.还原.恢复等.此程序无需单独安装,她作为Oracle数据库的一部分,一单你安装了Oracle数据库软件,那么RMAN即可使用.RMAN是一个Client/Server程序,她使用Oracle服务器会话进行备份与恢复.RMAN备份的元数据存储在备份目标数据库的控制文件中,或者是一个单独的称之为catalog的数据库中. 为什么要使用RMAN? 可以管理复杂的备份与恢复操作 最

Oracle 学习之RMAN(四)增量备份

RMAN不但能进行数据库.数据文件等全量备份,而且还能做增量备份.增量备份有两大优点: 减少数据库恢复的时间. 数据库恢复是利用归档日志,不断的应用归档日志,将数据库恢复到最新(或者指定状态).但是增量备份只备份被修改了的数据块,在执行恢复时,直接用备份出来的数据块去覆盖数据文件中被更改的数据块. 减少备份时间 增量备份只需备份被修改过的数据块,备份时间和备份存储空间都有相应的减少. 做增量备份的前提,是需要一个基准备份,所有的增量都是针对这个基准来说的.要不然,增量备份无从谈起. 增量备份使用

Oracle 学习之RMAN(十四)Catalog

Catalog是一个独立的数据库, 它用来存储从目标数据库的控制文件中获取的RMAN 元数据.RMAN 将有关数据库结构.归档重做日志.备份集以及数据文件副本的信息从目标数据库的控制文件传播到恢复目录中.当要管理多个目标数据库时,应该使用目录. 先看创建Catalog的步骤 1. 创建表空间 SQL> create tablespace rman_ts ; Tablespace created. SQL> 2. 创建Catalog Owner SQL> CREATE USER rman