常用的一些rman备份恢复命令 [转帖]_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3885 | 回复: 0   主题: 常用的一些rman备份恢复命令 [转帖]        下一篇 
Gavin
注册用户
等级:少校
经验:878
发帖:130
精华:1
注册:2011-7-21
状态:离线
发送短消息息给Gavin 加好友    发送短消息息给Gavin 发消息
发表于: IP:您无权察看 2011-8-8 9:36:10 | [全部帖] [楼主帖] 楼主

转自:http://www.jiagulun.com/thread-76-1-4.html

Oracle的官方文档中有rman命令的比较完整的说明,我们可以参考。下面是一些常用的命令的使用例子:

Rman常用命令:
一、RMAN设置
1.显示RMAN默认配置
Rman中可以利用show命令来显示当前的配置参数。例如,通过SHOW ALL显示当前所有的配置。

RMAN> show all;


RMAN 配置参数为:

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'd:/backup/%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'F:\ORAHOME1\DATABASE\SNCFJSSWEB.ORA'; #
default
RMAN>


注:配置项后面跟了# default的表示该项仍是初始配置,未被修改过。
该命令使用也相当灵活,其后跟上不同的类型的配置参数,即可以显示不同类型的配置,如:

SHOW CHANNEL;
SHOW DEVICE TYPE;
SHOW DEFAULT DEVICE TYPE;


2.建立恢复目录:
第一步,在目录数据库中创建恢复目录所用表空间:

SQL> create tablespace rman_ts datafile 'd:\Oracle\oradata\rman\rman_ts.dbf' size 20M;


第二步,在目录数据库中创建RMAN 用户并授权:

SQL> create user rman identified by rman default tablespace rman_ts temporary tablespace temp quota unlimited on rman_ts;


用户已创建。

SQL> grant recovery_catalog_owner connect, resource to rman ;


授权成功。
第三步,在目录数据库中创建恢复目录

C:\>rman catalog rman/rman


恢复管理器:版本8.1.6.0.0 - Production
RMAN-06008:连接到恢复目录数据库
RMAN-06428:未安装恢复目录

RMAN>create catalog tablespace rman_ts;


RMAN-06431:恢复目录已创建
2. 启动RMAN
2.1.使用不带恢复目录的RMAN
设置目标数据库的 Oracle_SID ,执行:

oracle@myserve:~$ rman target /


2.2.使用带恢复目录的RMAN

oracle@myserve:~$ rman target / catalog rman/rman


2.3.在恢复目录中注册数据库:

RMAN> register database;


.注销目标数据库
为了能注销数据库,需要获得数据库的标识码(DB_ID)和数据库键值(DB_KEY)。其中连接目标数据库时将会获得DB_ID
连接到目标数据库,查询db表:

SQL> select * from db;
DB_KEY DB_ID CURR_DBINC_KEY
---------- ---------- --------------
1 3021445076 2
SQL> execute dbms_rcvcat.unregisterdatabase(1,3021445076);


PL/SQL 过程已成功完成。
3.使用rman备份数据库:
在指定备份片的文件名时可以使用以下匹配符:
%c:当生成多重备份时,用于指定备份片的副本号
%d:用于指定数据库名
%e:用于指定归档日志的序列号
%p:用于指定在备份集内备份片的编号
%s:用于指定备份集的编号
%n:用于指定表空间的名称
%f:用于指定绝对文件号
为了防止建立备份集错误匹配符%s是必顺的;如果要建立多个备份片文件,则匹配符%p是必顺的;如果要建立多个备份片副本,则匹配符%c是必顺的.

完全数据库备份集 backup database
一至性备份:

RMAN>shutdown immediate
RMAN>startup mount
RMAN>backup database format=’/opt/oracle/rmanbak/%d_%s.dbf’;
RMAN>alter database open;
RMAN>sql ‘alter system archive log current’


非一至性备份(在open状态下):

RMAN>backup database format=’/opt/oracle/rmanbak/%d_%s.dbf’;
RMAN>sql ‘alter system archive log current’;


免除表空间:

RMAN>configure exclude for tablespace ts_name; //设定在备份数据库的时候排除ts_name;
RMAN>backup database format=’/opt/oracle/rmanbak/%d_%s.dbf’;
RMAN>sql ‘alter system archive log current’;


查看数据库备份:

RMAN>list backup of database;


表空间备份集(只适用于archivelog):

RMAN>backup tablespace ts_name format=’/opt/oracle/rmanbak/%n_%s.pdf’;


查看表空间备份:

RMAN>list backup of tablespace taplespace_name;


