选择显示字体大小

用oracle8i修复数据库坏块的三种方法


  
在进行sun cluster双机切换、意外断电或其它情况下,有时会发生共享盘mount不上的情况,需要使用fsck对共享盘进行修复。修复完成后,在数据库启动过程中,却又出现"数据块损坏,无法启动数据库"的现象,此时,可以根据不同的数据块损坏类型,检测并修复错误。 在此介绍三种使用oracle8i修复损坏数据块的方法。

一、数据块损坏,错误代码为ora-01578

ora-1115 i/o error reading block

通常后跟ora-737x错误与操作系统错误(如unix中的错误号5)

产生原因:

1. 硬件问题(磁盘控制器问题或磁盘问题)

2. 物理级的数据块损坏(通常由前一原因造成)

3. 处理巨型文件时,后跟错误代码ora-7371

确定故障原因与恢复的方法:

1. 查看alert.log文件中其它ora-1115错误的发生情况:

1) 如果指向不同磁盘的文件,则是磁盘控制器的问题,查看v$datafile,有哪些文件位于该控制器下,转到第二步。

2) 如果指向相同磁盘的不同文件,则是磁盘的问题,转到第二步。

3) 如果指向同一个文件,执行以下语句查找文件名:

select segment_name,segment_type from dba_extents where file_id=<文件号> and <块号> between block_id
and block_id+blocks-1;

其中,文件号与块号是ora-1115中指出的,如果该查询持续指向某表或索引,则重建它们即可。

2. 如果文件是system表空间,或处于noarchivelog模式,关闭数据库,转到第四步。

3. 如果数据库处于archivelog模式,仍应关闭数据库,如果不能关闭数据库,则将相应的数据文件脱机:alter database datafile &#39;文件名&#39; offline;

4. 试着将数据文件拷贝到别的磁盘。

5. 如果拷贝失败,则文件将丢失。

6. startup mount;

7. 将数据文件重命名为成功拷贝到别的磁盘的文件名:

alter database rename file &#39;老路径文件名&#39; to &#39;新路径文件名&#39;;

8. alter database open;

9. recover datafile 文件名;

alter database datafile &#39;文件名&#39; online;

二、回滚段需要恢复

如果回滚段处于need recovery状态,需要执行以下步骤进行恢复:

1. 查看所有联机的表空间与数据文件

2. 在init.ora文件中加入event = "10015 trace name context forever,level 10",这将生成一个追踪文件,其中含有事务与回滚的信息。

3. 关闭并重新打开数据库

4. 查看trace文件,应有error recovery tx(#,#) object #.tx(#,#),指出事务信息,其中object #与sys.dba_objects中的object_id相同。

5. 使用以下查询找出正在进行恢复的对象:

select owner,object_name,object_type,status from dba_objects where  object_id=<object #>;

6. 必须删除该对象以释放回滚块。

三、检测与修复损坏块的常用方法:

(一)使用初始化参数db_block_checking与db_block_checksum。

当块改变时,db_block_checking对块进行逻辑校验。将防止发生10210 与10211错误。

(二)使用dbms_repair包,由dbmsrpr.sql与prvtrpr.plb生成该包在特定表中生成损坏块的信息。

1.dbms_repair.admin_tables用于创建与删除存储损坏块的表。其中table_type为:repair_table(表),orphan_table(索引);action为:create_action(创建表),purge_action(删除无关数据),drop_action(删除表)。例:

dbms_repair.admin_tables(&#39;repair_table&#39;,dbms_repair.repair_table,dbms_repair.create_action,&#39;temp_data&#39;);

2.dbms_repair.check_object检查表、索引、分区中的块损坏。其中object_type为:table_object(表),index_object(索引), repair_table_name(用于存储损坏块信息的表)。例:

dbms_repair.check_object(&#39;oratrain&#39;,&#39;locations&#39;,corrupt_count=>:cc);

3.使用以下语句查询块损坏信息:

select object_name, relative_file_no, block_id, marked_corrupt, corrupt_description, repair_description from repair_table;

4.将块标志为损坏的:dbms_repair.fix_corrupt_blocks(&#39;oratrain&#39;,&#39;locations&#39;,fix_count=>:fc);

5.跳过损坏块:dbms_repair.skip_corrupt_blocks(&#39;oratrain&#39;, &#39;locations&#39;);

其中object_type为 :table_object(表),cluster_object(索引)。

6.使用rebuild_freelists重建损坏的空闲列表:dbms_repair.rebuild_freelists

7.使用以下方法查找指向损坏块的索引

(1) 创建存放指向坏块索引的表

(2) dbms_repair.dump_orphan_keys(&#39;oratrain&#39;,&#39;loc_pk&#39;,

orphan_table_name=>&#39;orphan_tab1&#39;,key_count=>:kc);

(3) select index_name, count(*) from orphan_key_table where table_name = &#39;classes&#39; group by index_name;

(4) 重建具有orphan keys的索引

限制:不能分析index-organized tables 与 lob indexes,dump_orphan_keys不能对bitmap与 function-based indexes操作。

(三)使用sql命令analyze tableindex &#8230; validate structure

utlvalid.sql.创建含有损坏块信息的invalid_rows表,analyze table validate structure cascade同时校验表与索引

(四)使用dbverify

dbverify是一个外部工具,所以对数据库影响很小。可用于在将备份文件拷贝回原位置前检验备份文件的完好性,并定位数据块损坏。命令如下:

dbv /opt/oracle/db02/oradata/data01.dbf start=1 end=500 logfile=dbv.log


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons