备份恢复15—— RMAN维护 + 相关的视图

简介: 原文转自:http://blog.csdn.net/tianlesoftware/article/details/5728097 The views V$RMAN_BACKUP_JOB_DETAILS and V$RMAN_BACKUP_SUBJOB...

原文转自:http://blog.csdn.net/tianlesoftware/article/details/5728097

The views V$RMAN_BACKUP_JOB_DETAILS and V$RMAN_BACKUP_SUBJOB_DETAILS and their corresponding recovery catalog versions provide details of RMAN backup jobs. 

For example, the views show how long a backup took, how many backup jobs have been issued, the status of each backup job (for example, whether it failed or completed), when a job started and finished, and what type of backup was performed. The SESSION_KEY column is the unique key for the RMAN session in which the backup job occurred.


此备份耗时,多少个backup job被执行过,每个backup job的状态(比如是否失败,完成?),一个job何时开始何时结束,何种备份被执行?列SESSION_KEY 是对应了唯一的backup job发生和rman session的关系。







这篇资料主要讲到了如下内容:

1. Rman 的维护

2. 恢复目录的维护

3. 备份恢复目录

4. RMAN 存储脚本

5. 删除数据库

 

一. RMAN 的维护

1.1 交叉效验RMAN 备份

RMAN目录和物理备份目的地不同步的情况下,我们可以使用crosscheck命令来效验控制文件或恢复目录中的RMAN信息是否与备份介质上的实际物理备份集片相同。

使用crosscheck 命令时,我们关心每个备份集或者副本的状态。 如果使用控制文件,用于备份集片的v$backup_set 视图和用于副本的v$databfile_copy 视图中的status列列出了每个备份集或副本的状态码;如果使用恢复目录,则在备份集片的RC_BACKUP_SET和副本的RC_DATAFILE_COPY中列出了每个备份集或副本的状态码。 在不同的备份状态码中,我们关心以下两种状态:

(1)AAvailable:可用)RMAN 认定该项存在于备份介质上

(2)XExpired:不可用):这个备份集片或副本上存储的RMAN目录(即控制文件或恢复目录)中,但是并没有物理存在于备份介质上。

使用crosscheck 命令的目的是将RMAN目录的状态设置为AVAILABLE或者EXPIRED 执行crosscheck时,RMAN检查目录中列出的每个备份集或副本并且判断他们是否存在与备份介质上。 如果备份集或副本不存在与备份介质上,它就会被标记为expired, 并且不能用于任何还原操作;如果备份集或副本存在与备份介质上,它就会维持available状态。 如果以前被标记为expired 的备份集或副本再次存在于备份介质上,crosscheck 命令就会将它标记回available

RMAN> crosscheck backup;

使用目标数据库控制文件替代恢复目录

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: SID=25 设备类型=DISK

交叉校验备份片段找到为 'AVAILABLE'

备份片段句柄=F:/BACKUP/BL_01LI7BSC_1_1.BAK RECID=1 STAMP=723758988

交叉校验备份片段找到为 'AVAILABLE'

备份片段句柄=F:/BACKUP/BL_02LI7BSK_1_1.BAK RECID=2 STAMP=723758997

交叉校验备份片段找到为 'AVAILABLE'

备份片段句柄=F:/BACKUP/BL_03LI7BVK_1_1.BAK RECID=3 STAMP=723759093

可以交叉效验数据文件备份,表空间备份,控制文件备份以及服务器参数文件备份。此外,可以通过识别与备份相关联的标记来选择要交叉效验和特定的备份。 基于使用的设备或者基于一个时间周期,我们甚至可以交叉效验所有的备份。 如:

Crosscheck backup of datafile 1;

Crosscheck backup of tablespace users;

Crosscheck backup of controlfile;

Crosscheck backup of spfile;

Crosscheck backup tag='TEST';

Crosscheck backup completed after 'sysdate-2';

Crosscheck backup completed between 'sysdate-5' and 'sysdate-2';

Crosscheck backup device type disk;

交叉验证归档日志示例:

RMAN> crosscheck archivelog all;

使用目标数据库控制文件替代恢复目录

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: SID=24 设备类型=DISK

对归档日志的验证成功

归档日志文件名=D:/ARCHIVELOG/BL_ARC0000000005_0723658881.0001 RECID=1 STAMP=723756640

对归档日志的验证成功

归档日志文件名=D:/ARCHIVELOG/BL_ARC0000000006_0723658881.0001 RECID=2 STAMP=723758988

对归档日志的验证成功

归档日志文件名=D:/ARCHIVELOG/BL_ARC0000000007_0723658881.0001 RECID=3 STAMP=723759092

我们可以基于一个号码或标准(包括时间,具体的或指定范围的SCN或日志序列号)来交叉效验归档的重做日志备份,甚至还可以使用like参数与通配符来交叉效验特定的归档日志备份。 如:

Crosscheck archivelog like 'ARC001.log';

Crosscheck archivelog 'D:/archivelog/arc023.log';

Crosscheck archivelog like '%ARC00012.LOG';

Crosscheck archivelog from time "to_date('2010-7-10','yyyy-mm-dd')";

Crosscheck archivelog until time "to_date('2010-7-10','yyyy-mm-dd')";

Crosscheck archivelog from sequence 12;

Crosscheck archivelog until sequence 522;

使用crosscheck copy命令还可以交叉效验副本。 包括数据文件副本,控制文件副本,归档重做日志副本以及磁盘上的归档的重做日志。 如:

Crosscheck copy of datafile 5;

