ORACLE 恢复 - 如何恢复特定的 .bkp 文件?

Dej*_*jan 4 oracle backup rman restore

我刚开始使用 oracle,但遇到了一些问题。我的数据库是非归档模式。我做了两个备份:它们位于以下位置:

/opt/oracle/flash_recovery_area/CTGINST1/backupset/ol_mf_____20130408.bkp

/opt/oracle/flash_recovery_area/CTGINST1/backupset/ol_mf_____20130407.bkp
Run Code Online (Sandbox Code Playgroud)

我想从 4 月 7 日恢复第二个文件。我阅读了一些指南:http : //orafusion.com/art_rman3.htm

但我找不到命令如何使用这两个(或更多)中的特定备份文件指定恢复命令。它没有在这个链接和我阅读的其他链接上说。我想将它与RMAN 命令一起使用。恢复旧备份的命令是什么?

我发现

RMAN> restore database;
Run Code Online (Sandbox Code Playgroud)

但它如何知道要恢复什么文件?是否总是需要恢复 spfile 和控制文件,因为我没有创建一些额外的备份(只是运行命令backup database

谢谢!!

Yas*_*irA 5

TL;DR:例如,只需提供要从中恢复数据库的备份的标签 restore database from tag 'INTERESTING_TAG';


免责声明

此处提供的解决方案仅基于我自己的经验,使用风险自负。对于因使用此解决方案而造成的任何损害(包括数据丢失),我概不负责。


另外,我是否总是需要恢复 spfile 和控制文件,因为我没有创建一些额外的备份(只是运行命令backup database)?

默认情况下,RMAN 配置为在每次成功备份后和每次数据库结构更改(例如,添加数据文件)时自动备份控制文件和 spfile,这会导致这些更改反映在控制文件中。因此,每次使用 成功备份数据库后backup database,都会自动备份 spfile 和控制文件。

您可以通过show controlfile autobackup;在 RMAN 中发出来确定是否启用了自动备份,并configure controlfile autobackup on;在 RMAN 中说启用它。


由于您提供了要从中恢复数据库的备份集的路径,因此我假设您是使用 RMAN 从当前控制文件中获取的。将此信息和有关现有备份的其他信息保存到纯文本文件不会有什么坏处,因为您将恢复以前的控制文件之一,并且这些信息很可能会丢失:

[oracle@oca ~]$ export NLS_DATE_FORMAT='DD-MON-YY HH24:MI:SS'
[oracle@oca ~]$ rman target=/ log 'list_backup.txt'
Run Code Online (Sandbox Code Playgroud)
RMAN> list backup;
RMAN> exit;
Run Code Online (Sandbox Code Playgroud)

您需要恢复数据库控制文件,因为每个数据文件的数据库数据文件头都应该与控制文件同步,即它们应该具有相同的系统更改号 (SCN)。

正如我已经说过的,您只需要提供标记名称即可从特定备份恢复数据库。您可以确定您或系统为备份分配了哪些标签、备份的完成日期和时间以及list backupRMAN 中有关备份的其他信息(我们已将此信息保存到文本文件中)。这是list backup我的示例安装中的输出:

RMAN> list backup;

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ------------------
78      Full    300.26M    DISK        00:01:40     10-APR-13 05:10:32
        BP Key: 78   Status: AVAILABLE  Compressed: YES  Tag: TAG20130410T050852
        Piece Name: /u01/app/oracle/fast_recovery_area/OCAEXAM/backupset/2013_04_10/o1_mf_nnndf_TAG20130410T050852_8pbc14yv_.bkp
  List of Datafiles in backup set 78
  File LV Type Ckp SCN    Ckp Time           Name
  ---- -- ---- ---------- ------------------ ----
  1       Full 3985848    10-APR-13 04:52:40 /u01/app/oracle/oradata/ocaexam/system01.dbf
  2       Full 3985848    10-APR-13 04:52:40 /u01/app/oracle/oradata/ocaexam/sysaux01.dbf
  3       Full 3985848    10-APR-13 04:52:40 /u01/app/oracle/oradata/ocaexam/undotbs01.dbf
  4       Full 3985848    10-APR-13 04:52:40 /u01/app/oracle/oradata/ocaexam/users01.dbf
  5       Full 3985848    10-APR-13 04:52:40 /u01/app/oracle/oradata/ocaexam/example01.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ------------------
79      Full    9.39M      DISK        00:00:02     10-APR-13 05:10:39
        BP Key: 79   Status: AVAILABLE  Compressed: NO  Tag: TAG20130410T051037
        Piece Name: /u01/app/oracle/fast_recovery_area/OCAEXAM/autobackup/2013_04_10/812350360_8pbk.bkp
  SPFILE Included: Modification time: 10-APR-13 04:55:39
  SPFILE db_unique_name: OCAEXAM
  Control File Included: Ckp SCN: 3985848      Ckp time: 10-APR-13 04:52:40

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ------------------
80      Full    300.30M    DISK        00:01:39     10-APR-13 05:18:03
        BP Key: 80   Status: AVAILABLE  Compressed: YES  Tag: DELETE_ME
        Piece Name: /u01/app/oracle/fast_recovery_area/OCAEXAM/backupset/2013_04_10/o1_mf_nnndf_DELETE_ME_8pbch94j_.bkp
  List of Datafiles in backup set 80
  File LV Type Ckp SCN    Ckp Time           Name
  ---- -- ---- ---------- ------------------ ----
  1       Full 3986589    10-APR-13 05:12:33 /u01/app/oracle/oradata/ocaexam/system01.dbf
  2       Full 3986589    10-APR-13 05:12:33 /u01/app/oracle/oradata/ocaexam/sysaux01.dbf
  3       Full 3986589    10-APR-13 05:12:33 /u01/app/oracle/oradata/ocaexam/undotbs01.dbf
  4       Full 3986589    10-APR-13 05:12:33 /u01/app/oracle/oradata/ocaexam/users01.dbf
  5       Full 3986589    10-APR-13 05:12:33 /u01/app/oracle/oradata/ocaexam/example01.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ------------------
81      Full    9.39M      DISK        00:00:01     10-APR-13 05:18:11
        BP Key: 81   Status: AVAILABLE  Compressed: NO  Tag: TAG20130410T051810
        Piece Name: /u01/app/oracle/fast_recovery_area/OCAEXAM/autobackup/2013_04_10/812351553_8pbm.bkp
  SPFILE Included: Modification time: 10-APR-13 05:13:53
  SPFILE db_unique_name: OCAEXAM
  Control File Included: Ckp SCN: 3986589      Ckp time: 10-APR-13 05:12:33
Run Code Online (Sandbox Code Playgroud)

从这个输出中,您可以看到第一个备份(自动)分配了 tag TAG20130410T050852,并且控制文件和 spfile autobackup 紧随其后(检查 Completion Time 字段)。您还可以看到我执行了另一个数据库备份,并且我手动为其分配了 tag DELETE_ME,当然,紧随其后的是 autobackup。另请注意,每个备份中的文件都具有相同的 SCN,并且 SCN 与相邻自动备份中控制文件的 SCN 相匹配。

我们将从TAG20130410T050852比另一个标记为 的备份更旧的标记为的备份中恢复数据库DELETE_ME,我们将首先从自动备份中恢复控制文件。

为了使用 RMAN 从备份中恢复控制文件,您的实例应该处于NOMOUNT状态(在此状态下,实例控制文件仅访问 spfile,并且不访问数据文件):

RMAN> shutdown immediate;

RMAN> startup nomount;

connected to target database (not started)
Oracle instance started
database mounted
Run Code Online (Sandbox Code Playgroud)

(不过,您可以使用abort子句而不是immediate,并且 Oracle 不会打扰有序地关闭数据库——无论如何您都会从以前的备份中恢复它。)

从自动备份恢复控制文件:

RMAN> restore controlfile from
2> '/u01/app/oracle/fast_recovery_area/OCAEXAM/autobackup/2013_04_10/812350360_8pbk.bkp';

Starting restore at 10-APR-13 06:01:25
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=63 device type=DISK

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
output file name=/u01/app/oracle/oradata/ocaexam/control01.ctl
output file name=/u01/app/oracle/fast_recovery_area/ocaexam/control02.ctl
Finished restore at 10-APR-13 06:01:27
Run Code Online (Sandbox Code Playgroud)

为了让 RMAN 能够读取控制文件中的备份记录(就像我们发布时所做的那样list backup),我们需要将数据库置于MOUNT状态:

RMAN> sql 'alter database mount';
Run Code Online (Sandbox Code Playgroud)

我们现在准备恢复数据库:

RMAN> restore database from tag 'TAG20130410T050852';
Run Code Online (Sandbox Code Playgroud)

最后一步是打开数据库:

RMAN> sql 'alter database open resetlogs';
Run Code Online (Sandbox Code Playgroud)

我们resetlogs在这里指定子句是因为现有的重做日志文件不再可用,因为它们被以前的数据库使用,因此应该被重置,以便它们可以被恢复的数据库使用。

现在查询大好!