RMAN 总结篇 3 - (转)

八,重中之重 恢复 哈哈,做备份不牛比,恢复也算小牛一下!!! ~:~
二个恢复命令:
recover: 数据库恢复 (应用所有或部分重做日志文件,恢复到崩溃状态或某个时间点)
restore: 数据库修复 (利用备份集的数据文件替换已经损坏的数据库文件,或恢复到一个新的位置(即移库),要读到catalog或控制文件信息,
从中选择最合适的备份进行修复操作,选择原则:a,选择最近的,b,优先选择镜像复制,其次才是备份集)
恢复步骤:
a, mount或open状态 (数据库级恢复,mount状态,数据文件表空间级恢复,open状态)
b, 完全于不完全恢复: 完全恢复就需要全部重做日志,不完全恢复就是使用部分日志文件,执行不完全恢复主要是通过执行restore/recover
命令时附加until 子句来限制恢复到的时间点
c, 打开数据库: 如果恢复时执行的是不完全恢复,打开时必须指定resetlogs;

rman如何选择备份集:
a.选择最近的可用的备份集,(如果没有指定until子句,则从备份的最近开始,如果指定了until,则从满足until的备份开始)
b,如果能找到,并且多个,则rman会选择一个最优的备份方案来恢复,(如先选择镜像,再才是备份集)
c,如果都没有,只能报错

1)完全介质恢复: (数据库崩了,有控制文件,spfile, 有以前创建的整个备份,归档文件和重做日志文件还在,则可以恢复整库到崩的那一刻:
归档模式下:

[@more@]

rman>startup mount
rman>restore database;
rman>recover database delete archivelog skip tablespace temp;
delete archivelog: 表示在完全恢复成功后自动删除那些恢复过程中产生的归档文件,不会删restore/recover之前的归档
skip tablespace; 跳过表空间,如临时表空间,即使不指定此参数,也会跳过,因为该表空间根本就没备份.
maxsize n: 磁盘紧张时,可以指定该参数,就是在恢复时参生的归档这个空间大小的指定,当到达该阀值就重写覆盖产生的归档文件.
rman>alter database open;

恢复到某个点
alter session set nls_date_format= 'YYYY-MM-DD HH24:MI:SS'
run
{
set until time '2009-08-21 23:59:59'
restore database
recover database
}

非归档模式下:
在执行restore命令前,首先需要恢复之前的控制文件,并且执行了restore 和 recover 命令后,必须以open resetlogs方式打开数据库

2),表空间和数据文件的恢复: mount 或 open状态,
表空间: 若表空间仍online,先offline
rman>sql 'alter tablespace asod offline immediate';
rman>restore tablesapce asod;
rman>recover tablespace asod;
rman>sql 'alter tablespace asod online';
注: 当然一次可以恢复几个表空间,以逗号隔开

数据文件
rman>sql 'alter database datafile 10 offline';
rman>restore datafile 10;
rman>recover datafile 10;
rman>sql 'alter database datafile 10 online';

若磁盘不了,移位置可以不?
run{
set newname for datafile 3 to 'f:newdbsysaux01.dbf';
restore dafafile 3;
switch datafile 3;
recover datafile 3;
}
若整个库挪目录,你能移动么?神那,救救我吧!!!

3), 归档日志恢复
原因:如果仅仅是为了在恢复数据文件后应用归档文件,那并不需要手动对归档文件进行恢复,rman会在recover的时候
自动对适当的归档进行恢复
data guard环境,standby端丢失了部分归档,必须从primary端重新获取,
或者需要用logminer对之前的归档进行分析
rman> restore archivelog sequence between 20 and 30; 恢复归档20~30之间的归档文件
rman> run {
set archivelog destination to 'f:archlog'; 默认恢复到log_archive_dest_1; 好事者要挪位置没办法呀!
restore archivelog sequence between 35 and 40;
}
当然同一个块中允话出现多个set archivelog destination to ,,,,; 这种人好无聊呀!

4)控制文件的恢复
a,从自动备份中恢复
rman> set DBID=1234567879;
rman> STARTUP NOMOUNT;
rman>restore controlfile from autobackup; & rman> restore controlfile to 'f:controlfile.ctl' from autobackup;
上面后边这句可以在open下用,但不要恢复到原本身路径中;
如果你在备份前手工改了control file的路径的话,你在恢复就得重设路径
rman> set controlfile autobackup format for device type disk to 'f:,,,';
rman> restore controlfile from autobackup

b,从备份集中恢复
rman>set dbid=....;
rman>startup nomount;
rman>restore controlfile from 'f:...'; 指定控制文件所在备份片段的详细路径
恢复完后必须recover database;并且以open resetlogs方式打开数据库

5)参数文件的恢复
rman>set dbid=...
rman>startup nomount;
rman>restore spfile from autobackup;
或者
rman>restore spfile to '/tmp/spfileTEMP.ora' from autobackup; 或
rman>restore spfile to '/tmp/spfileTEMP.ORA' FROM '具体备份集路径';
注意,就算参数文件丢失,rman也可以启动到nomount状态,rman里面有一个默认配置可以让数据库启动到nomount,
而sqlplus 就不可以。