数据文件备份集
查询表空间对应的数据文件及其序号

Select file_name,file_id,tablespace_name from dba_data_file;


备份数据文件

RMAN>backup datafile 5 format=’/opt/oracle/rmanbak/%n_%f_%s.dbf’;


查看指定数据文件的备份

RMAN>LIST BACKUP OF DATAFILE n;
RMAN>LIST BACKUP OF DATAFILE '/opt/oracle/rmanbak/JWEB.ORA';


控制文件备份集
备份当前控制文件

RMAN>backup current controlfile format=’/opt/oracle/rmanbak/%d_%s.ctl


在备份其它数据文件时,同时备份控制文件

RMAN>backup datafile 5 format=’/opt/oracle/rmanbak/%n_%f_%s.dbf’
2>include current controlfile;


在备份时自动备份控制文件

RMAN>configure controlfile autobackup on;


如果要查看备份的控制文件,可以通过:

RMAN>list backup of controlfile;


备份spfile

RMAN>backup spfile format=’/opt/oracle/rmanbak/%d_%s.par’;


备份规档日志:
备份全部的规档日志:

RMAN>backup archivelog all


2、在BACKUP过程中利用PLUS ARCHIVELOG参数备份,例如:

RMAN>backup database plus archivelog


则在备份数据库的同时自动对所有归档文件进行备份。这种方式与上种有什么区别呢,区别太明显了,BACKUP.....PLUS ARCHIVELOG命令在备份过程中会依次执行下列步骤:
1>.运行ALTER SYSTEM ARCHIVE LOG CURRENT语句对当前redolog进行归档。
2>.执行BACKUP ARCHIVELOG ALL命令备份所有已归档日志。
3>.执行BACKUP命令对指定项进行备份。
4>.再次运行ALTER SYSTEM ARCHIVE LOG CURRENT对当前redolog归档。
5>.对新生成的尚未备份的归档文件进行备份。
查看规档日志备份:

RMAN>list backup of archivelog all;


显示备份信息:
视图:
V$ARCHIVED_LOG:显示所有归档日志映像副本的信息

SQL>col name format a45;
SQL>select sequence#,first_change# from v$archived_log
2 where status=’A’;


V$BACKUP_DATAFILE:用于显示控制文件和数据文件的备份信息

V$BACKUP_PIECE:
SQL>select a.file#,b.handle,a.blocks*block_size byte
2 from v$backup_datafile a,v$backup_piece b
3 where a.set_stamp=b.set_stamp and a.status=’a’


V$BACKUP_REDOLOG显示归档日志备份集的信息,每个规档日志备份集可以包含一个或多个归档日志。

SQL>select distinct a.handle,b.sequence#,b.first_change#,b.blocks
2 from v$backup_piece a,v$backup_redolog b
3 where a.set_stamp=b.set_stamp and a.status=’a’


V$BACKUP_CORRUPTION:显示在执行BACKUP命令时所检测到的损坏数据块信息。

SQL>select file#,block#,blocks,marked_corrupt
2 from v$backup_corruption;


删除备份:

1、删除陈旧备份
当使用RMAN执行备份操作时,RMAN会根据备份冗余策略确定陈旧备份。

RMAN> delete obsolete;


2、删除EXPIRED备份
执行crosscheck命令核对备份集,那么会将该备份集标记为EXPIRED状态。为了删除相应的备份记录,可以执行delete expired backup命令。

RMAN> delete expired backup;


3、删除EXPIRED副本

RMAN> delete expired copy;


4、删除特定备份集

RMAN> delete backupset 19;


5、删除特定备份片

RMAN> delete backuppiece 'd:\backup\DEMO_19.bak';


6、删除所有备份集

RMAN> delete backup;


7、删除特定映像副本

RMAN> delete datafilecopy 'd:\backup\DEMO_19.bak';


8、删除所有映像副本

RMAN> delete copy;


9、在备份后删除输入对象

RMAN> delete archivelog all delete input;
RMAN> delete backupset 22 format = ''d:\backup\%u.bak'' delete input;


RMAN恢复
RMAN完全恢复是指当数据文件出现介质失败时,使用RESTORE命令转储数据文件备份,并使用RECOVER命令将数据文件恢复到失败点的状态.
RMAN不完全恢复: 是指当数据文件出现介质失败时,使用RESTORE命令转储数据文件备份,并使用RECOVER命令将数据库恢复到备份点与失败时刻的状态.

恢复数据库
V$RECOVER_FILE可以确定需要恢复的数据文件

SQL>SELECT file#,error from v$recover_file;


所有数据文件被误删除

