当前位置:七道奇文章资讯数据防范Oracle防范
日期:2011-03-21 00:21:00  来源:本站整理

Oracle数据库操作常见错误及办理筹划[Oracle防范]

赞助商链接



  本文“Oracle数据库操作常见错误及办理筹划[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

  ORA-01650:unable to extend rollback segment NAME by NUM intablespace NAME

  产生缘由:上述ORACLE错误为回滚段表空间不足惹起的,这也是ORACLE数据管理员最常见的ORACLE错误信息.当用户在做一个非常宏大的数据操作招致现有回滚段的不足,使可分配用的回滚段表空间已满,无法再举行分配,就会呈现上述的错误.

  办理方法:利用"ALTER TABLESPACE tablespace_name ADD DATAFILE filename SIZE size_of_file"号令向指定的数据增添表空间,按照具体的情形可以增添一个或多个表空间.当然这与还与你主机上的裸盘设备有关,假如你主机的裸盘设备已经没有多余的利用空间,倡议你不要轻意的增添回滚段表空间的大小,可以利用下列的语句先查询一下剩余的tablespace空间有多少:

Select user_name,sql_text from V$open_cursor where user_name=’<user_name>’;

  假如多余的空间对比多,便可以得当追加一个大的回滚段给表空间利用,从而避免上述的错误.你也可以用以下语句来检测一下rollback segment的竞争情况:

Select class,count from V$waitstat where calss in(‘system undo header’,’system undo block’,’undo header’,’undo block’);

  和

Select sum(value) from V$sysstat where name in (‘db_block_gets’,’consistents gets’);

  假如任何一个class in count/sum(value)大于1%,就应当考虑增添rollback segment.

  ORA-01652:unable to extend temp segment by num in tablespace name

  产生缘由:ORACLE暂时段表空间不足,因为ORACLE老是尽大概分配持续空间,一但没有充足的可分配空间大概分配不持续就会呈现上述的现象.

  办理办法:我们知道由于ORACLE将表空间作为逻辑构造-单元,而表空间的物理构造是数据文件,数据文件在磁盘上物理地成立,表空间的全部对象也存在于磁盘上,为了给表空间增添空间,就必须增添数据文件.先查看一下指定表空间的可用空间,利用视图SYS.DBA_FREE_SPACE,视图中每条记录代表可用空间的碎片大小:

SQL>Select file_id,block_id,blocks,bytes from sys.dba_free_space where tablespace_name=’<users>’;

  返回的信息可初步肯定可用空间的最大块,看一下它能否小于错误信息中提到的尺寸,再查看一下缺省的表空间参数:

SQL>SELECT INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,PCT_INCREASE FROM SYS.DBA_TABLESPACES WHERE
TABLESPACE_NAME=name;

  通过下面的SQL号令改正暂时段表空间的缺省存储值:

SQL>ALTER TABLESPACE name DEFAULT STORAGE (INITIAL XXX NEXT YYY);

  得当增大缺省值的大小有大概办理呈现的错误问题,也可以通过改正用户的暂时表空间大小来办理这个问题:

SQL>ALTER USER username TEMPORARY TABLESPACE new_tablespace_name;

  利用ALTER TABLESPACE号令,一但完成,所增添的空间便可以利用,无需退出数据库或使表空间脱机,但要注意,一旦增添了数据文件,就不能再删除它,若要删除,就要删除表空间.

  一个报错例子以下:

ORA-1652:unable to extend temp segment by 207381 in tablespace TEMPSPACE

  ORA-01578:Oracle data block corrupted(file # num,block # num)

  产生缘由:当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办法来取出坏块以外的数据的办法,这里就不介绍了.

  以上是“Oracle数据库操作常见错误及办理筹划[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • SQL Server中利用Linkserver衔接Oracle的办法
  • Oracle数据库网络与安全FAQ精辟堆积
  • Ubuntu 9.10下安装Oracle10g
  • Ubuntu 10.04 下安装Oracle 11g
  • oracle盲注报错语句和oracle提权语句汇总
  • oracle中to_char、to_number、to_date的用法
  • Python模拟Oracle的SQL/PLUS工具的实现办法
  • Oracle数据库访谈之最年青的OCM访谈
  • oracle表数据误删复原
  • Oracle数据库笔记--表空间
  • Oracle数据库树形查询的代码示例
  • oracle中记录和调集
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .