一,块恢复:
1,坏块如何被察知?
通常是通过alert.log或者命令行的提示,由这些提示你可以知道坏块所在的文件号和块号。
2,从所有可得到的备份文件执行块恢复?
RMAN下执行blockrecover datafile X block y datafile X2 block y2 ...;
3,限定用于执行快恢复的备份文件。
RMAN下
从备份集恢复块:blockcover datafile x block y datafile x2 block y2 from backupset;
从数据文件镜像备份中恢复块:blockcover datafile x block y datafile x2 block y2 from datafilecopy;
通过特定tag恢复块:blockcover datafile x block y datafile x2 block y2 from tag='tagname';
从一个特定时间点以前的备份中恢复块:
(1),从7天以前的备份中恢复坏块:blockcover datafile x block y datafile x2 block y2 restore until 'sysdate-7';
(2),从特定SCN之前的备份中恢复坏块:blockcover datafile x block y datafile x2 block y2 restore until scn scn_number;
(3),从某日志序列号之前的备份中恢复坏块:blockcover datafile x block y datafile x2 block y2 restore until sequence sequence_number;
需要注意的一点是:如果你通过until的方式进行时间点限制的话,RMAN会在坏块上执行更多的恢复操作,因为在恢复阶段会scan特定时间点之前所有的log以得到坏块之前的所有改变,从而执行恢复。
二,v$database_block_corruption视图
通过执行backup或者backup ... validate命令,数据文件中的坏块都会标记,而v$database_block_corruption视图则记载了你上次运行backup或者backup ... validate之后被标记的所有坏块,一旦坏块被修复,则v$database_block_corruption中该块的相应记录会被自动删除。对于坏块的历史记录,则保存在v$backup_corruption和v$copy_corruption这2个视图中。要注意的是v$database_block_corruption保存的是你上次的备份结果中的坏块,而并不一定是被备份的数据文件中的坏块,如果数据文件中的坏块被修复而备份中的坏块没被修复,存在于v$database_block_corruption中的相应块的记录并不会被删除。
另外要注意的一点是:在执行备份的过程中一旦这次发现的坏块数超过了所设定的maxcorrupt,该次备份会失败。
下面讲解下如何恢复备份结果中的坏块:
1,通过查询v$database_block_corruption视图得到备份中坏块。
select * from v$database_blcok_corruption;
2,通过recover corruption list 命令执行恢复,如下假设已预先分配好通道的情况下,要将备份中的坏块恢复到1天前。
recover corruption list restore until 'sysdate-1';
------------------------------------------------------------------------------------------------------------
参数的学习
1,db_block_checksum
有3种取值:full,typical,off
要明白这个参数的作用,得先明白checksum的概念,checksum是通过计算某个数据块的所有字节而得出的一个数字值,存放在数据块的缓冲头中,oracle可以通过checksum值来得知由底层磁盘,存储系统,I/O系统造成的损坏。而db_block_checksum则决定dbwn在写入某块时是否计算该块的checksum值并保存到头部。在将该参数设置typical或者full的时候,数据库在读取块之前会检验该块的checksum值(疑问:检查该值干嘛?起什么作用?是根据该值来判断该块是否已经损坏吗?如果是通过该值来判断数据块是否损坏,假设没损坏那么肯定正常读数据,但损坏了的话系统会如何?仅仅是将该块已损坏的错误信息写入到alert.log吗?那么,如果将该参数的值设置为off的话,系统在读取用户表空间时是不会进行块的checksum检验的,那么当有一个坏块的情况下,系统会怎样呢?系统在db_block_checksum=off的情况下如何得知一个块是坏块呢?)在将该参数值设置为full时,那么在对该块中的值执行insert或者update之前会检验上一次的checksum值,并且insert或者update之后会重新计算checksum值。在该参数值为off时,只对system表空间的操作执行checksum检验,而对用户表空间的操作不会执行checksum检验。
full时会捕获内存中的块损坏,并阻止将其写入到物理块中。
开销:typical会造成1%-2%的开销,而full会造成4%-5%的开销,默认是typical。
为了兼容之前版本,允许true和false值,true即相当于typical,而false相当于off。
----------------------------------------------------------------------------------------------------
proxy copy是将备份备份到第三方介质,整个文件传输过程由第3方的介质管理器管理。?
image copy只能够存在与磁盘上,backupset可能存在与磁盘或磁带上。
image copy可以通过操作系统命令备份,备份后可以通过catalog将image copy加到repository,以便恢复时执行restore。
例如可以将一个复制的数据文件加入到repository中:catalog datafilecopy 'df_location';可以通过list datafilecopy all;查看所有的datafilecopy;
--------------------------------------------------------------------------------------------------
catalog命令的作用与用法:
catalog用于将一些原来不在repository中的文件加入到rman库中,可作用于归档日志,datafilecopy,controlfilecopy,backuppiece,但使用的过程中rman一定要连上目标数据库,且目标库要处于open或者Mount状态。
catalog命令的用法则如下所示:
datalog datafilecopy|controlfilecopy|backup piece|archivelog 'filename' ; normal
catalog start with 'file_prefix'; catalog all files with the same prefix
catalog datafilecopy 'filename' level=0; record this file as level 0 backup for incremental backup;
catalog语句加上noprompt选项的话RMAN将不会提示;
catalog recovery area|db_recovery_file_dest;将flash recovery area下的所有有效backup set,image copy,archivelog记录到rman库中以方便恢复是restore。
---------------------------------------------------------------------------------------------------------
rman中list列出的是之前的结果,而不是即时的结果。
例如recid为1的镜像备份文件一开始存在于磁盘上,list显示状态为1,但是执行delete datafilecopy 1之后,再次执行list datafilecopy 1,却显示状态仍然为available,直到你执行了一次crosscheck datafilecopy 1确认状态为expired之后,再list datafilecopy 1 才会更新显示为x(expired)。
------------------------------------------------------------------------------------------------------------
archivelogrecordspecifier限定一定范围内的归档日志。
阅读(1686) | 评论(0) | 转发(0) |