九,通过rman备份恢复数据库到其他服务器
实战一下吧,
源库: 192.168.1.205 instance name: prod
目标库: 192.168.1.204 instance name: prod 实例名必须一致,服务器可以不一样嘛。
二个库软件版本应该一致,目录结构应该一致,不一致恢复则要修改,你不嫌麻烦可以玩一下.
步骤:
1), 源库整库备份,包含控制文件,数据文件,归档文件件,非归档模式也可以,最好是nocatalog模式的备份,因为备份信息在控制文件
中嘛,等下好整! (如果是windows环境,当然把dbid 得记下来!) 传备份到目标库,这个备份的信息存放点要和源主机的存放点一样.
2),目标库,创建oracle serveices, linux/unix下,就是修改profile,把那些乱七八糟的环境变量整得跟源库一样。windows当然就得
借助ordim工具也设了。没用过你就查资料吧。
3), 目标库,初示化参数文件配置.这个好办嘛。把源库的初式化参数生成pfile,拷过来如需修改一下即完事,
4),目标库,恢复控制文件:
rman> startup noumount pfile='过来修改的那个文件呀';
rman> restore controlfile from ' 传过来的那个备份集路径及名称';
rman> alter databsase mount; 有控制文件就可以mount了嘛
5),恢复数据库
rman>restore databse; 有控制文件在,自然就会找到那个备份集,记得前面强调的拷过来的备份集为什么要和源库存放点一致,
明白原因了吗
6), recover database 就可以了

这样也可以! 强人呀!!! 用途在那里呢。我想想!!!!


首先是DEFAULT DEVICE TYPE参数是磁带还是磁盘,然后看磁带或者磁盘的话,分别对应下面的参数
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT_TAPE TO '%F'; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default


delete backupset 10 & delete noprompt backupset 10
对于不能删除的
RMAN-06207: 警告: 由于状态不匹配, 所以不能删除 4 对象 (对于 DISK 通道)。
RMAN-06208: 请用 CROSSCHECK 命令修正状态
不匹配对象的列表
==========================
对象类型 文件名/句柄
--------------- ---------------------------------------------------
Datafile Copy E:MEMARDAOUTPUTRDA_TMP_CONTROL_4140.TMP
Datafile Copy E:MEMARDAOUTPUTRDA_TMP_CONTROL_9584.TMP
Datafile Copy C:PROGRAM FILESCABRIGHTSTOR ARCSERVE BACKUP AGENT FOR ORACLECONTROL.MISDB
Datafile Copy E:MEMARDAOUTPUTRDA_TMP_CONTROL_9388.TMP

rman target /
crosscheck copy;
delete obsolete;
随后需要在备份脚本中加入
crosscheck copy;
delete nopromote obsolete;

如果手动删除了备份,就可能造成备份记录清除不了,用以下命令
CROSSCHECK backup;
再清除就可以成功了

run {
configure retention policy to recovery window of 14 days;
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/rcmbackup/oracle/control_%F';
allocate channel c1 device type disk format '/rcmbackup/oracle/rman2_%T';
backup incremental level=2 database skip inaccessible
plus archivelog filesperset 20
delete all input;
release channel c1;
}
allocate channel for maintenance device type disk;
crosscheck backupset;
delete noprompt obsolete;

rcm
run {
configure retention policy to recovery window of 14 days;
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/rcmbackup/oracle/control_%F';
allocate channel c1 device type disk format '/rcmbackup/oracle/DB2_%T;
backup incremental level=0 database skip inaccessible
plus archivelog filesperset 20
delete all input;
release channel c1;
}
allocate channel for maintenance device type disk;
crosscheck backupset;
delete noprompt obsolete;

ERP
RUN {
ALLOCATE CHANNEL c1 TYPE disk;
ALLOCATE CHANNEL c2 TYPE disk;
BACKUP incremental level 1 database format '/rmanbackup/backup/erpdb0_%T';
RELEASE CHANNEL c1;
RELEASE CHANNEL c2;
ALLOCATE CHANNEL ch00 TYPE disk;
ALLOCATE CHANNEL ch01 TYPE disk;
BACKUP filesperset 20
FORMAT '/rmanbackup/backup/log_%T'
ARCHIVELOG ALL DELETE INPUT;
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
}

more tarrman.sh
#!/bin/sh
DATE=`date +%Y%m%d`;export DATE
FILEPATH=/rcmbackup/oracle; export FILEPATH
find $FILEPATH -type f -mtime -1 -exec tar cvf $DATE.tar {} ;

deltarrman.sh
#!/bin/sh
DATE=`date +%Y%m%d`;export DATE
FILEPATH=/rcmbackup/oracle; export FILEPATH
find /rcmbackup/oracle -name `date +%Y%m%d`.tar -exec rm -rf {} ;

转自:http://hi.baidu.com/risowangzz/blog/item/e6e637ef7086c62a62d09f85.html

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

转载于:http://blog.itpub.net/789833/viewspace-1038870/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值