怎么查一个网站有没有做301,哪里可以做营销型网站,松岗建网站,望野古诗王绩#x1f4ab;《博主介绍》#xff1a;✨又是一天没白过#xff0c;我是奈斯#xff0c;DBA一名✨ #x1f4ab;《擅长领域》#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux#xff0c;也在扩展大数据方向的知识面✌️… 《博主介绍》✨又是一天没白过我是奈斯DBA一名✨ 《擅长领域》✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux也在扩展大数据方向的知识面✌️ 大佬们都喜欢静静的看文章并且也会默默的点赞收藏加关注 今天这篇文章作为Oracle rman系列的倒数第二篇那么如标题所示给大家介绍一下怎么通过rman备份修复坏块的问题那么大家都知道 rman是物理备份工具可以通过备份的文件对存在的坏块进行修复。那么带着修复坏块的问题进入今天的内容吧 然而RMAN所涉及的内容之广、之深使得难以在单篇文章中全面涵盖。所以我将理论、命令、备份策略、异机恢复、坏块处理等分成八篇文章去讲即使分为八篇也有不少内容没有涵盖到所以这八篇文章都是精华看完这八篇就可以解决95%以上的RMAN相关工作内容了。八篇文章的内容分别如下 
第一篇rman物理备份工具的基础理论概述第二篇rman工具实用指南常用命令详解与实践第三篇rman标准化全库备份策略完整备份or增量备份第四篇rman全库异机恢复从RAC环境到单机测试环境的转移第五篇rman全库异机恢复从单机环境到RAC测试环境的转移第六篇rman时间点异机恢复从RAC环境到单机测试环境的转移第七篇Oracle数据库坏块处理rman修复坏块实践与案例分析当前篇第八篇逻辑备份工具expdp(exp)/impdp(imp)和物理备份工具rman的区别和各自的使用场景总汇 坏块分为两种 
物理坏块指的是由于介质损坏或存储层面的问题导致的块损坏例如磁盘故障或数据损坏。BLOCKRECOVER命令可以用来修复这种类型的损坏它会尝试从备份中恢复受损的数据块或者使用磁盘上的镜像数据进行修复。逻辑坏块则是由数据库逻辑结构的问题引起的块损坏例如数据完整性约束问题或逻辑错误导致的块损坏。对于逻辑坏块通常需要通过其他手段来修复比如恢复到一个之前的时间点或者执行逻辑数据修复操作。 验证是否有坏块的办法 工具列表  坏块检查类型  能否修复坏块  描述  dbverify  物理  否  用于验证数据文件dbf、表、索引等能够校验open阶段的数据文件以及shutdown状态下的数据文件检查块的一致性错误。  exp/expdp  物理  否  exp对于包含坏块的表执行导出操作会收到相关的错误信息。 expdp不会给出坏块的提示只会将对象正确的数据导出。  analyze  逻辑  否  analyze命令的主要目的是通过分析数据库对象为优化器收集数据库对象的统计量信息以便优化器生成准确的执行计划。同时它也能检查某个表或索引是否存在损坏的情况。  dbms_repair  逻辑  是    rman  物理and逻辑  是  RMAN是一块备份工具就像一个过滤器RMAN需要通过缓存过滤每一个块其中一个特点就是检查块是否被损坏。如果备份的数据库中包含有坏块将会收到错误  查询坏块的视图 SQL select * from v$database_block_corruption;       ###V$DATABASE_BLOCK_CORRUPTION显示有关上次备份后损坏的数据库块的信息。 FILE#包含损坏块的数据文件的绝对文件号坏块所在的文件 BLOCK#损坏块范围内第一个损坏块的块号坏块的坏块号 BLOCKS从开始找到的损坏块数BLOCK# CORRUPTION_CHANGE#检测到逻辑损坏的更改号。设置为0表示介质损坏。 CORRUPTION_TYPE数据文件中的块损坏类型: ALL ZERO磁盘上的块头只包含零。如果该块从未被填充并且位于Oracle7文件中则它可能是有效的。对于空块缓冲区将被重新格式化为Oracle8标准。 FRACTURED块头看起来很合理但是块的前后是不同的版本。 CHECKSUM可选检查值显示该块不是自洽的。无法确定校验值失败的确切原因但它可能会失败因为块中间的扇区来自不同的版本。 CORRUPT块被错误识别或不是数据块(例如数据块地址丢失) LOGICAL块逻辑损坏 相关参数 db_block_checksumDB_BLOCK_CHECKSUM确定是否DBWn直接加载程序将计算校验和(从存储在数据块中的所有字节计算出的数字)并在将数据块写入磁盘时将其存储在每个数据块的缓存头中。     如果此参数为则块为只读时校验与TYPICAL或者FULL并且该块的最后一次写入存储了校验和。在…里FULL模式下Oracle还会在应用update/delete语句的更改之前验证校验和并在应用更改后重新计算校验和。此外Oracle会在将每个日志块写入当前日志之前为其提供一个校验和。     大多数日志块校验和由生成前台进程完成而LGWR或LGWR从进程(LG神经网络进程)执行其余的工作以获得更好的CPU和缓存效率。     如果此参数设置为OFF, DBWn仅为计算校验和SYSTEM表空间但不适用于用户表空间。此外当此参数设置为时不执行日志校验和OFF.     校验和允许Oracle检测由底层磁盘、存储系统或I/O系统导致的损坏。如果设置为FULL, DB_BLOCK_CHECKSUM还捕获内存中的损坏并阻止它们进入磁盘。在中打开此功能TYPICAL模式只会导致1%到2%的额外开销。在……里FULL模式会导致4%到5%的开销。Oracle建议您设置DB_BLOCK_CHECKSUM到TYPICAL.          db_block_checkingDB_BLOCK_CHECKING指定Oracle数据库是否对数据库块执行块检查。Oracle通过遍历块中的数据来检查块确保它在逻辑上是一致的。块检查通常可以防止内存和数据损坏。在大多数应用程序中数据块检查通常会导致1%到10%的开销具体取决于工作负载和参数值。特定的DML开销可能会更高。工作负载中的更新或插入越多启用块检查的代价就越大。你应该设置DB_BLOCK_CHECKING到FULL如果性能开销是可接受的。参数有如下几个值 OFF or FALSE不对用户表空间中的块执行块检查。但是语义块检查SYSTEM表空间块总是打开的。                                  LOW在内存中的块内容改变后(例如UPDATE, INSERT或者DELETE语句或者在Oracle RAC中的实例间块传输之后)。                                  MEDIUM全部LOW对除索引之外的所有对象执行检查和完整的语义检查(遇到损坏时可以通过droprebuild来重建索引的内容)。                                 FULL or TRUE全部LOW和MEDIUM对所有对象执行检查和完整的语义检查。  那么开始今天的案例吧 案例开始 
一、模拟表数据 
[oracle11g full]$ sqlplus test/123456
SQL
create table tb1 (id number(10),name varchar2(10));
insert into tb1 values (1,itpux01);
insert into tb1 values (2,itpux02);
insert into tb1 values (3,itpux03);
insert into tb1 values (4,itpux04);
insert into tb1 values (5,itpux05);
commit; 
二、对库进行全备坏块从rman备份中恢复 
这里我就不写全备的脚本了小伙伴可以跳转到【Oracle篇】rman标准化全库备份策略完整备份or增量备份第三篇总共八篇_rman增量备份-CSDN博客进行参考哦 
三、查看对象的块信息 [oracle11g full]$ sqlplus / as sysdba
SQL select * from dba_segments where ownerTEST and segment_nameTB1;    ###通过dba_segments视图查看表对象开始的头块ID     SQL select * from dba_extents where ownerTEST and segment_nameTB1;     ###dba_extents查看每个区开始的块  四、破坏user表空间的8404、8405块 [oracle11g orcl]$
dd of/oracle/app/oracle/oradata/orcl/users.264.1140874093 bs9182 convnotrunc seek8404 EOF
New corrupted block!
EOF
###将users表空间的8404块输入New corrupted block!内容  [oracle11g orcl]$
dd of/oracle/app/oracle/oradata/orcl/users.264.1140874093 bs9182 convnotrunc seek8405 EOF
New corrupted block!
EOF
###将users表空间的8405块输入New corrupted block!内容  五、验证是否存在坏块 方式一通过rman的验证备份 RMAN backup validate database;  
###扫描数据库的物理/逻辑错误并不执行实际备份如果有坏块会报出来。验证每个数据文件status为FAILEDBlocks Failing坏块有内容需要先dbv验证坏块编号然后rman修复坏块。
File   Status   Marked Corrupt   Empty Blocks   Blocks Examined   High SCN
-----  ----------  -----------------------   ------------------   -----------------------   ------------
5     FAILED          0         124840          131072        8866322   
File Name: /oracle/app/oracle/oradata/orcl/users.264.1140874093
Block Type   Blocks Failing   Blocks Processed
--------------   -------------------  ------------------------Data           0            5552            Index          0             391             Other          2             289     方式二通过视图 SQL select * from v$database_block_corruption;    ###V$DATABASE_BLOCK_CORRUPTION显示有关上次备份后损坏的数据库块的信息。   方式三通过dbv验证数据文件是否有坏块 [oracle11g ~]$ dbv  file/oracle/app/oracle/oradata/orcl/users.264.1140874093 解析一文件5的8404、8495是坏块  解析二Total Pages Marked Corrupt  : 2        已标记为损坏的页面总数。文件中有2个坏块  五、通过rman备份片恢复坏块。关于blockrecover命令可以参考之前的文章哦【Oracle篇】rman工具实用指南常用命令详解与实践第二篇总共八篇-CSDN博客 
[oracle11g ~]$ rman target /
RMAN blockrecover datafile 5 block 8404;  
RMAN blockrecover datafile 5 block 8405;    ###从备份中恢复这个数据文件坏掉的块支持多个坏块同时修复blockrecover datafile 4 block 23657,23658 
六、验证是否还存在坏块 方式一通过rman的验证备份 RMAN backup validate database;      ###所有的文件status为OKBlocks Failing为0     方式二通过视图 SQL select * from v$database_block_corruption;    ###V$DATABASE_BLOCK_CORRUPTION显示有关上次备份后损坏的数据库块的信息。没有输出就表示不存在坏块        方式三通过dbv验证数据文件是否有坏块 [oracle11g ~]$ dbv  file/oracle/app/oracle/oradata/orcl/users.264.1140874093
解析
Total Pages Examined         : 131072        总共处理了131072个块页一个数据块大小(show parameter block)此数据文件大小为1G
Total Pages Processed (Data) : 5552          数据文件中已用数据的块数页数此数据文件只用了43M
Total Pages Failing   (Data) : 0             文件中有问题的块数页数此数据文件正常
Total Pages Processed (Index): 391           文件中索引占用的块数页数索引用3M
Total Pages Failing   (Index): 0             文件中有问题索引的块数页数索引正常
Total Pages Processed (Other): 289           文件中其他对象占用的块数页数其他对象占用了2M
Total Pages Processed (Seg)  : 0             文件中数据段占用的块数页数
Total Pages Failing   (Seg)  : 0             文件中有问题数据段的块数页数
Total Pages Empty            : 124840        数据文件没有用的数据块页数
Total Pages Marked Corrupt   : 0             文件坏块的块数页数
Total Pages Influx           : 0             如果值大于零且未存在坏块的情况下是由于处于open的文件运行dbv程序遇到了一个当前正在被dbwn进程写入的数据块
Total Pages Encrypted        : 0             文件加密占用的块数页数
Highest block SCN            : 8866322 (0.8866322)        数据文件scn号 呼今天的内容不算多但是整理起来还是很麻烦的所以希望小伙伴们不吝自己的小手点赞、收藏、加关注。不过我也希望大家永远不要用到这篇文章因为生产环境出现坏块是个非常严重的问题而且有时候rman也发现不了坏块所以这篇文章以备不时之需有些技术可能在自己的职业生涯用不上但是一定是必须要会的万一那天出现了关于这个问题自己可以快速借助文档去处理掉