教程中国
PHOTOSHOP CS9.0中文版 MAYA 8.5 FOR WINDOWS Corel Painter v9.0 Flash MX2004 中文版 Illustrator cs2 中文版
VC++6.0含sp6 中英文版 VB6.0 +sp6 简体中文版 Borland Delphi 7汉化版 MSDN for vb6.0中文版 Visual Studio 2005简体
教程中国下属 文件存储共享专家BIBIDU.COM 提供大型软件,教材,源码,电影,音乐,图书等下载 更多精品请点此进入
  您目前所在位置: 教程中国 >> Oracle >> 备份恢复 >> 用Oracle8i修复数据库坏块的三种方法 RSS订阅
用Oracle8i修复数据库坏块的三种方法
教程(视频,书籍)下载:  ASP.NET AutoCAD 数据库 C# ASP java photoshop 网页设计 delphi 3dmax Flash C++ VB 张孝祥 实例   更多请进入BIBIDU搜索
IT搜索引擎   

  在进行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 '文件名' OFFLINE;
  
  4. 试着将数据文件拷贝到别的磁盘。
  
  5. 如果拷贝失败,则文件将丢失。
  
  6. STARTUP MOUNT;
  
  7. 将数据文件重命名为成功拷贝到别的磁盘的文件名:
  
  ALTER DATABASE RENAME FILE '老路径文件名' TO '新路径文件名';
  
  8. ALTER DATABASE OPEN;
  
  9. RECOVER DATAFILE 文件名;
  
  ALTER DATABASE DATAFILE '文件名' 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('REPAIR_TABLE',DBMS_REPAIR.REPAIR_TABLE,DBMS_REPAIR.CREATE_ACTION,'temp_data');
  
  2.DBMS_REPAIR.CHECK_OBJECT检查表、索引、分区中的块损坏。其中OBJECT_TYPE为:TABLE_OBJECT(表),INDEX_OBJECT(索引), REPAIR_TABLE_NAME(用于存储损坏块信息的表)。例:
  
  dbms_repair.check_object('ORATRAIN','LOCATIONS',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('ORATRAIN','LOCATIONS',fix_count=>:fc);
  
  5.跳过损坏块:dbms_repair.skip_corrupt_blocks('ORATRAIN', 'LOCATIONS');
  
  其中OBJECT_TYPE为 :TABLE_OBJECT(表),CLUSTER_OBJECT(索引)。
  
  6.使用REBUILD_FREELISTS重建损坏的空闲列表:DBMS_REPAIR.rebuild_freelists
  
  7.使用以下方法查找指向损坏块的索引:
  
  (1) 创建存放指向坏块索引的表
  
  (2) dbms_repair.dump_orphan_keys('ORATRAIN','LOC_PK',
  
  orphan_table_name=>'ORPHAN_TAB1',key_count=>:kc);
  
  (3) SELECT index_name, count(*) FROM orphan_key_table WHERE table_name = 'CLASSES' GROUP BY index_name;
  
  (4) 重建具有orphan keys的索引
  
  限制:不能分析Index-organized tables 与 LOB indexes,DUMP_ORPHAN_KEYS不能对bitmap与 function-based indexes操作。
  
  (三)使用SQL命令ANALYZE TABLE|INDEX … 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

来源:upschool.com.cn
作者:
关键字:三种方法
发表日期:2007-1-6 0:48:07

网页显示有限 阅读全文请下载本文完整版WORD文档

上一篇:浅谈Oracle 10G中的新事物:闪回恢复区   下一篇:探讨Oracle数据库的数据导入方法


2008-12-2 6:22:07
本文的相类似文章
  • 在Oracle里加快SQL执行的三种方法
  • 实用:禁用FSO三种方法
  • 教你破解E-mail密码的三种方法
  • 识破网络钓鱼常使用的三种方法
  • 大小写互换的三种方法
  • VB实现图形动画的三种方法
  • Coreldraw图像文件导入PS三种方法
  • 在内核2.6.0-test中安装最新驱动NVIDIA 1.0-4620(共三种方法)
  • 快速关闭Windows 2003的三种方法
  • 三种方法激活Win 2003
  • 在学习中进步 在进步中成长 教程中国相随您的成长之路
    华腾联合科技股份有限公司版权所有
    广告联系:Rosibo@163.com