当前位置: 首页 > 图文教程 > 数据库 > MYSQL > 用ORACLE8i修复数据库坏块的三种方法

MYSQL
mysql "too many connections" 错误 之 mysql解决方法
MySQL: mysql is not running but lock exists 的解决方法
使用mysql中遇到的几个问题
MySQL一个索引最多有多少个列?真实的测试例子
MySQL里Create Index 能否创建主键 Primary Key
MySQL 创建索引(Create Index)的方法和语法结构及例子
MYSQL 优化常用方法
linux mysql 找回密码
mysql 动态执行存储过程语句
MySQL 查找价格最高的图书经销商的几种SQL语句
MySQL 客户端不输入用户名和密码直接连接数据库的2个方法
mysql 查询表中平均分最低的班级
mysql 左连接、右连接和内连接
Mysql LONGBLOB 类型存储二进制数据 (修改+调试+整理)
Mysql LONGTEXT 类型存储大文件(二进制也可以) (修改+调试+整理)
Mysql 插入中文及中文查询 (修改+调试)
mysql 数据表中查找重复记录
MySql .frm数据库文件导入的问题
解决hibernate+mysql写入数据库乱码
mySQL UNION运算符的默认规则研究

MYSQL 中的 用ORACLE8i修复数据库坏块的三种方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 84 ::
收藏到网摘: n/a

  在进行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=

  请作者联系本站,及时附注您的姓名。联系邮箱:edu#ruanchen.com(把#改为@)。