首页>计算机>Oracle认证>应用技术>正文
思科应用技术:ORACLE常见错误代码的分析与解决

www.zige365.com 2008-8-18 16:00:53 点击:发送给好友 和学友门交流一下 收藏到我的会员中心
产生原因:当ORACLE访问一个数据块时,由于1、硬件的I/O错误;2、操作系统的I/O错误或缓冲问题;3、内存或paging问 题;4、ORACLE试图访问一个未被格式化的系统块失败;5、数据文件部分溢出等上述几种情况的一种引起了逻辑坏块或者物理坏块,这时就会报ORA-01578的错误。

    解决方式:由于ORACLE只有在访问到有问题的数据文件时才会报错,所以报错的时间有可能会比实际出错的时间要晚,如果ORA-01578出错信息提示数据坏块指向的是用户自己的数据文件,则用以下方法来解决:

    如果通过下面的SQL语句查出的坏块出现有索引上,则只需重建索引即可

    SQL>Select owner,segment_name,segment_type from dba_extents where file_id=<F> and <B> between block_id and block_id+blocks-1;(<F>和<B>分别是ORA-01578报出的坏块出现的文件号和块号)

    如果坏块出现在表上,先用以下语句分析是否为永久性坏块(建议多执行一两次,有助于鉴别数据坏块是永久性的(硬盘上的物理坏块)还是随机性的(内存或硬件错误引起)):

    SQL>Analyze table <table_name> validate structure cascade;

    执行该命令后,可能会出现以下的结果:

    ORA-01578:与原先错误信息有相同的参数,为永久性的物理或逻辑坏块;与原先错误信息有不同的参数,可能与内存,page space和I/O设备有关。如果用户有此表的最新备份,那么最好是用此备份来恢复此表,或者使用event 10231来取出坏块以外的数据:

    <1>.先关闭数据库

    <2>.编辑init<sid>.ora文件,加入:

event=”10231 trace name context forever,level 10”

    <3>.startup restrict

    <4>.创建一个临时表:SQL>create table errortemp as select * from error;(error是坏表的表名)

    <5>.把event从init<sid>.ora文件中删掉并重起数据库

    <6>.rename坏表,把临时表rename成坏表的表名

    <7>.创建表上的INDEX等

    如果ORA-01578出错信息提示数据坏块指向的是数据字典或者是回滚段的话,你应该立即与ORACLE公司联系,共同商量一个好的解决办法。

    这里所讲的解决方法只是比较常见的一种,一些更为具体的解决办法可以查看一下ORACLE的故障解决手册,那里面有浞及使用ROWID方法来取出坏块以外的数据的方法,这里就不介绍了。

    相应的英文如下:

    Cause:The given data block was corrupted,probably due to program errors

    Action:Try to restore the segment containing the given data block,This may involve dropping the segment and recreating it,If there is a trace file,report the messages recorded in it to customer support.

    ORA-01628:max # of extents num reached for rollback segment num

    产生原因:这种错误通常为一个回滚段和一个表空间已经达到MAXEXTENTS参数设置的极限。要注意的是这个MAXEXTENTS不是该回滚段或表空间的硬件极限,硬件极限取决于数据库创建时在init.ora文件中指定的DB_BLOCK_SIZE参数的值。

本新闻共4页,当前在第2页  1  2  3  4  

我要投稿 新闻来源: 编辑: 作者:
相关新闻
思科应用技术:oracle里面使用临时表解决表冲突一例
思科应用技术:提高ORACLE数据库的查询统计速度
思科应用技术:浅谈Oracle中优化SQL的原则
思科应用技术:windows优化系统后oracle9i本地连接失败
思科应用技术:在Oracle中获取磁盘空间的使用情况
思科应用技术:Oracle中Decode()函数使用技巧