Pages

Tuesday, September 15, 2015

RMAN常用命令

8.4 RMAN 命令知多少


  RMAN 作为一个专业的备份工具,它几乎考虑到了备份及恢复过程中可能遇到的各种操作,因此它也提供了各种各样的命令来为这些操作提供便利。

8.4.1 显示RMAN默认配置——SHOW命令

  在RMAN中有一系列的默认配置,这些配置决定了备份和恢复时的一些默认选项(此节内容枯燥,眼神不好的同学请自觉跳过),DBA可以通过 SHOW 命令来显示当前的配置参数。例如:
    RMAN>  SHOW ALL;
    RMAN configuration parameters are:
    CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
    CONFIGURE BACKUP OPTIMIZATION OFF; # default
    CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
    CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
    CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO  ' %F ' ; # default
    CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
    CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
    CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
    CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT   'F:\ORACLE\BACKUP\BAK_%U ' ;
    CONFIGURE MAXSETSIZE TO UNLIMITED; # default
    CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
    CONFIGURE ENCRYPTION ALGORITHM  ' AES128 ' ; # default
    CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
    CONFIGURE SNAPSHOT CONTROLFILE NAME TO  'F:\ORACLE\PRODUCT\10.2.0\DB_2\DATABASE\SNCFJSSBOOK.ORA' ; # default
    RMAN>
  这其中的每一项配置都对应了不同的功能,关于这些配置的具体功能和使用方式,后面的小节会有详细的介绍。
    提示:配置项后面加了# default的表示该项为初始配置,未被修改过。
  SHOW 命令的使用也相当灵活,其后加上不同类型的配置参数,就可以显示不同类型的配置,例如:
    RMAN>  SHOW CONTROLFILE AUTOBACKUP;
    RMAN configuration parameters are:
    CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default

8.4.2   列出备份信息——LIST命令

  LIST 命令用来查看通过RMAN生成的备份集、备份镜像、归档文件等,这个命令使用也比较简单,用LIST+相应关键字即可,例如:
  • 列出数据库中所有的备份信息:
    RMAN> LIST BACKUP;
  • 列出所有备份的控制文件信息:
    RMAN> LIST BACKUP OF CONTROLFILE;
  • 列出指定数据文件的备份信息:
    RMAN> LIST BACKUP OF DATAFILE  ' F:\ORACLE\ORADATA\JSSBOOK\SCOTT_TBS01.DBF ' ;
  或
    RMAN> LIST BACKUP OF DATAFILE 5;
  注:DATAFILE序号可以通过动态性能视图 V$DATAFILE 或数据字典 DBA_DATA_FILES 中查询。
  • 列出所有备份的归档文件信息:
    RMAN> LIST BACKUP OF ARCHIVELOG ALL;
  • 列出指定表空间的备份信息:
    RMAN> LIST COPY OF TABLESPACE  ' SYSTEM ' ;
  • 列出某个设备上的所有信息:
    RMAN> LIST DEVICE TYPE DISK BACKUP;
  • 列出数据库当前所有归档:
    RMAN> LIST ARCHIVELOG ALL;
  • 列出所有无效备份:
    RMAN> LIST EXPIRED BACKUP;

8.4.3   删除备份——DELETE命令

  用于删除RMAN备份记录及相应的物理文件。当使用RMAN执行备份操作时,会在RMAN资料库(RMAN Repository)中生成RMAN备份记录,默认情况下RMAN备份记录会被存放在目标数据库的控制文件中,如果配置了恢复目录(Recovery  C atalog ),那么该备份记录也会被存放到恢复目录中。
  RMAN 中的DELETE命令就是用来删除记录(某些情况下并非删除记录,而是打上删除标记),以及这些记录关联的物理备份片段。
  • 删除过期备份。当使用RMAN命令执行备份操作时,RMAN会根据备份冗余策略确定备份是否过期。
    RMAN>  DELETE OBSOLETE;
  • 删除无效备份。首先执行 CROSSCHECK 命令核对备份集,如果发现备份无效(比如备份对应的数据文件损坏或丢失),RMAN会将该备份集标记为EXPIRED状态。要删除相应的备份记录,可以执行 DELETE EXPIRED BACKUP 命令:
    RMAN>  DELETE EXPIRED BACKUP;
  • 删除EXPIRED副本,如下所示:
    RMAN>  DELETE EXPIRED COPY;
  • 删除特定备份集,如下所示:
    RMAN>  DELETE BACKUPSET 19;
  • 删除特定备份片,如下所示:
    RMAN>  DELETE BACKUPPIECE  ' d:\backup\DEMO_19.bak ' ;
  • 删除所有备份集,如下所示:
    RMAN>  DELETE BACKUP;
  • 删除特定映像副本,如下所示:
    RMAN>  DELETE DATAFILE COPY  ' d:\backup\DEMO_19.bak ' ;
  • 删除所有映像副本,如下所示:
    RMAN>  DELETE COPY;
  • 在备份后删除输入对象,如下所示:
    RMAN>  BACKUP ARCHIVELOG ALL DELETE INPUT;
    RMAN>  DELETE BACKUPSET 22 FORMAT  =  'd:\backup\%u.bak'  DELETE INPUT;   