Crosscheck datafilecopy 'D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF';

1.2  RMAN 备份的验证

 RMAN 提供的validate命令允许查看给定的备份集和进行验证以确保这个备份集能够被还原。注意,validate 命令必须要获得主键ID。 这个可以用list backup summary命令获取。

RMAN> list backup summary;

备份列表

===============

关键字     TY LV S 设备类型 完成时间   段数 副本数 压缩标记

------- -- -- - ----------- ---------- ------- ------- ---------- ---

      B  A  A DISK        07-7月 -10 1       1       NO         TAG20100707T200948

2       B  F  A DISK        07-7月 -10 1       1       NO         TAG20100707T200956

      B  A  A DISK        07-7月 -10 1       1       NO         TAG20100707T201132

RMAN> validate backupset 1;

启动 validate 于 10-7月 -10

使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在开始验证归档日志备份集

通道 ORA_DISK_1: 正在读取备份片段 F:/BACKUP/BL_01LI7BSC_1_1.BAK

通道 ORA_DISK_1: 段句柄 = F:/BACKUP/BL_01LI7BSC_1_1.BAK 标记 = TAG20100707T200948

通道 ORA_DISK_1: 已还原备份片段 1

通道 ORA_DISK_1: 验证完成用时: 00:00:03

完成 validate 于 10-7月 -10

1.3 备份保存策略

保存策略(retention policy)是管理备份和副本以及指定他们在备份介质上保存时间的一种方法。 我们可以定义两种基本的保存策略: 恢复窗口保存策略recovery window backup retention policy) 和 备份冗余备份保存策略backup redundancy backup retention policy)。

每个冗余策略将一直保持知道被修改或者删除(或者直到使用create controlfile命令重新构建控制文件的时候)。 两个冗余策略是相互排斥的。此外,即使使用了冗余策略,也只能在使用带obsolete参数的delete命令的时候才能删除物理备份片。

1.3.1 恢复窗口备份保存策略

这种保存策略是基于想要数据库恢复到的最近日期定制的。 如:

Configure retention policy to recovery window 7 days;

在这个示例中,我们保存近7天的备份是有效的,超过7天的备份会被丢弃。

1.3.2 备份冗余备份保存策略

这种备份策略RMAN 会从最新备份开始保留n个数据库备份。 如:

Configure retention policy to redundancy 3;

这个示例中,我们保存最后3份有效的备份。

1.3.3 保存策略的维护

当一个给定的备份或者副本由于备份保存策略的标准而被丢弃时,RMAN 不会自动删除这个备份或副本,而只是标记为OBSOLETE.  我们可以使用 report obsolete 命令查看被RMAN 标记为obsolete 的备份。

RMAN> report obsolete;

RMAN 保留策略将应用于该命令

将 RMAN 保留策略设置为冗余 1

已废弃的备份和副本报表

类型                 关键字 完成时间           文件名/句柄

-------------------- ------ ------------------ --------------------

存档日志          1      07-7月 -10         D:/ARCHIVELOG/BL_ARC0000000005_0723658881.0001

存档日志          2      07-7月 -10         D:/ARCHIVELOG/BL_ARC0000000006_0723658881.0001

备份集               1      07-7月 -10

备份片段       1      07-7月 -10         F:/BACKUP/BL_01LI7BSC_1_1.BAK

当然,我们也可以使用带有keep参数的change 命令修改需要保留的已经被丢弃备份的状态。 使用这个命令时,其状态被修改的备份或副本被认为是一个长期备份(long-term backup),并且不受相应的保存策略的影响。

可以使用change命令将一个备份修改为永久备份,也可以为这个备份或副本定义丢弃的日志。此外,还可以定义与这个备份关联的所有日志都应当被保留,以保证总是能将该备份恢复到当前时间。 我们还可以使用change nokeep命令来手工丢弃一个备份。示例:

RMAN> list backup;

备份集列表

===================

BS 关键字  大小       设备类型占用时间 完成时间

------- ---------- ----------- ------------ ----------

      52.15M     DISK        00:00:04     07-7月 -10

        BP 关键字: 1   状态: AVAILABLE  已压缩: NO  标记: TAG20100707T200948

段名:F:/BACKUP/BL_01LI7BSC_1_1.BAK

  备份集 中的已存档日志列表

  线程序列     低 SCN    时间下限   下一个 SCN   下一次

  ---- ------- ---------- ---------- ---------- ---------

  1    5       986340     06-7月 -10 1006590    07-7月 -10

  1    6       1006590    07-7月 -10 1008501    07-7月 -10

BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间

------- ---- -- ---------- ----------- ------------ ----------

2       Full    974.46M    DISK        00:01:33     07-7月 -10

        BP 关键字: 2   状态: AVAILABLE  已压缩: NO  标记: TAG20100707T200956

段名:F:/BACKUP/BL_02LI7BSK_1_1.BAK

  备份集 中的数据文件列表

  文件 LV 类型 Ckp SCN    Ckp 时间   名称

  ---- -- ---- ---------- ---------- ----

  1       Full 1008510    07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/SYSTEM01.DBF

  2       Full 1008510    07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/SYSAUX01.DBF

  3       Full 1008510    07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/UNDOTBS01.DBF

  4       Full 1008510    07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/USERS01.DBF

  5       Full 1008510    07-7月 -10

修改一个备份或副本时,必须引用与这个备份关联的备份集关键字。 

另外,keep forever 选项有两个重要的限制:

(1)只有在使用恢复目录时,才可以使用该选项

(2)如果使用FRA,则不能使用该选项