$rman target / catalog rman/rman
RMAN>STARTUP FORCE MOUNT
RMAN>run{
      2>restore database;
      3>recover database;
      4>sql ‘alter database open’;
5>}


数据文件所在磁盘出现硬件故障
磁盘故障数据文件将不能被转储到原位置,必顺将数据文件转储到其他磁盘

RMAN>run{
      2>startup force mount;
      2>set newname for datafile 1 to ‘/opt/datafile/system01.pdf’;
      3> .
      4> //指定数据文件新位置
      5>set newname for datafile 6 to ‘/opt/datafile/sdl.pdf’
      6>restore database
      7>switch datafile all; //改变控制文件所记载的数据文件位置和名称
      8>recover database;
      9>sql ‘alter database open’
10>}
RMAN>report schema; //恢复后查看数据文件新位置


恢复表空间数据文件
示例:SYSTEM表空间的数据文件被删除

RMAN>run{
      2>startup force mount;
      3>restore datafile 1;
      4>recover datafile 1;
5>sql ‘alter database open’;}


示例:在SYSTEM表空间数据文件所在磁盘出现故障

RMAN>run{
      2>startup force mount
      3>set name for datafile 1 to ‘/opt/datafile/system01.dbf’ //设置表空间文件新位置
      4>restore datafile 1; //转储数据文件
      5>.switech datafile 1;
      6>recover datafile 1;
7>sql ‘alter database open’;}


在open状态下恢复关闭后损坏的数据文件
示例:数据文件被误删除

