3.1.7 创建和使用RMAN存储脚本

如本章前面所述,RMAN存储脚本允许自动重复使用一组RMAN命令,使Oracle DBA的日常工作变得轻松起来。存储脚本可以很好地替代你在传统文件系统中存储的脚本。不仅可以将脚本存储在恢复目录中(也就是说,如果移动恢复目录数据库,不会丢失脚本),还可以通过将脚本限制用于恢复目录中管理的一个目标数据库或所有数据库来控制对存储脚本的访问。

1.创建RMAN存储脚本

使用CREATE SCRIPT或CREATE GLOBAL SCRIPT命令来创建RMAN脚本。GLOBAL参数指出相应的脚本可以用于共享此恢复目录的所有RMAN目标数据库。要创建全局脚本或本地脚本,必须连接到目标数据库和恢复目录。

本例创建一个名为GLOBAL_BACKUP_DB的全局脚本,它创建包含归档日志文件在内的完整备份:

        RMAN> CREATE GLOBAL SCRIPT
        2>      global_backup_db { BACKUP DATABASE PLUS ARCHIVELOG; }

        created global script global_backup_db

        RMAN>

如果要使脚本仅用于一个特定的目标数据库,则应该忽略GLOBAL关键字。如果文件系统的文本文件中已经有一个RMAN脚本,则可以使用以下语法将脚本导入RMAN全局或本地脚本中:

        RMAN> create script local_backup_db from file
        2>      '/home/oracle/dbscripts/local_bak.rman';

2.执行RMAN存储脚本

运行全局或本地RMAN存储脚本十分简单;但必须在RUN块中执行脚本。语法如下:

        RUN
        { ...other commands...;
          EXECUTE [GLOBAL] SCRIPT scriptname;
         ...other commands...;
        }

下面显示如何运行上一节创建的全局脚本:

        RMAN> run { execute script global_backup_db; }

也可以在RMAN存储脚本中使用参数。换言之,如果脚本中的一个或两个值会发生变化,如特定通道的值或备份对象的值是可变的,那么可以像在SQL*Plus脚本中那样将&字符用作替换指示符。

练习3-2

创建参数化存储脚本

本练习将自动备份整个表空间。你将创建RMAN全局脚本来完成此任务,此脚本有一个参数,此参数在运行时会提示输入表空间名称。

(1)创建一个全局存储脚本,使用&1参数表示表空间名称。

        RMAN> create global script backup_ts
        2>     {
        3>        backup tablespace &1;
        Enter value for 1: users
        4>     }

        created global script backup_ts

        RMAN>

注意,表空间参数的默认值是USERS。

(2)运行存储脚本,并使用表空间SYSTEM重写在创建脚本时为表空间分配的默认值:

        RMAN> run {execute script backup_ts; }

        executing global script: backup_ts

        Enter value for 1: sysaux

        Starting backup at 18-FEB-14
        allocated channel: ORA_DISK_1
        channel ORA_DISK_1: SID=517 device type=DISK
        channel ORA_DISK_1: starting full datafile backup set
        channel ORA_DISK_1: specifying datafile(s) in backup set
        input datafile file number=00003
        name=+DATA/RPT12C/DATAFILE/sysaux.257.826650753
        channel ORA_DISK_1: starting piece 1 at 18-FEB-14
        channel ORA_DISK_1: finished piece 1 at 18-FEB-14
        piece handle=+RECOV/RPT12C/BACKUPSET/2014_02_18/
            nnndf0_tag20140218t222200_0.268.839888521 tag=TAG20140218T222200
          comment=NONE
      channel ORA_DISK_1: backup set complete, elapsed time: 00:00:15
      Finished backup at 18-FEB-14
      RMAN>

3.检索RMAN存储脚本元数据

可使用PRINT和LIST命令检索RMAN存储脚本的内容:PRINT命令显示单个脚本的内容,而LIST命令显示全局脚本和/或本地脚本的名称。

本例使用LIST SCRIPT NAMES命令显示本地脚本和全局脚本:

        RMAN> list script names;

        List of Stored Scripts in Recovery Catalog

            Scripts of Target Database COMPLREF

              Script Name
              Description
              ---------------------------------------------------------
              local_backup_db

            Global Scripts

              Script Name
              Description
              ---------------------------------------------------------
              backup_ts

              global_backup_db
        RMAN>

LIST GLOBAL SCRIPT NAMES只返回全局脚本名称。

要显示脚本的实际内容,请使用PRINT命令。由于全局脚本和本地脚本可能同名,如果要打印全局版本的脚本而不打印本地版本的脚本,可使用GLOBAL选项限制PRINT命令。下例检索global_backup_db脚本的内容:

        RMAN> print global script global_backup_db;

        printing stored global script: global_backup_db
        { BACKUP DATABASE PLUS ARCHIVELOG; }

        RMAN>

可以使用带有TO FILE选项的PRINT命令,将全局或本地脚本的内容转储到文件中:

        RMAN> print global script global_backup_db
        2>       to file '/tmp/save_script.rman';

        global script global_backup_db written to file /tmp/save_script.rman
        RMAN>

4.管理RMAN存储脚本

也可以方便地删除或替换存储脚本。要替换存储脚本,请使用REPLACE [GLOBAL] SCRIPT命令。在本例中,需要修改全局脚本backup_ts,以便备份SYSTEM表空间以及需要的表空间:

        RMAN> replace global script backup_ts
        2>   {
        3>      backup tablespace system, &1;

        Enter value for 1: users
        4>   }

        replaced global script backup_ts

        RMAN>

应该使用DELETE SCRIPT命令来删除全局脚本或本地脚本:

        RMAN> delete script local_backup_db;

        deleted script: local_backup_db

        RMAN>