提示:什么是RMAN资料库(RMAN Repository)?
这是一个逻辑概念,指RMAN备份恢复需要用到的数据信息,如备份集路径、归档文件路径等。如果使用了恢复目录,则这部分数据保存于恢复目录中,否则只会保存在目标数据库的控制文件中。
=================================================


8.4.4 报表显示——REPORT命令

  REPORT 命令主要是用于当前备份信息的分析,如哪些备份已经过期,哪些文件该备份,哪些备份不可用,哪些备份可以删除之类的。
  REPORT 命令特别提供了一个SCHEMA关键字,可以用来查看数据库的模式信息(注意此模式非用户的模式哟),比如某个时间段的数据库结构,不过,使用这些功能的前提就是必须首先拥有足够的备份,不然使用REPORT命令得出的结果恐怕也满足不了你的需求啊。
  • 查看7天前数据库的模式:
    RMAN> REPORT SCHEMA AT TIME  ' SYSDATE-7 ' ;
  注意,查看模式信息必须连接到catalog数据库。
  • 查看所有需要备份的文件:
    RMAN> REPORT NEED BACKUP; 
  • 查看指定表空间是否需要备份:
    RMAN> REPORT NEED BACKUP TABLESPACE SYSTEM;
  • 查看过期备份:
    RMAN> REPORT OBSOLETE;

8.4.5 执行检查——CROSSCHECK命令

  CROSSCHECK 命令用来检查备份或归档物理文件的状态,如果物理文件存在,并且控制文件(或恢复目录)中有匹配记录,则标记该对象的状态为 AVAILABLE (有效),如果文件已经不存在了,则标记该对象状态为 EXPIRED (无效)。
  CROSSCHECK 命令并不会主动删除文件(也确实没有这个功能),它只是修改控制文件中对应记录的状态标志,因此如果想删除那些 EXPIRED 的记录,还是得手动通过 DELETE EXPIRED 命令进行。
  检查所有归档文件:
    RMAN> CROSSCHECK ARCHIVELOG ALL;
    提示:
    当操作系统环境变量NLS_LANG指定为中文SIMPLIFIED CHINESE_CHINA时,执行CROSSCHECK命令检查归档,如果结果显示“对归档日志的验证失败”,但你又确定该文件存在,别着急,这其实是Oracle 10g版本中的一个bug,验证归档文件显示的结果是反着的,如果显示验证失败说明验证是成功的,反倒是提示验证成功的话你就要小心了,说明验证失败了。 这不是CROSSCHECK命令自身的问题,而是Oracle中英文翻译的问题,设置NLS_LANG为AMERICAN_AMERICA,在英文环境下检查显示一切正常。
  检查所有备份集:
    RMAN> CROSSCHECK BACKUP;

