近期研究备份和恢复卓有成效,正好对日志恢复有些生疏,看到EYGLE里有篇好文,先借过用用。
http://space.itpub.net/8334342/viewspace-523080
当数据库出现问题,但不需要restore只需recover时,发现要用到的archivelog已经备份并删除了,因为我们备份archivelog一般是采用delete input的,
4z9kV C@ s2t0这时先需要restore archivelog,然后才能做recover,下面介绍一下restore archivelog的用法:
restore archivelog后面可以跟的参数有"all, from, high, like, logseq, low, scn, sequence, time, until"
$d"~2o|A gz3\0现在举一列子说明:ITPUB个人空间Kxv#D'^DN
1.列出已经备份的archivelog
I'@ `{t}0list backup of archivelog all;
:kBP3gU(].yB02.预览恢复出程,但不真正恢复
@5Xtp4z0可以在你执行恢复前先看看恢复过程,也可以验证一下你的语法是否写对
8d6k5{@\)hY B0restore archivelog all preview; 即在你要执行的restore archivelog命令后加previewITPUB个人空间m8U P Cf;K/h
restore archivelog sequence 18 preview;ITPUB个人空间2i9W_%C:c
3.恢复指定时间范围的archivelog
`o#Cm e Mk.Z03.1 显示2008-08-13 10:00:00到2008-08-13 11:00:00之间的archivelogITPUB个人空间sqP8IG
list backup of archivelog time between "to_date('2008-08-13 10:00:00','yyyy-mm-dd hh24:mi:ss')" and "to_date('2008-08-13 11:00:00','yyyy-mm-dd hh24:mi:ss')";ITPUB个人空间w7VIK Zvj,n1q o*O
3.2 预览恢复2008-08-13 10:00:00到2008-08-13 11:00:00之间的archivelogITPUB个人空间3eP"q n,}4G8ZD3g
restore archivelog time between "to_date('2008-08-13 10:00:00','yyyy-mm-dd hh24:mi:ss')" and "to_date('2008-08-13 11::00','yyyy-mm-dd hh24:mi:ss')" preview;ITPUB个人空间#Q@6r'O yW.S
3.3 真正恢复2008-08-13 10:00:00到2008-08-13 11:00:00之间的archivelogITPUB个人空间Q9v+Fs]d}EYi;E5T
restore archivelog time between "to_date('2008-08-13 10:00:00','yyyy-mm-dd hh24:mi:ss')" and "to_date('2008-08-13 11::00','yyyy-mm-dd hh24:mi:ss')"ITPUB个人空间*xJ[m2mU%m
4.恢复指定的archivelog
/c Z#W.ci \As1g6r ~N Z0restore archivelog sequence 18; 恢复sequence为18的archivelog
*NLO:AU3k0yQ5Y05.restore archivelog like恢复模糊查询出来的archivelog,这个只能用于通过catalog的备份,用nocatalog的会报错
6H A `l{4s4W6Mi0restore archivelog like '%18%';
C o3j*f KO2d/B[6k;O06.恢复指定sequence范围的archivelog
:DZ5L5K+N{0restore archivelog from sequence 18 until sequence 20;
7Ir,Vs P xc0或restore archivelog low sequence 18 high sequence 20;ITPUB个人空间m } ~*Ib%X5mz
或restore archivelog low logseq 18 high logseq 20;
3y@*nPP2yk07.指定archivelog的恢复目的地,如你想把archivelog恢复到一个临时目录时有用,但这个必须包含在run{}里面才能用ITPUB个人空间#~2D4f5P awr
set archivelog destination to 'e:\temp';
以上基本上可以解决你恢复archivelog的需求,我是在10.2.0.4版本中测试通过的,欢迎大家补充,转载请说明出处.
---------------------------------------------ITPUB个人空间+|,SDL.brF
以下部分是在本人正式环境中遇到的实际情况,非转载:
}%|Q$G3w[c0备份日志中有以下内容:
A zZYi\0通道 t1: 正在指定备份集中的存档日志
#mf lj j[ lLg0i_0输入存档日志线程 =1 序列 =18070 记录 ID=35794 时间戳=671966051
eg/s&[#J9XTA0输入存档日志线程 =1 序列 =18071 记录 ID=35796 时间戳=671966351ITPUB个人空间3K xs(E y5Z4n?
输入存档日志线程 =1 序列 =18072 记录 ID=35798 时间戳=671966652ITPUB个人空间$w`S$T`2D @Z1e'r
输入存档日志线程 =1 序列 =18073 记录 ID=35800 时间戳=671966952
4Z~/_*TXl0输入存档日志线程 =1 序列 =18074 记录 ID=35802 时间戳=671967249
*R1t:\!AN nrh0输入存档日志线程 =1 序列 =18075 记录 ID=35804 时间戳=671967550
8p~].OC9Pd0输入存档日志线程 =1 序列 =18076 记录 ID=35806 时间戳=671967850
{;] a?M*R6jjX C0输入存档日志线程 =1 序列 =18077 记录 ID=35808 时间戳=671968151ITPUB个人空间g;BEG2c:j
输入存档日志线程 =1 序列 =18078 记录 ID=35810 时间戳=671968451ITPUB个人空间`.XDt6S @)c6a
5h*GI5i+W+u:R6g0单独恢复18071 到18076ITPUB个人空间'J N1g+C xHw l4`3q
rman> runITPUB个人空间5^J v*mYM'|jK3O+g+?
n*G jV2~ g0{ allocate channel t1 type 'sbt_tape' parms 'ENV=(tdpo_optfile=/usr/tivoli/tsm/client/oracle/bin64/tdpo.opt)'; ITPUB个人空间wkuw|-B\
restore archivelog from logseq 18071 until logseq 18076 ;
,Ym"ip\9CQ4M*n0release channel t1;
^(Tst B-Cs0}
ITPUB个人空间y9dn8O2|#V.w(M,yI
经过在线环境的实地测试,以上脚本可行