修改备份为永久保存并将以及该备份的相关的日志保存下来,保证总能将备份恢复到当前时间点
    change backupset 31 keep forever logs;
设置备份丢弃的新日期,将备份在多保存天,天后将删除
    change backupset 32 keep until time 'sysdata + 7' logs;

检查完报告后,可以使用带有obsolete 参数的delete 命令指示Oracle 删除要丢弃的备份,如:

Delete obsolete;

如果要使一个备份不受所选冗余策略的影响,可以使用backup命令的keep 参数来为这个备份指定另一个保存标准。 如:

Backup database keep forever;

Backup database keep until time "to_date('2010-7-10','yyyy-mm-dd')";

Backup database keep 5 days;

1.4 change 命令

Change 命令允许用户修改备份的状态。我们可能会遇到备份介质设备在某个时间爱你段中无效的情况(如突然断电)。这时,我们就可以使用change 命令来指示这个设备上的备份是不可用的。

解决硬件故障和修复磁盘后,额可以再次执行change 命令,将备份改为可用的状态。也可以将备份修改为不可用的状态。在还原和恢复操作期间,不会考虑哪些不可用的备份,但在执行delete expired命令期间这些备份记录不会被删除。 相关示例:

Change backup of database tag='TEST' unavailable;

Change backup of database like '%TEST%' unavailable;

Change backupset 33 unavailable;

Change backupset 33 available;

Change archivelog 'd:/archivelog/arc0001.log' unavailable;

可以使用change命令修改归档的重做日志备份的状态。如:将已经备份了指定次数的所有归档的重做日志备份修改为不可用的状态,也可以修改特定设备上的所有备份的状态。

Change archivelog all backed up 5 times to device type disk unavailable;

Change backup of database device type disk unavailable;

可是使用带有delete 参数的change 命令删除备份集,即在备份介质上的物理删除,并且从控制文件和恢复目录中删除。 前提是要知道备份集关键字,可以使用list backup 或 list copy 命令查看。

RMAN> list backup;

备份集列表

===================

BS 关键字  大小       设备类型占用时间 完成时间

------- ---------- ----------- ------------ ----------

      52.15M     DISK        00:00:04     07-7月 -10

        BP 关键字: 1   状态: AVAILABLE  已压缩: NO  标记: TAG20100707T200948

段名:F:/BACKUP/BL_01LI7BSC_1_1.BAK

  备份集 中的已存档日志列表

  线程序列     低 SCN    时间下限   下一个 SCN   下一次

  ---- ------- ---------- ---------- ---------- ---------

  1    5       986340     06-7月 -10 1006590    07-7月 -10

  1    6       1006590    07-7月 -10 1008501    07-7月 -10

BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间

------- ---- -- ---------- ----------- ------------ ----------

2       Full    974.46M    DISK        00:01:33     07-7月 -10

        BP 关键字: 2   状态: AVAILABLE  已压缩: NO  标记: TAG20100707T200956

段名:F:/BACKUP/BL_02LI7BSK_1_1.BAK

  备份集 中的数据文件列表

  文件 LV 类型 Ckp SCN    Ckp 时间   名称

  ---- -- ---- ---------- ---------- ----

  1       Full 1008510    07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/SYSTEM01.DBF

  2       Full 1008510    07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/SYSAUX01.DBF

  3       Full 1008510    07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/UNDOTBS01.DBF

  4       Full 1008510    07-7月 -10 D:/APP/ADMINISTRATOR/ORADATA/BL/USERS01.DBF

  5       Full 1008510    07-7月 -10

删除备份集1

RMAN> change backupset 1 delete;

使用通道 ORA_DISK_1

备份片段列表

BP 关键字  BS 关键字  Pc# Cp# 状态      设备类型段名称

------- ------- --- --- ----------- ----------- ----------

1       1       1   1   AVAILABLE   DISK        F:/BACKUP/BL_01LI7BSC_1_1.BAK

是否确定要删除以上对象 (输入 YES 或 NO)? yes

已删除备份片段

备份片段句柄=F:/BACKUP/BL_01LI7BSC_1_1.BAK RECID=1 STAMP=723758988

对象已删除

在上面的这个示例中,我们删除了备份集和它关联的备份片。 也可以删除一些备份片。 通过 list backup命令我们可以看到备份片的名称,比如:段名:F:/BACKUP/BL_01LI7BSC_1_1.BAK

我们也可以查看备份片的号码,用catalog 用户连接数据库后,查看rc_backup_piece 表,SQL如下:

SQL> select bs_key,bp_key,piece#,handle from rc_backup_piece;

    BS_KEY     BP_KEY     PIECE#   HANDLE

---------- ---------- ---------- -----------------------------------------------

        52         55          1  D:/BACKUP/ORCL_02LI47UA_1_1

        53         56          1  D:/BACKUP/ORCL_03LI47UF_1_1

        75         82          1  D:/BACKUP/ORCL_04LI4816_1_1