8.4.6 修改状态——CHANGE命令

  CHANGE 命令可以用来修改备份文件或归档文件的状态,不是指物理文件,而是这些文件在控制文件(或恢复目录)中对应记录的状态,状态有两种: AVAILABLE (可用)和 UNAVAILABLE (不可用)。
  例如,修改指定备份集状态为 UNAVAILABLE :
    RMAN> CHANGE BACKUPSET  n  UNAVAILABLE;
  注意,n 为备份集序号,指定的备份集必须确实存在,不然执行会报错。
  修改指定表空间的备份集为 UNAVAILABLE :
    RMAN> CHANGE BACKUP OF TABLESPACE USERS UNAVAILABLE;
  修改指定归档文件状态为 UNAVAILABLE :
    RMAN>  CHANGE ARCHIVELOG LOGSEQ =n  UNAVAILABLE;
  提示,这里的n为归档文件序号,可以通过 LIST ARCHIVELOG ALL 或查询 V$ARCHIVED_LOG 获取。当然你也可以指定归档文件详细路径。
  如果将指定对象状态修改为可用,执行上述命令时将关键字 UNAVAILABLE 改为 AVAILABLE 即可,这里不做演示了。
  另外,与CROSSCHECK命令不同,CHANGE命令附带了 DELETE 子句,配合使用能够在修改记录状态的同时直接删除物理文件,功能那是相当彪悍,例如,删除某个归档文件:
    RMAN>  CHANGE ARCHIVELOG LOGSEQ =n  DELETE ;
  又见到n,这个n是指啥俺先不说,让你猜,猜对了俺就告诉你。

8.4.7 综述

  前面介绍了很多命令(即使介绍的几个也没有完全展开,只介绍了该命令的一些常用功能),其实RMAN中的命令远不止这几个(最最重要的BACKUP命令和RESTORE命令都没介绍哪,没错,俺是成心的),可调用参数也远不止这些。你是不是已经觉着命令太多,而且每个命令又有太多调用参数,完全记不住?老实说,俺也记不全,不过俺有超级必杀技,命令再多也不怕。悄悄告诉你,俺的秘技就是完全不用记,别倒别倒,俺不准备教你学太极,俺刚才的话还没说完。俺的意思是说,记不住不要紧,只要注意看RMAN的提示信息就好了。
  比如想查看已经备份的归档,只记得要用LIST命令查看,后面应该加什么参数全忘了,没关系,那就先执行LIST命令好了:
    RMAN> LIST;
    RMAN-01009: syntax error: found ";": expecting one of: " all, archivelog, backup, backuppiece, backupset, backed, completed, copy, controlfilecopy, datafilecopy, device, expired, global, incarnation, like, proxy, recoverable, script, tag "
  你看,返回了一堆的信息,提示你语法错误,只能支持上述加粗显示的那些关键字。
  根据提示信息,隐约记得应该是BACKUP关键字,那就敲上BACKUP试试看:
    RMAN> LIST BACKUP OF;
    RMAN-01009: syntax error: found ";": expecting one of: " archivelog, controlfile, database, datafile, spfile, tablespace "
  哈哈,又报错了啊, en ,提示越来越清楚了,加参数 ARCHIVELOG 再试试:
    RMAN> LIST BACKUP OF ARCHIVELOG ;
    RMAN-01009: syntax error: found ";": expecting one of: " all, from, high, like, logseq, low, scn, sequence, time, until "
  OK ,基本明了,我们的目的是要查看所有备份的归档,最后再加参数ALL就好了:
    RMAN> LIST BACKUP OF ARCHIVELOG ALL;
    ...
  结果显示出来了吧,目标实现,竣工!
  如果你连RMAN中有哪些命令都忘记了,没关系,随便输入个字母再按回车键试试:
    RMAN-01009: syntax error: found "identifier": expecting one of: "allocate, alter, backup, beginline, blockrecover, catalog, change, connect, copy, convert, create, crosscheck, configure, duplicate, debug, delete, drop, exit, endinline, flashback, host, {, library, list, mount, open, print, quit, recover, register, release, replace, report, renormalize, reset, restore, resync, rman, run, rpctest, set, setlimit, sql, switch, spool, startup, shutdown, send, show, test, transport, upgrade, unregister, validate"
  虽然又报出了RMAN-01009错误,但是你看,RMAN中支持的命令是不是也都列出来了呢?这个示例告诉我们,出错也不全是坏事哟。嘿嘿,自己躲墙角偷偷乐去吧,旁人俺都不告诉他的。
  不过如果次次输入都报错就显得太不专业了,因此偷偷用就好,如果你的工作时刻被领导关注着,那俺还是建议你务必要牢记一些常用命令。

No comments:

Post a Comment