文档介绍:Oracle坏块总结收藏Oracle数据库出现坏块现象是指:在Oracle数据库的一个或多个数据块(一个数据块的容量在创建数据库时由db_block_size参数指定,缺省为8K)内出现内容混乱的现象。由于正常的数据块都有固定的合法内容格式,坏块的出现,导致数据库进程无法正常解析数据块的内容,进而使数据库进程报错乃至挂起,并级联导致整个数据库实例出现异常。:,首先将其读入物理内存空间,在处理完成后,再由特定进程将其写回磁盘;如果在这个过程中,出现内存故障,CPU计算失误,都会导致内存数据块的内容混乱,最后反映到写回磁盘的数据块内容有误。同样,如果存储子系统出现异常,数据块损坏也就随之出现了。,都是以操作系统内核调用(systemcall)的方式完成的,如果操作系统在内核调用存在问题,必然导致Oracle进程写入非法的内容。,可能出现导致数据块的内容出现异常BUG。,在当数据块的内容被读入主机的物理内存时,如果其他非Oracle进程,对Oracle使用的共享内存区域形成了扰乱,最终导致写回磁盘的数据块内容混乱。,掉电,终止服务异常关机,掉电,终止服务使进程异常终止,而破坏数据块的完整性,导致坏块产生。注:这也是为什么突然断电会导致数据库无法启动由上可见,坏块的形成原因复杂。当出现坏块时,为了找到确切的原因,需要大量的分析时间和排查操作,甚至需要多次重现才能找出根本原因。但当故障发生在生产系统上,我们为了减少停机时间,会尽快实施应急权变措施以保证系统的可用性,这样就破坏了故障现场,对根本原因的分析因而也更加困难了。,但并非不可预防。,Oracle定期发布基于特定软件版本的“已知问题(knownissues)说明”。对于可能导致坏块的Oracle软件BUG,在Oracle公司内部,是作为高严重级别的问题进行处理,在“已知问题(knownissues)说明”中,这些BUG以严重(Noticable)问题标出(标记为*或+),部分问题,Oracle还会发布警告(Alert)通告。在文档中,Oracle会提供相应的补丁或应对措施。-RecoveryManager,提供了扫描文件检查坏块的功能。在RecoveryManager界面中,使用:RMAN>BACKUPCHECKLOGICALVALIDATEDATAFILEn;可以检查数据文件是否包含坏块,同时并不产生实际的备份输出。:因为dbv要求file后面跟的必须是一个文件扩展名,所以如果用裸设备存储的,就必须使用ln链接裸设备到一个文件,然后再用dbv对这个链接文件进行检查。ANALYZETABLEtablenameVALIDATESTRUCTURECASCADE它执行坏块的检查,但是不会标记坏块为corrupt,检测的结果保存在USER_DUMP_DEST目录下的用户trace文件中。:HWM以上的坏块是不会发现的索引中存在的坏块是不会发现的数据字典中的坏块是不会发现的结合数据库性能综合考虑db_block_checksum和db_blockchecking参数。当我们使用RecoveryManager进行实际的数据库备份时,同时也就进行了坏块检查。但要注意的是,在线使用RecoveryManager扫描坏块和备份时,需要数据库运行在归档模式(archivelog),否则只能在数据库未打开的情况下进行。对于操作系统问题和硬件故障,则需要相应厂商的配合支持。同时,避免在数据库主机运行其他用户进程,避免异常停机,也会减少坏块发生的几率。,数据库的异常表现通常有:报告ORA-01578错误。报告Ora-1110错误。报告ORA-00600错误,其中,第一个参数为2000-8000,Cachelayer2000–4000,Transactionlayer4000–6000,Datalayer6000-8000。Trace文件中出现Corruptblockdba:。分析对象失败。后台进程,如DBWR,LGWR出现长时间异常等待,如“LGWRwaitforredocopy”。