删除备份片,我们可以用BP_KEY,也可以直接用段名(handle,如:

RMAN>  Change backuppiece 'F:/BACKUP/BL_02LI7BSK_1_1.BAK' delete;

使用通道 ORA_DISK_1

备份片段列表

BP 关键字  BS 关键字  Pc# Cp# 状态      设备类型段名称

------- ------- --- --- ----------- ----------- ----------

2       2       1   1   AVAILABLE   DISK        F:/BACKUP/BL_02LI7BSK_1_1.BAK

是否确定要删除以上对象 (输入 YES 或 NO)? yes

已删除备份片段

备份片段句柄=F:/BACKUP/BL_02LI7BSK_1_1.BAK RECID=2 STAMP=723758997

对象已删除

使用备份集片,如:

Change backuppiece 622 delete;

Change archivelog until logseq=54 delete;

最后,可以使用change backuppiece uncataog命令从目录中删除备份集片。 如果删除最后剩余的备份集片,那么它也将删除备份集记录。如:

Change backuppiece 'F:/BACKUP/BL_02LI7BSK_1_1.BAK' uncatalog;

1.5 delete 命令

备份集不是永远存在的。我们可以使用保存策略标记备份有效性和生存期的结束。但是,备份策略的实施不会从RMAN目录中删除备份,而只是将这些备份标记为丢弃状态。

Delete 命令对备份和副本的影响很大。通过delete命令,可以删除基于保存标准被标记为丢弃的任何备份,还可以将恢复目录或控制文件中的备份从expired状态变为deleted状态。 如:

Delete expired;

Delete obsolete;

执行delete命令时,RMAN会请求用户确认这个删除命令,如果确认了这个删除命令,RMAN 就会完成delete操作。

注意: 如果一个备份被标记为deleted 状态,就不能恢复这个备份。 如果该备份物理可用,我们仍然可以使用dbms_backup_restore过程来恢复这个备份。

1.6 RMAN中为其他备份编写目录

使用catalog 命令可以在RMAN中记录数据文件备份,归档日志备份和控制文件备份,随后还能使用这些备份来还原和恢复数据库。 Oracle 10g允许使用catalog命令来为控制文件中已有的备份集片编写目录。当使用一个不包含最新的RMAN信息的较早备份控制文件还原数据库时,则可以很方便得使用该功能来完成。

示例:

我们先备份一个表空间,归档文件,控制文件。 然后通过catalog 把这些信息添加到恢复目录里。

SQL> conn /@bl as sysdba;

已连接。

SQL> alter tablespace users begin backup;

表空间已更改。

SQL> select file_name from dba_data_files;

FILE_NAME

------------------------------------------------------------------------------

D:/APP/ADMINISTRATOR/ORADATA/BL/USERS01.DBF

D:/APP/ADMINISTRATOR/ORADATA/BL/UNDOTBS01.DBF

D:/APP/ADMINISTRATOR/ORADATA/BL/SYSAUX01.DBF

D:/APP/ADMINISTRATOR/ORADATA/BL/SYSTEM01.DBF

D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF

SQL> host copy D:/APP/ADMINISTRATOR/ORADATA/BL/USERS01.DBF F:/backup;

已复制         个文件。

SQL> alter tablespace users end backup;

表空间已更改。

SQL> alter system archive log current;

系统已更改。

SQL> host copy d:/archivelog/BL_ARC0000000017_0723658881.0001 F:/backup

已复制         个文件。

SQL> alter database backup controlfile to 'F:/backup/bl-2010-7-11.ctl';

数据库已更改。

现在在RMAN中将上面的备份信息写入catalog

C:/Users/Administrator.DavidDai>rman target /@bl;

恢复管理器: Release 11.2.0.1.0 - Production on 星期日 7月 11 08:51:50 2010

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

连接到目标数据库: BL (DBID=680066685)

RMAN> catalog datafilecopy 'F:/backup/users01.dbf';

已将数据文件副本列入目录

数据文件副本文件名=F:/BACKUP/USERS01.DBF RECID=3 STAMP=724063951

RMAN> catalog archivelog 'f:/backup/BL_ARC0000000017_0723658881.0001';

已编目的归档日志

归档日志文件名=F:/BACKUP/BL_ARC0000000017_0723658881.0001 RECID=14 STAMP=724063994

RMAN> catalog controlfilecopy 'f:/backup/BL-2010-7-11.CTL';

已列入目录的控制文件副本

控制文件副本文件名=F:/BACKUP/BL-2010-7-11.CTL RECID=4 STAMP=724064022

Catalog命令允许将与新的备份集相关的信息输入到控制文件或恢复目录中。 RMAN将重写与编写目录的信息冲突的已存在的目录信息。 如果需要移动备份集片的位置,也可以使用该命令。

查看备份集信息

RMAN> list backup;

备份集列表

===================

BS 关键字  大小       设备类型占用时间 完成时间

------- ---------- ----------- ------------ ----------

3       7.50K      DISK        00:00:01     07-7月 -10

        BP 关键字: 3   状态: AVAILABLE  已压缩: NO  标记: TAG20100707T201132

段名:F:/BACKUP/BL_03LI7BVK_1_1.BAK

将备份集移到其他位置,然后用catalog修改控制文件中每个移动的备份片的正确位置:

RMAN> catalog backuppiece 'f:/BL_03LI7BVK_1_1.BAK';

已将备份片段列入目录

备份片段句柄=F:/BL_03LI7BVK_1_1.BAK RECID=12 STAMP=724064512

也可以使用带有start with 选项的catalog命令,该命令允许定义包含将要编写目录的RMAN 备份集片的目录,RMAN 然后对该目录中的所有备份集片编写目录。

RMAN>catalog start with 'f:/backup';

该命令会提示编写目录的文件列表,并询问是否希望对所列出的文件编写目录,如果确定编写目录,RMAN就会对列出的所有备份集片编写目录。该命令也允许对一些具有类似名称的备份集片编写目录。

当使用catalog start with命令时,不会局限与特定的文件编写目录;该命令将尝试对符合参数列表的所有文件编写目录。 然后,在执行catalog过程中,非备份集片的文件将会使编写目录的过程失败,并且产生一个错误,如果作为备份集片文件被成功编写目录,则不管是否会产生其他错误。

 

 

二. 恢复目录的维护

使用恢复目录时会涉及到其他一些维护活动,比如在数据库升级或迁移期间升级恢复目录,手工配置数据库对应物以及在某些数据库操作后在同步恢复目录。

2.1 RMAN中取消注册数据库

Oracle 10g 之前,从恢复目录中取消注册数据库是一个手工操作的过程。在10g中,从恢复目录中删除数据库只需要执行 unregister database。如:

RMAN>unregister database orcl;

注意的是: 该命令不会删除该数据库的备份文件,而只是删除这些备份文件的恢复目录引用。 同样需要注意的是,只需要连接恢复目录就可以执行该命令。

2.2 数据库的迁移和升级问题

升级数据库时,必须同事升级恢复目录,因为数据库版本, RMAN 版本和恢复目录版本之间存在严格的格则。

用恢复目录用户连接数据库,然后查询rcver表,就可以看到恢复目录的版本:

SQL> conn rman/rman@orcl;

已连接。

SQL> select version from rcver;

VERSION

------------

11.02.00.01

   只要恢复目录的版本不低于数据库的版本,就能够执行各种操作。 因此,如果在同一个恢复目录中存储多个数据库,只要升级这个恢复目录中的一个数据库。

升级恢复目录很简单,只需要在RMAN 里执行upgrade catalog命令即可。 RMAN 会提示用户再次输入upgrade catalog命令,随后将升级恢复目录。

C:/Users/Administrator.DavidDai>rman target /@bl catalog rman/rman@orcl;

恢复管理器: Release 11.2.0.1.0 - Production on 星期日 7月 11 10:16:20 2010

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

连接到目标数据库: BL (DBID=680066685)

连接到恢复目录数据库

RMAN> upgrade catalog;

恢复目录所有者是RMAN

再输入一次 UPGRADE CATALOG 命令来确认目录升级

RMAN> upgrade catalog;

恢复目录已升级到版本11.02.00.01

DBMS_RCVMAN 程序包升级为 11.02.00.01 

DBMS_RCVCAT 程序包升级为 11.02.00.01 

2.3 手工重置数据库对应物(reset catalog

在打开数据库时,如果使用resetlogs参数,就会创建一个新对应物。 如果这个操作是在RMAN 中进行,则会正确的更新恢复目录,但是,如果手工执行resetlogs命令(比如:sqlplus),就必须在恢复目录中重置数据库对应物。

Rman>reset database to incarnation 5;

2.4 手工再同步恢复目录(resync catalog

RMAN使用恢复目录时,它会使用在同步进程来确保恢复目录和目标数据库的控制文件一致。通常,OracleRMAN操作(备份和恢复)后会再同步数据库,这样就不必经常再同步恢复目录。需要再同步恢复目录的一个实例是有时使用恢复目录,有时不使用恢复目录,此时,可以使用resync catalog命令手工使Oracle 再同步恢复目录。

Rman>resync catalog;

Oracle 同步恢复目录时,它首先会创建一个快照控制文件,并比较这个文件和恢复目录。 完成比较后,Oracle更新恢复目录,是恢复目录与数据库控制文件同步。

2.5 恢复目录记录的删除

只有很少的记录会从恢复目录中被删除,如果不加以维护,状态为deleted的就备份会一直驻留在恢复目录中。为了解决这个问题,Oracle提供了$ORACLE_HOME/rdbms/admin/prgmanc.sql 脚本来删除恢复目录中状态为deleted的所有记录。 建议定期执行这个脚本,以控制文件恢复目录的大小。

如果要从恢复目录中删除旧的对应物记录,就必须从DBINC表中删除这些对应物。可以使用RC_DATABASE_INCARNATION 视图来确定要删除的对应物,记录想删除的每个对应物的DBINC_KEY值。然后在sqlplus中执行delete 命令,如:

SQL> select * from rc_database_incarnation;

    DB_KEY       DBID  DBINC_KEY NAME     RESETLOGS_CHANGE# RESETLOGS_TIME CUR P

---------- ---------- ---------- -------- ----------------- -------------- --- -

         2 1247395743          4 ORCL                940976 21-5月 -10     NO  0

         2 1247395743         21 ORCL                     1 02-4月 -10     NO

         2 1247395743        787 ORCL               8554968 06-7月 -10     YES 2

SQL> delete from dbinc where dbinc_key=4;

已删除 行。

 

 

 

三. 备份恢复目录

我们可以使用RMAN来备份数据库,同样可以用RMAN 来备份恢复目录数据库。 只要确保设置了合理的恢复策略,就能够很快的还原恢复目录。 

丢失恢复目录并不可怕,即使使用了恢复目录,在以后也可以不使用恢复目录就能够恢复数据库。关键的是,我们需要数据库控制文件的备份。

 

 

四. RMAN 存储的脚本

RMAN中,我们可以创建一个命令文件,里面包含rman命令,然后在RMAN的中调用这个文件。如:

Rman target usr/pwd cmdfile=backup.cmd

或者,也可以直接在RMAN 中直接运行

@@backup.cmd

此外,RMAN 还提供了恢复目录中的存储脚本, 这些操作必须使用恢复目录。

4.1 创建存储的脚本

使用create script RMAN 命令可以在恢复目录中存储脚本。 创建每个存储的脚本时,都要为脚本指定一个名称。 可以创建执行数据库备份,恢复和维护操作的脚本。在脚本中,RMAN 允许使用comment 参数存储与存储脚本相关的注释。 注意: 必须连接到恢复目录。 如:

RMAN> create script my_backup_script

2> comment 'dave'

3> {

4> backup database plus archivelog;

5> }

已创建脚本 my_backup_script

4.2 修改存储脚本

使用replace script 命令可以替换恢复目录中的存储脚本。

RMAN> replace script my_backup_script

2> comment 'bl'

3> {

4> backup database plus archivelog delete input;

5> }

已替换脚本 my_backup_script

4.3 删除存储脚本

使用delete script命令可以删除一个存储脚本。

RMAN>   Delete script my_backup_script;

已删除脚本: my_backup_script

4.4 使用存储脚本

创建一些存储过程脚本后,可以执行execute script命令来使用这些脚本。如:

Run { execute script my_backup_script; }

4.5 打印存储的脚本

RMAN> Print script my_backup_script;

正在打印存储的脚本: my_backup_script

{backup database plus archivelog;}

还可以使用RC_STORED_SCRIPT_LINE恢复目录视图来显示存储的脚本的内容,如:

SQL> select script_name,text from rc_stored_script_line order by script_name,line;

SCRIPT_NAME                    TEXT

------------------------------ -------------------------------------------------

my_backup_script               {

my_backup_script               backup database plus archivelog delete input;

my_backup_script               }

 

 

五. 删除数据库

如果无法采取其他方法来处理数据库的问题,则可以使用RMAN drop database。 只需要将数据库置于受限制的会话模式,在使用RMAN连接到目标数据库,执行drop database命令,就可以安静的删除数据库。 如果添加inculding backups参数,则在删除同时删除RMAN相关的备份。 执行该命令时,RMAN 首先会确认操作,然后继续删除数据库。 如果希望不回显提示,可以使用noprompt参数。 示例:

DROP DATABASE;

DROP DATABASE NOPROMPT;

DROP DATABASE INCLUDING BACKUPS;

DROP DATABASE INCLUDING BACKUPS NOPROMPT;

The “DROP DATABASE” command deletes the

Datafiles

Logfiles

Controlfiles

Spfile

The ” DROP DATABASE INCLUDING BACKUPS ” command in addition to the above files also removes

Archivelogs

Backup pieces generated by RMAN

SQL> startup mount;

ORACLE 例程已经启动。

Total System Global Area  636100608 bytes

Fixed Size                  1376464 bytes

Variable Size             457183024 bytes

Database Buffers          171966464 bytes

Redo Buffers                5574656 bytes

数据库装载完毕。

SQL> alter system enable restricted session;

系统已更改。

alter system disable restricted session.

C:/Users/Administrator.DavidDai>rman target /;

恢复管理器: Release 11.2.0.1.0 - Production on 星期日 7月 11 14:23:48 2010

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

已连接到目标数据库: BL (DBID=680066685, 未打开)

RMAN> DROP DATABASE INCLUDING BACKUPS;
数据库名为 "BL" 且 DBID 为 680066685

是否确实要删除所有备份和数据库 (输入 YES 或 NO)? yes

使用目标数据库控制文件替代恢复目录

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: SID=10 设备类型=DISK

......

补充一点,windows 下,不会删除服务,要删除服务,需要手工的运行ormdim 命令。如:

C:/Users/Administrator.DavidDai>oradim -delete -sid bl

Unable to stop service, OS Error = 1062

实例已删除。



一. List 命令

RMANlist命令是一种在数据库控制文件或恢复目录中查询备份的历史信息的方法。列表提供了一组信息,包括从数据库对应物的列表到备份集和归档日志的备份的列表的所有信息。

1.1 列出对应物

List incarnation 命令为用户提供了目标数据库的每个数据库对应物列表。 如果有必要,可以使用这个列表的信息将数据库恢复到执行最后一条resetlogs命令前的某个时间点。

RMAN> list incarnation;

使用目标数据库控制文件替代恢复目录

数据库原型列表

DB 关键字  Inc 关键字 DB 名  DB ID            STATUS  重置 SCN  重置时间

------- ------- -------- ---------------- --- ---------- ----------

1       1       ORCL     1247395743       PARENT  1          02-4月 -10

2       2       ORCL     1247395743       PARENT  940976     21-5月 -10

3       3       ORCL     1247395743       ORPHAN  8426617    06-7月 -10

4       4       ORCL     1247395743       CURRENT 8554968    06-7月 -10

Oracle 10g中新增的列是status,该列列出的是对应物的状态,该状态表明对应物是就的对应物(parent),当前对应物(current),和孤立的对应物(ORPHAN,即在resetlogs命令之后进行恢复)。 

重置SCNReset SCN)和重置时间(Reset Time)主要说明创建数据库对应物的时间,这也是第一个条目的Reset SCN1的原因。 该列对使用resetlogs命令进行恢复有用,并使得能较容易的恢复到前面的对应物。

注意一点,使用恢复目录和不使用恢复目录输出是有差异的。 在Inc Key 上有出入。

1.2 列出备份

List命令提供了许多不同的选项来报告数据库备份和副本的状态。

1.2.1 概述可用的备份

RMAN> list backup summary;

备份列表

===============

关键字     TY LV S 设备类型 完成时间   段数 副本数 压缩标记

------- -- -- - ----------- ---------- ------- ------- ---------- ---

113     B  F  A SBT_TAPE    18-6月 -10 1       1       NO         TAG20100618T085926

138     B  F  A DISK        21-6月 -10 1       1       YES        TAG20100621T233122

219     B  F  A DISK        22-6月 -10 1       1       NO         TAG20100622T212749

231     B  1  A DISK        23-6月 -10 1       1       NO         ORCL

1072    B  F  A DISK        06-7月 -10 1       1       NO         TAG20100706T134705

在这个示例中我们可以得到一下信息:

KEY(关键字) 表示备份集键

TY(类型)和LV表示列的备份类型:

B[Backup] 表示备份

F[Full] 表示完全备份

A[Archivelog]

0表示增量备份[Incremental backup]

说明备份的状态: 表示Available表示Expired.

Device Type:  说明备份的设备是磁带还是磁盘

大多数list命令都可以在末尾使用summary参数,如:

List backup of database summary;

List expired backup of archivelog all summary;

List backup of tablespace users summary;

1.2.2 按备份类型列出备份

可以使用list backup by file 命令列出每个备份集和备份集片。它可以按数据文件备份,归档日志备份,控制文件和spfile文件备份列出备份信息。 如:

RMAN> list backup by file;

控制文件备份列表

============================

CF Ckp SCN Ckp 时间   BS 关键字  段数 副本数 压缩标记

---------- ---------- ------- - ------- ------- ---------- ---

8625387    06-7月 -10 1072    A 1       1       NO         TAG20100706T134705

8555238    06-7月 -10 1000    A 1       1       NO         TAG20100706T091808

SPFILE 备份的列表

======================

修改时间   BS 关键字  段数 副本数 压缩标记

---------- ------- - ------- ------- ---------- ---

06-7月 -10 1072    A 1       1       NO         TAG20100706T134705

06-7月 -10 1000    A 1       1       NO         TAG20100706T091808

27-6月 -10 732     A 1       1       NO         TAG20100628T110902

21-6月 -10 231     A 1       1       NO         ORCL

21-6月 -10 219     A 1       1       NO         TAG20100622T212749

21-6月 -10 138     A 1       1       YES        TAG20100621T233122

17-6月 -10 113     A 1       1       NO         TAG20100618T085926

1.2.3 其他备份信息

如果想要查看RMAN 更多的信息,可以使用list backup命令。该命令可以提供所生成备份(包括备份集,归档的重做日志备份,控制文件备份以及服务器参数文件备份)的详细信息。 

RMAN> list backup;

备份集列表

===================

BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间

------- ---- -- ---------- ----------- ------------ ----------

113     Full    16.00M     SBT_TAPE    00:00:05     18-6月 -10

        BP 关键字: 116   状态: AVAILABLE  已压缩: NO  标记: TAG20100618T085926

        句柄: 07lghd6e_1_1   介质: /,07lghd6e_1_1

  包含的 SPFILE: 修改时间: 17-6月 -10

  SPFILE db_unique_name: ORCL

BS 关键字  类型 LV 大小       设备类型 经过时间 完成时间

------- ---- -- ---------- ----------- ------------ ----------

138     Full    1.03M      DISK        00:00:02     21-6月 -10

        BP 关键字: 142   状态: AVAILABLE  已压缩: YES  标记: TAG20100621T233122

段名:D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/ORCL/BACKUPSET/2010_06_21/O1_MF_NC

SNF_TAG20100621T233122_61Z1KVPK_.BKP

  包含的 SPFILE: 修改时间: 21-6月 -10

  SPFILE db_unique_name: ORCL

1.2.4 列出适合恢复的备份

如果需要查看能够用于还原和恢复数据库的所有数据文件备份或副本,则可以使用list recoverable命令。 List 命令提供了状态为Available的,可用于还原数据库的所有备份列表(该列表值用于当前的对应物),其中包括备份,映像副本和增量备份。 如果增量备份没有有效的父备份,它就不会包含在备份中。

RMAN> list recoverable backup of database;

1.2.5 列出到期的备份

执行list expired backup命令可以列出到期的备份,该命令也可以获得到期的表空间和数据文件的备份列表,如果插入正确的关键字(如: list expired backup of datafile 3 或者 list expired backup of archivelog all),则可以获得到期的归档日志备份和控制文件/spfile文件的自动备份列表。

RMAN> list expired backup;

1.2.6 按表空间名和数据文件号列出备份

执行list backup of tablespace 或者list backup of datafile 命令可以列出指定表空间或数据文件的输出:

RMAN> list backup of tablespace users;

RMAN> list backup of datafile 3;

1.2.7 列出归档日志备份

RMAN 提供了列出归档日志备份的几种选项。 如果要得到当前存在的归档日志(并不意味着它们已经备份)的完整概述,可以使用list archivelog all命令:

RMAN> list archivelog all;

如果想要得到更详细的报告,可以使用: list backup of archivelog all

RMAN> list backup of archivelog all;

如果只想查看到期的备份集,可以执行list expired backup of archivelog all;

RMAN> list expired backup of archivelog all;

还可以设定时间或日志序列号来限制报告中显示的内容,如:

RMAN> list expired backup of archivelog until sequence 3;

RMAN> list expired backup of archivelog until time "to_date('2010-7-6','yyyy-mm-dd')";

1.2.8 列出控制文件和服务器参数文件备份

List backup of controlfile命令可以向用户提供控制文件备份的列表,list backup of spfile 可以提供服务器参数文件备份的列表。

RMAN> list backup of controlfile;

RMAN> list backup of spfile;

1.3  列出映像副本

List 命令也可以用来判断数据库映像副本的状态,如:

RMAN> list copy;

1.3.1 列出数据文件副本

可以使用list copy of database命令生成所有数据文件副本的概述列表:

RMAN> list copy of database;

也可以使用list copy of tablespace 或者list copy of datafile 命令来显示表空间或数据文件的副本。

RMAN> list copy of tablespace users;

RMAN> list copy of datafile 1;

1.3.2 列出归档的重做日志副本

可以用list copy of archivelog copies命令查看归档的重做日志副本,如:

RMAN> list copy of archivelog all;

也可以按照时间,序列或者数据库的SCN 列出特定的归档的重做日志副本,如:

RMAN> list copy of archivelog from sequence 1;

RMAN> list copy of archivelog from sequence 1 until sequence 22;

1.3.3 列出控制文件副本

RMAN 可以通过执行list controlfile copy命令来显示控制文件副本。

RMAN> list copy of controlfile;

 

 

二. Report 命令

RMANreport命令可以用户判断数据库的当前可恢复状态和提供数据库备份的特定信息。

2.1 指定最近没有备份的数据文件

查询3天内没有备份过的表空间,可以用如下命令:

RMAN> report need backup days=3;

也可以根据需要应用的增量备份数生成报告:

RMAN> report need backup incremental =3;

2.2 报告备份冗余或恢复窗口

可以用report need backup redundancy 命令来确定为满足备份冗余策略而需要备份的数据文件。 如:

RMAN> report need backup redundancy =2;

文件冗余备份少于2

文件 #bkps 名称

---- ----- -----------------------------------------------------

1    0     D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSTEM01.DBF

2    0     D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSAUX01.DBF

3    0     D:/APP/ADMINISTRATOR/ORADATA/ORCL/UNDOTBS01.DBF

4    0     D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF

也可以用report need backup recovery window days命令为备份建立一个时间值最小的恢复窗口,并且报告备份时间长于这个恢复窗口的数据文件。

RMAN> report need backup recovery window of 2 days;

必须备份以满足 天恢复窗口所需的文件报表

文件天数据 名称

---- ----- -----------------------------------------------------

1    100   D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSTEM01.DBF

2    100   D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSAUX01.DBF

3    18    D:/APP/ADMINISTRATOR/ORADATA/ORCL/UNDOTBS01.DBF

4    100   D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF

2.3  报告数据文件的不可用恢复操作

对于表空间中对象和组成这些表空间的数据文件执行的不可恢复操作会导致某些可恢复性问题。我们可以使用report unrecoverable命令查看unrecoverable 的对象。

RMAN> report unrecoverable;

2.4 报告数据库模式(Schema

这里的Schema指的是数据库的物理结构,模式包括数据文件名,数据文件号,为这些数据文件指派的表空间,数据文件的大小,以及数据文件是否含有回滚段。 我们可以查看当前的模式,也可以查看过去时间点的模式。

RMAN> report schema;

2. 5 报告丢失的备份

如果使用了保存策略,备份有可能被标记为丢失状态(obsolete),可以执行report obsolete命令查看这些信息。

RMAN> report obsolete;

RMAN 保留策略将应用于该命令

将 RMAN 保留策略设置为冗余 1

已废弃的备份和副本报表

类型                 关键字 完成时间           文件名/句柄

-------------------- ------ ------------------ --------------------

备份集               112    18-6月 -10

备份片段       115    18-6月 -10         06lghd3f_1_1

备份集               113    18-6月 -10

备份片段       116    18-6月 -10         07lghd6e_1_1

备份集               137    21-6月 -10

备份片段       141    21-6月 -10         D:/APP/ADMINISTRATOR/FLASH_RECOVERY_ARE

A/ORCL/BACKUPSET/2010_06_21/O1_MF_NNNDF_TAG20100621T233122_61Z1GD2R_.BKP

 


相关文章
|
Oracle 关系型数据库 数据库
|
SQL Oracle 网络协议
|
Oracle 关系型数据库 数据库
Oracle的数据库管理(一)——逻辑备份与恢复
一、管理数据库的用户主要是:sys、system (1)存储的数据的重要性 sys:所有oracle的数据库字典的基表和视图都存放在sys用户中,这些基表和视图对于oracle的运行是至关重要的,由数据库自己维护,任何用户都不能手动更改。
1024 0
|
存储 Oracle 关系型数据库
Oracle数据库控制文件在备份恢复中的作用
整理自《Oracle database 11g RMAN备份与恢复》 001     控制文件平常的作用是负责数据库的物理结构。顾名思义,控制文件控制数据库查找物理文件的位置,并控制每个文件当前包含(或应当包含)的头信息,其内容包括数据文件信息、重做日志信息和归档日志信息。
931 0
|
SQL Oracle 关系型数据库
【RMAN】RMAN跨版本恢复(上)
【RMAN】RMAN跨版本恢复(上)--小版本异机恢复 BLOG文档结构图           前几天去面试被问到了关于rman是否可以跨版本恢复的问题,其实之前有网友曾经问过只是我没有做实验,这几天有空就研究了下rman跨版本恢复的这个问题。
1190 0
|
SQL Oracle 关系型数据库
【RMAN】RMAN跨版本恢复(中)
【RMAN】RMAN跨版本恢复(中)--大版本异机恢复 BLOG文档结构图                 ORACLE_SID=jiagulun 原机:  OS:Linux x86 64-bit  IP:192.168.59.156  oracle:10.2.0.1.0 归档模式 异机:  OS:Linux x86 64-bit  IP:192.168.59.10   oracle:11.2.0.3.0  归档模式 目的:利用原机的rman备份集将原库恢复到异机。
893 0