ITPub博客

首页 > Linux操作系统 > Linux操作系统 > RMAN基础

RMAN基础

原创 Linux操作系统 作者:hjianping 时间:2011-04-24 14:10:23 0 删除 编辑

一、将数据库设置为归档模式
1、查看归档模式
select log_mode from v$database;
archive log list;

2、设置为归档模式
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;

3、RMAN命令
show all;  --查看rman配置参数
list backupset;  --查看备份集
list backupset summary;

crosscheck archivelog all; --检查已删除的归档日志,标记为EXPIRED状态
delete expired archivelog all;  --删除EXPIRED状态的归档日志

crosscheck backup; --检查过期备份,标记为EXPIRED状态
delete obsolete; --删除陈旧备份

delete expired backup; --删除EXPIRED备份
delete expired copy; --删除EXPIRED副本


delete backup;   --删除所有备份集
delete backupset backupset_no; --删除特定备份集
delete backuppiece 'd:\backup\DEMO_19.bak'; --删除特定备份片

report obsolete  --查看过期备份及归档日志
delete obsolete  --删除过期备份及归档日志

report schema;  --查看表空间信息

backup database format '/u01/backup/%d_%I_%T_%s';

删除7天之前的归档日志
delete archivelog all completed before 'sysdate-7';

删除从7天前到现在的归档日志
delete archivelog from time 'sysdate-1';

二、连接到RMAN
1、连接到目标数据库(不使用恢复目录)
rman target sys/password@ora10 nocatalog
or
rman nocatalog
connect target sys/password@ora10

2、连接到目标数据库和恢复目录数据库
rman target sys/password@ora10 catalog rman/rman@rcat
or
rman
connect target sys/password@ora10
connect catalog rman/rman@rcat

3、连接到目标数据库和辅助数据库
rman target sys/password@ora10 auxiliary sys/admin@aux
or
rman
connect target sys/password@ora10
connect auxiliary sys/admin@aux


三、RMAN命令
1、使用RMAN进行全备份
rman (nocatalog)
connect target /
backup database;

2、0级备份
rman (nocatalog)
connect target /
backup incremental level=0 database;

3、(+)备份archivlog
rman (nocatalog)
connect target /
backup database plus archivelog (delete input); --delete input 删除归档日志

4、备份控制文件
rman (nocatalog)
connect target /
configure controlfile autobackup on --(设置自动备份控制文件)

backup current controlfile;  --(只备份控制文件)
backup database include current controlfile;

5、备份表空间
rman (nocatalog)
connect target /
backup tablespace users;

6、自动备份:备份脚本 + 任务计划(crontab)
脚本bak0
run {
 allocate channel c1 type disk; --分配通道,disk磁盘上,sbt磁带上
  backup
  incremental level 0  --0级备份
  format "/.../inc_%u_%t"  --格式化备份集名称
 tag sunday_inc0  --标签为sunday_inc0
 database;
 release channel c1;
}

脚本bak1
run {
 allocate channel c1 type disk;
  backup
  incremental level 1
  format "/.../inc_%u_%t"
 tag monday_inc1
 database;
 release channel c1;
}
执行脚本
rman target / msglog=/.../bakl0.log cmdfile=/.../bak0

任务计划(crontab)
crontab -e -u oracle --在linux下为oracle用户创建任务计划
分  时  日  月  星期
45  23  *   *    0   rman target / msglog=/.../bakl0.log cmdfile=/.../bak0
45  23  *   *    1   rman target / msglog=/.../bakl1.log cmdfile=/.../bak1
45  23  *   *    2   rman target / msglog=/.../bakl1.log cmdfile=/.../bak1

service crond restart --重起服务


四、RMAN NOCATALOG恢复
1、口令文件丢失
orapwd file=orapwsid password=password entries=5 --(entries=5指特权用户数)

2、spfile丢失(connected to target database: ORA10 (DBID=670852538))
rman target /
startup nomount;
set dbid ...;
restore spfile from autobackup;
or
restore spfile from "/.../....bkp"; --若自动找不到,指定备份的spfile或控制文件
shutdown immediate;
set dbid ...;    --若startup失败
startup;

3、控制文件丢失
sqlplus /nolog
conn /as sysdba
shutdown abort; 
exit;
rman target /
startup nomount;
restore controlfile from autobackup;
or
restore controlfile from "/.../....bkp"; --若自动找不到,指定备份的控制文件
alter database mount;
recover database;
alter database open resetlogs;

4、重做日志文件丢失
sqlplus /nolog
conn /as sysdba
shutdown immediate;
startup mount;
recover database until cancel;
alter database open resetlogs;

5、数据文件丢失
rman target /
report schema;
sql "alter database datafile 3 offline";
restore datafile 3;
recover datafile 3;
sql "alter database datafile 3 online";

6、表空间丢失
rman target /
sql "alter tablespace user offline (immediate)";
restore tablespace users;
recover tablespace users;
sql "alter tablespace users online";


五、RMAN完全恢复
1、恢复数据库,使用select * from v$recover_file;查看要恢复的数据文件。
rman target sys/password@ora10 nocatalog
startup force mount
run {
 restore database;
 recover database;
 sql 'alter database open';
    }
若数据文件磁盘出现硬件故障,则
run{
 set newname for datafile 1 to 'd:\ora10_data\system01.dbf';
 ...
 restore database;
 switch datafile all;
 recover database;
 sql 'alter database open';
    }
查看数据库新的物理方案
report schema;


2、恢复system表空间的数据文件
rman target sys/password@ora10 nocatalog
startup force mount
run {
 restore datafile 1;
 recover datafile 1;
 sql 'alter database open';
    }

