RMAN命令详解

来源:互联网 发布:酒店管理系统源码下载 编辑:程序博客网 时间:2024/05/22 07:59
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; 

删除示例: 
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; 
===================================================== 
===================================================== 
手工同步恢复目录 

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; 

4 数据文件所在磁盘出现硬件故障 
磁盘故障数据文件将不能被转储到原位置,必顺将数据文件转储到其他磁盘 
RMAN>run{ 
startup force mount; 
set newname for datafile 1 to '/opt/datafile/system_new01.pdf'; 
restore database; 
switch datafile all; 
recover database; 
sql 'alter database open'; 

RMAN>report schema; //恢复后查看数据文件新位置 

5 恢复表空间数据文件 
示例:SYSTEM表空间的数据文件被删除 
RMAN>run{ 
startup force mount; 
restore datafile 1; 
recover datafile 1; 
sql 'alter database open';} 

6 在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';//联机恢复后的数据文件} 

7 数据文件所在磁盘出现损坏 
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';//联机恢复后的数据文件} 

9 恢复表空间: 
示例:表空间的数据文件被误删除 
RMAN>run{ 
2>sql 'alter tablespace users offline for recover'; //脱机表空间 
3>restore tablespace user; 
4>recover tablespace user; 
5>sql 'alter tablespace users online';} 

10 示例:表空间所在磁盘出现磁盘故障 
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';} 

11 数据块介质恢复 
数据块错误会出现以下错误: 
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; 

12 不完全恢复 
基于时间恢复: 
$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>} 

13 基于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>} 

14 基于日志号: 
当不能定位日志号的归档日志时会出现以下错误: 
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>} 

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

$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>} 

16 不完全恢复后建议删除早期的所有备份并重新备份 
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';} 

存储格式参数: 
%a,活动ID 
%c,在多重备份中,备份片的拷贝数,最大256 
不是多重备份时,用于备份集为1,用于代理副本拷贝为0 
%d,数据库名 
%D,公历某月的日期(只有day部分),格式DD 
%e,归档日志序号 
%f,绝对文件号 
%F,由DBID(数据库ID),日月年,序号组成 
形式为c-IIIIIIIIII-YYYYMMDD-QQ,c为固定 
IIIIIIIIII表示DBID,连接RMAN时指定target,会显示DBID 
YYYYMMDD为生成备份时的公历时间,比如20081122 
QQ表示为16进制序号,00到FF 
%h,归档日志线程号 
%I,DBID 
%M,公历月份,格式MM 
%N,表空间名 
%n,数据库名,如果数据库名不满8字符,将在右边自动填充'x' 
比如,库名为test,结果将是testxxxx 
%p,备份集中的备份片号,从1开始,步进1 
Note: If you specify PROXY, then the %p variable must be included in the 
FORMAT string either explicitly or implicitly within %U. 
%s,备份集号,此号记录在控制文件中,每次备份会自动增加 
重建控制文件将会初始化为1 
%t,备份集时间戳,秒为单位 
%T,公历年月日,格式YYYYMMDD 
%u,8字符名称,利用备份集或副本拷贝号,备份生成时间,由系统通过某种算法得出 
%U,许多FORMAT的默认值,由系统生成的唯一名称,对于副本拷贝和备份集的含义不同 
对于备份集的备份片来说,等同于%u_%p_%c 
对于数据文件副本拷贝,等同data-D-%d_id-%I_TS-%N_FNO-%f_%u 
对于归档日志副本拷贝,等同arch-D_%d-id-%I_S-%e_T-%h_A-%a_%u 
对于控制文件副本拷贝,等同cf-D_%d-id-%I_%u 
%Y,公历年,格式YYYY 

%%,表示一个百分号字符'%' 



--------- switch datafile all;命令详解 

After the RESTORE command but before the RECOVER command in your RUN 
block, use a SWITCH command to update the control file with the new 
filenames of the datafiles. The SWITCH command is equivalent to the 
SQL statement ALTER DATABASE RENAME FILE. SWITCH DATAFILE ALL updates
 the control file to reflect the new names for all datafiles for 
 which a SET NEWNAME has been issued in the RUN block.


RUN
{
  SQL 'ALTER TABLESPACE users OFFLINE IMMEDIATE';
  SQL 'ALTER TABLESPACE tools OFFLINE IMMEDIATE';
  # specify the new location for each datafile
  SET NEWNAME FOR DATAFILE '/olddisk/users01.dbf' TO 
                           '/newdisk/users01.dbf';
  SET NEWNAME FOR DATAFILE '/olddisk/tools01.dbf' TO 
                           '/newdisk/tools01.dbf';
  # to restore to an ASM disk group named dgroup, use: 
  # SET NEWNAME FOR DATAFILE '/olddisk/trgt/tools01.dbf'
  #     TO '+dgroup';
  RESTORE TABLESPACE users, tools;
  SWITCH DATAFILE ALL;   # update control file with new filenames
  RECOVER TABLESPACE users, tools;
}


原创粉丝点击