RMAN>run{
2>startup force mount;
3>sql ‘alter database datafile 4 offline’;//脱机损坏的数据文件
4>sql ‘alter database open’;//打开数据库
5>restore datafile 4;//转储数据文件
6>recover datafile 4;//恢复数据文件
7>sql ‘alter database datafile 4 online’;//联机恢复后的数据文件}


示例2:数据文件所在磁盘出现损坏

RMAN>run{
2>startup force mount;
3>sql ‘alter database datafile 4 offline’;//脱机损坏的数据文件
4>sql ‘alter database open’;//打开数据库
5>set newname for datafile 4 to ‘/opt/datafile/user01.pdf’;//指定恢复位置
5>restore datafile 4;//转储数据文件
6>recover datafile 4;//恢复数据文件
7>sql ‘alter database datafile 4 online’;//联机恢复后的数据文件}


恢复表空间:
示例:表空间的数据文件被误删除

RMAN>run{
      2>sql ‘alter tablespace users offline for recover’; //脱机表空间
      3>restore tablespace user;
      4>recover tablespace user;
5>sql ‘alter tablespace users online’;}


示例:表空间所在磁盘出现磁盘故障

RMAN>run{
      2>sql ‘alter tablespace users offline for recover’; //脱机表空间
      3>set newname for datafile 4 to ‘/opt/datafile /user01.dbf’;
      4>restore tablespace user;
      5>switch datafile all;
      6>recover tablespace user;
5>sql ‘alter tablespace users online’;}


数据块介质恢复
数据块错误会出现以下错误:

SQL>SELECT * FROM SCOTT.CUSTOMERS;
ORA-01578:ORACLE DATA BLOCK CORRUPTED (FILE #5,BLOCK #21)
ORA-01110:data file 5 :‘/opt/oracle/oradata/mydb/sdl.dbf’
RMAN>BLOCKRECOVER DEVICE TYPE DISK
2>DATAFILE 5 BLOCK 21,48,128;


不完全恢复
基于时间恢复:

$export nls_date_format=’yyyy-mm-dd hh24:mi:ss’ //指定日期格式
RMAN>run{
      2>startup force mount; //挂载数据库
      3>set until time=’2007-7-26 20:49:00’; //恢复时间点
      4>restore database; //转储数据文件
      5>recover database; //根据时间点恢复数据库
      6>sql ‘alter database open resetlogs’;//打开数据库重建redolog文件
7>}


基于SCN
确定恢复的SCN

SQL>SELECT CURRENT_SCN FROM V$DATABASE;
RMAN>run{
      2>startup force mount;
      3>set until scn=n; //设置还原点SCN
      4>restore database;
      5>recover database;
      6>sql ‘alter database open resetlogs’;
7>}


基于日志号:
当不能定位日志号的归档日志时会出现以下错误:

Rman-06025:no backup of log thread 1 seq 6 lowscn 531976 found to restore
RMAN>run{
      2>startup force mount;
      3>set until sequence=n; //日志号通常为不能定位的日志号
      4>restore database;
      5>recover database;
      6>sql ‘alter database open resetlogs’;
7>}


基于备份控制文件:
当误删的表空间或者数据库有的控制文件损坏时可以使用这种方法

$set nls_date_format=’yyyy-mm-dd hh24:mi:ss’;
$rman target / catalog rman/rman
RMAN>startup force nomount
RMAN>set dbid=3286265633;
RMAN>restore controlfile from autobackup maxseq 6;
RMAN>alter database mount;
RMAN>run {
      2>set until time=’2007-7-26 21:07:00’
      3>restore database;
      4>recover database;
      5>sql ‘alter database open resetlogs’;
6>}


不完全恢复后建议删除早期的所有备份并重新备份

RMAN>run{
      2>delete noprompt backup;
      3>delete noprompt copy;
      4>backup database format=’/opt/ora_bak/%d_%s.pdf’;
5>sql ‘alter system archive log current’;}


RMAN命令简解

1 列出场景号 

RMAN>list incarnation;


2 列出备份

 2.1概述可用的备份    RMAN>list backup summary;
               B 表示 backup
               F 表示 FULL
               A 表示 archive log
               0 1 表示 incremental backup
               S 说明备份状态 (A AVAILABLE   X EXPIRED )

  2.2按备份类型列出备份  RMAN>list backup by file;
               按照 数据文件备份,归档日志备份,控制文件备份,服务器参数文件备份 列出

  2.3列出详细备份     RMAN>list backup;

  2.4列出过期备份     RMAN>list expired backup;

  2.5列出表空间和数据文件备份
              list backup of tablespace 和list backup of datafile 输出和list backup 相似
               如:list backup of tablespace user_tbs;
                 list backup of datafile 3;

  2.6列出归档日志备份   RMAN>list archivelog all;      简要信息
    RMAN>list backup of archivelog all; 详细信息

  2.7列出控制文件和服务器参数文件
               RMAN>list backup of controlfile;
               RMAN>list backup of spfile;

  =====================================================
  =====================================================
  RMAN 的 report命令

  1. 报告最近没有被备份的数据文件
    RMAN>report need backup days=3;

  2. 报告备份冗余或恢复窗口
    RMAN>report need backup redundancy=2;
    RMAN>report need backup recovery window of 2 days;

  3. 报告数据文件的不可恢复操作
    RMAN>report unrecoverable;

  4. 报告数据库模式
    RMAN>report schema;

  5. 报告丢弃的备份
    如果使用了保存策略,备份会标记为丢弃状态  RMAN>report obsolete; 删除丢弃状态备份RMAN>delete obsolete;

  =====================================================
  =====================================================
  RMAN的crosscheck 命令

  1 备份集有两种状态A(Available,RMAN认为该项存在于备份介质上)X(Expired,备份存在于控制文件或恢复目录中,但是并没有物理存在于备份介质上)

  2 crosscheck 的目的是检查RMAN 的目录以及物理文件,如果物理文件不存在于介质上,将标记为Expired。如果物理文件存在,将维持Available。如果原先标记为Expired 的备份集再次存在于备份介质上(如恢复了损坏的磁盘驱动器后),crosscheck将把状态重新从Expired标记回Available。

  3 crosscheck 输出分两部分。第一部分列出确定存在于备份介质上的所有备份集片,第二部分列出不存在于备份介质上的备份集片,并将其标记为Expired。当设置备份保存策略后,一个备份过期,crosscheck之后标记为丢弃的备份状态依旧为availabel,要删除丢弃备份delete obsolete。

  4 示例:

 crosscheck backup
crosscheck backup of datafile 1;
crosscheck backup of tablespace users;
crosscheck backup of controfile;
crosscheck backup of controlfile;
crosscheck backup tag='SAT_BACKUP';
crosscheck backup completed after 'sysdate - 2'
crosscheck backup completed between 'sysdate - 5' and 'sysdate -2 '
crosscheck backup device type sbt;
crosscheck archivelog all;
crosscheck archivelog like '%ARC00012.001'
crosscheck archivelog from sequence 12;
crosscheck archivelog until sequence 522;
=====================================================
=====================================================


  RMAN 的validate 命令

  1 validate 命令验证备份集片是否能够被还原

  2 list backup summary; 得到了备份集得主键ID如40,然后validate backupset 40;

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


  RMAN 的备份保存策略以及change ,delete命令

  0.带delete参数的change 命令删除备份集,从备份介质,并且从控制文件和恢复目录中删除。

 change backupset 117,118 delete;
change backuppiece 1304 delete;
change archivelog until logseq =544 delete;


  1.两类策略:恢复窗口备份保存策略(recovery windows backup retension policy) 基于时间
        备份冗余备份保存策略(backup redundancy backup retension policy) 基于备份的数量

   两类策略互相排斥

  2.即使使用了备份保存策略,备份到期并不删除,只是在RMAN目录中标记为丢弃,看到的状态依旧为available;
   要查看标记为丢弃的备份 report obsolete,只有使用delete obsolete才真正物理删除。

  3.configure retension policy to recovery window of 7 days;

 configure retension policy to redundancy 3;


   显示结果 show all;

  4.查看到期丢弃的备份时,可能需要手工保存一些备份 ,可以使用change 命令带keep 参数,使用这个命令后,那些被修改的备份将被认为是个long-term backup,不在受保存策略影响也就是说delete obsolete 也不删除。

  5.要使备份时候不受保存策略影响 ,使���带keep参数的backup 命令

 backup database keep forever;
backup database keep 5 days;


  6.change 命令功能

    可以修改备份为永久保存并将以及该备份的相关的日志保存下来,保证总能将备份恢复到当前时间点

 change backupset 31 keep forever logs;


    可以设置备份丢弃的新日期 ,将备份在多保存7 天,7 天后将删除

 change backupset 32 keep until time 'sysdata 7' logs;


  7.change 可以将备份集设置为unavailable

 change backupset 33 unavailable;


    标记为unavailable状态的备份集并不参与crosscheck;

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


  恢复目录的记录删除

  1. $ORACLE_HOME/rdbms/admin/prgrmanc.sql 脚本定期删除恢复目录中具有DELETED状态的记录

  2. 要删除旧的对应物记录incarnation.必须从DBINC 表中删除这些对应物,使用RC_DATABASE_INCARNATION 视图来确定要删除的对应物。记录要删除的每个对应物的DBINC_KEY
    随后启动SQL*Plus,执行delete from dbinc where dbinc_key=2;

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


  手工同步恢复目录

resync catalog;


  Oracle同步恢复目录的时候,首先创建快照控制文件,然后比较这个文件和恢复目录,完成后,Oracle 更新恢复目录,使恢复目录和控制文件同步

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


  在RMAN 中存储脚本

  1,连接到目标数据库和恢复目录

 rman target / catalog rman/rman@rman9i


  2,创建脚本

 RMAN>create script my_bk_script
2>{backup database plus archivelog;}
create script my_bk_script


  3,打印脚本

 RMAN>print script my_bk_script;
printing stored scipt:my_bk_script
{backup database plus archivelog;}


  4,运行这个脚本,备份目标数据库

 RMAN>run {execute scipt my_bk_script;}


  5 删除脚本

 RMAN>delete script my_bk_script;
=====================================================
=====================================================


  archivelog模式下的完全恢复

step1:set oracle_sid=recover
rman target rman_backup/password
configure controlfile autobackup on;
step2:backup database plus archivelog delete input;
step3:shutdown immediate;


  step4:重命名所有的数据文件和控制文件,不重命名联机重做日志。

step5: startup nomount;
set DBID=****
restore controlfile from autobackup;
alter database mount;
step6: restore database;
recover database;
alter database open resetlogs;


  表空间恢复

sql"alter tablespace users offline";
sql"alter tablespace tools offline";
restore tablespace users,tools;
recover tablespace users,tools;
sql"alter tablespace users online";
sql"alter tablespace tools online";


  数据文件恢复

sql"alter database datafile 3 offline";
sql"alter database datafile 'd:oracleoradatausers01.dbf' offline";
restore datafile 3
restore datafile 'd:oracleoradatausers01.dbf';
recover datafile 3
recover datafile 'd:oracleoradatausers01.dbf';
sql"alter database datafile 3 online";
sql"alter database datafile 'd:oracleoradatausers01.dbf'online";
=====================================================
=====================================================


  切换当前的incarnation 回到resetlogs 前RESET DATABASE TO INCARNATION inc_key

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


  RMAN 高级恢复

  1 基于时间点的恢复

 run
{
      set until time "to_date('07/01/02 15:00:00','mm/dd/yy hh24:mi:ss')"'
      restore database;
      recover database;
      alter database open resetlogs;
}


  2 基于SCN 的恢复

 startup mount;
restore database UNTIL SCN 10000;
recover database UNTIL SCN 10000;
alter database open resetlogs;


  3 基于日志序列的恢复

 startup mount;
restore database UNTIL SEQUENCE 100 thread 1;
recover database UNTIL SEQUENCE 100 thread 1;
alter database open resetlogs; 




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论