若数据文件磁盘出现硬件故障,则
run{
 set newname for datafile 1 to 'd:\ora10_data\system01.dbf';
 restore datafile 1;
 switch datafile 1;
 recover datafile 1;
 sql 'alter database open';
    }


3、在open状态下恢复关闭后意外丢失的数据文件
rman target sys/password@ora10 nocatalog
startup force mount
run {
 sql 'alter database datafile 2 offline';
 sql 'alter database open';
 restore datafile 2;
 recover datafile 2;
 sql 'alter database datafile 2 online';
    }

若数据文件磁盘出现硬件故障,则
run{
 sql 'alter database datafile 2 offline';
 sql 'alter database open';
 set newname for datafile 2 to 'd:\ora10_data\users01.dbf';
 restore datafile 2;
 switch datafile 2;
 recover datafile 2;
 sql 'alter database datafile 2 online';
     }


4、在open状态下恢复打开时意外丢失的数据文件(数据库处于open状态)
rman target sys/password@ora10 nocatalog
run {
 sql 'alter database datafile 2 offline';
 restore datafile 2;
 recover datafile 2;
 sql 'alter database datafile 2 online';
     }

若数据文件磁盘出现硬件故障,则
run{
 sql 'alter database datafile 2 offline';
 set newname for datafile 2 to 'd:\ora10_data\users01.dbf';
 restore datafile 2;
 switch datafile 2;
 recover datafile 2;
 sql 'alter database datafile 2 online';
     }


5、在open状态下恢复未备份的数据文件
rman target sys/password@ora10 nocatalog
startup force mount
run {
 sql 'alter database datafile 3 offline';
 sql 'alter database open';
 restore datafile 3;
 recover datafile 3;
 sql 'alter database datafile 3 online';
     }

若数据文件磁盘出现硬件故障,则
run{
 sql 'alter database datafile 3 offline';
 sql 'alter database open';
 set newname for datafile 3 to 'd:\ora10_data\users02.dbf';
 restore datafile 3;
 switch datafile 3;
 recover datafile 3;
 sql 'alter database datafile 3 online';
     }


6、恢复表空间(数据库处于open状态)
rman target sys/password@ora10 nocatalog
run{
 sql 'alter tablespace users offline for recover';
 restore tablespace users;
 recover tablespace users;
 sql 'alter tablespace users online';
    }

若表空间数据文件磁盘出现硬件故障,则
run{
 sql 'alter tablespace users offline for recover';
 set newname for datafile 3 to 'd:\ora10_data\users02.dbf';
 restore tablespace users;
 switch datafile all;
 recover tablespace users;
 sql 'alter tablespace users online';
    }

7、数据块介质恢复
blockrecover device type disk datafile n block m;


六、RMAN不完全恢复
 不完全恢复是当数据库出现介质失败或用户误操作时将数据库恢复到备份点与失败点之间某个时刻的状态,只适用于archivelog模式,且只能在mount状态下完成。

1、基于时间恢复
rman target sys/password@ora10 nocatalog
run {
 startup force mount;
 sql 'alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"';
 set until time='2011-04-03 08:02:00';
 restore database;
 recover database;
 sql 'alter database open resetlogs';
    }
当用resetlogs选项打开数据库之后,会恢复日志序列号,并生成新的数据库副本。在10G之前,在不完全恢复后必须重新备份数据库;从10G开始,ORACLE提供了安全机制可以确保归

档日志不会被覆盖,从而使得在恢复数据库时可以使用早期数据库副本的备份。但在执行了不完全恢复后,建议删除早期所有备份,并从新备份数据库。
run{
 delete noprompt backup;
 delete noprompt copy;
 backup database format='d:\backup\%d_%s.bak';
 sql 'alter system archive log current';
   }


2、 基于SCN恢复
select current_scn from v$database;

rman target sys/password@ora10 nocatalog
run {
 startup force mount;
 set until scn=511413;
 restore database;
 recover database;
 sql 'alter database open resetlogs';
    }

run{
 delete noprompt backup;
 delete noprompt copy;
 backup database format='d:\backup\%d_%s.bak';
 sql 'alter system archive log current';
   }

3、基于日志序列号恢复,当丢失归档日志或重做日志完全恢复失败时
select * from v$log;

rman target sys/password@ora10 nocatalog
run {
 startup force mount;
 set until sequence=6;
 restore database;
 recover database;
 sql 'alter database open resetlogs';
    }

run{
 delete noprompt backup;
 delete noprompt copy;
 backup database format='d:\backup\%d_%s.bak';
 sql 'alter system archive log current';
   }

4、基于备份控制文件恢复,是使用备份控制文件恢复数据库的过程。当误删除表空间或数据库所有控制文件全部损坏时

c:\>set nls_date_format=yyyy-mm-dd hh24:mi:ss
c:\>rman target sys/password@ora10 nocatalog
startup force nomount;
set dbid=3282656886;
restore controlfile from autobackup maxseq 6;
alter database mount;
run {
 set until time='2008-07-19 20:00:20';
 restore database;
 recover database;
 sql 'alter database open resetlogs';
    }

run{
 delete noprompt backup;
 delete noprompt copy;
 backup database format='d:\backup\%d_%s.bak';
 sql 'alter system archive log current';
   }

 

restore 是指在数据库mount 的模式下从备份还原数据文件到指定 的目录
而recover 是指在数据文件成功还原之后使用oracle 的归档日志和日志对数据文件进行恢复

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17012874/viewspace-693294/,如需转载,请注明出处,否则将追究法律责任。

上一篇: Oracle的索引
下一篇: RMAN Complete
请登录后发表评论 登录
全部评论

注册时间:2011-04-24

  • 博文量
    80
  • 访问量
    75414