当前位置:首页 >> IT/计算机 >>

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 validate structure cascade; 执行该命令后,可能会出现以下的结果: ORA-01578:与原先错误信息有相同的参数,为永久性的物理或逻辑坏块;与原先错误 信息有不同的参数,可能与内存,page space 和 I/O 设备有关。 如果用户有此表的最新备份,那么最好是用此备份来恢复此表,或者使用 event 10231 来取出坏块以外的数据: <1>.先关闭数据库 <2>.编辑 init.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.ora 文件中删掉并重起数据库 <6>.rename 坏表,把临时表 rename 成坏表的表名 <7>.创建表上的 INDEX 等 如果 ORA-01578 出错信息提示数据坏块指向的是数据字典或者是回滚段的话,你应该 立即与 ORACLE 公司联系,共同商量一个好的解决办法。

这里所讲的解决方法只是比较常见的一种,一些更为具体的解决办法可以查看一下 ORACLE 的故障解决手册,那里面有浞及使用 ROWID 方法来取出坏块以外的数据的方法, 这里就不介绍了。 ORA-01628:max # of extents num reached for rollback segment num 产生原因:这种错误通常为一个回滚段和一个表空间已经达到 MAXEXTENTS 参数设 置的极限。要注意的是这个 MAXEXTENTS 不是该回滚段或表空间的硬件极限,硬件极限 取决于数据库创建时在 init.ora 文件中指定的 DB_BLOCK_SIZE 参数的值。 解决方法: 使用 SQL 命令 ALTER TABLESPACE…STORAGE (MAXEXTENTS XXXX) 来增加 MAXEXTENTS,其中“XXXX”值必须大于错误信息中所指的数值,但不能大于 LARGEST MAXEXTENT 的值,如果已经达到了 LARGEST MAXEXTENT VALUE,解决 的办法就是重新创建较大的范围尺寸,使用带有选项 COMPRESS=Y 的 Export 工具导出表, 如果表空间有可用空间, 先给表做一个备份, alter tablespace tablespace_name 更改其名字, 用 然后再装载表回数据库。 查看其错误出现的地方,如果出现在回滚段或索引上,那么必须将其删除并重建,如果 出现在临时表空间,修改临时表空间的存储字段,便可解决这个问题。 一个报错例子如下:
ORA-1628:max # extents 50 reached for rollback segment RBS_1

ORA-00600:internal error code,arguments:[num],[?],[?],[?],[?] 产生原因:这种错误通常为 ORACLE 的内部错误,只对 OSS 和 ORACLE 开发有用。 ORA-600 的错误经常伴随跟踪文件的状态转储(系统状态和进程状态),系统状态存储将 包括 ORACLE RDBMS 持有的当前对象的信息,进程状态转储则将显示特殊进程持有的对 象,当进程符合了某错误条件时,经常是由于一些信息取自它持有的一个块,如果我们知道 这些错误进程持有的块,就容易跟踪问题的来源。 解决方法: 一般来说出现这个错误我们本身是无法解决的, 只有从提高系统本身各方面 来解决这个内部问题,如增加硬件设备,调整系统性能,使用 OPS(当然 OPS 从某种意义 上说并不是一种好的解决方式)等。ORA-600 错误的第一个变量用于标记代码中错误的位 置(代码中的每个部分的第一变量都不一样),从第二个到第五个变量显示附加信息,告诉 OSS 代码在哪里出现了错误。 一个报错例子如下:
ORA-00600: internal error code,

arguments: [1237], [], [], [], [], [], [], []

ORA-03113:end-of-file on communication channel : 产生原因:通讯不正常结束,从而导致通讯通道终止 解决方法: 1>.检查是否有服进程不正常死机,可从 alert.log 得知 2>.检查 sql*Net Driver 是否连接到 ORACLE 可执行程序 3>.检查服务器网络是否正常,如网络不通或不稳定等 4>.检查同一个网上是否有两个同样名字的节点 5>.检查同一个网上是否有重复的 IP 地址 ORA-00942:table or view does not exist 产生原因:这是由于装载的表或视图不存在,多半是 CATEXP.SQL 还没有运行,无法 执行 Export 视图,如果 CATEXP.SQL 已经运行,则可能是版本错误。 解决方法: 因为 Import 和 Export 共享的一些视图是通过运行 CATEXP.SQL 来装载的 (它 们具有相同的视图),并不生成单独的 CATEXP.SQL,因而造成视图与 Export 代码不同步, 较难保持彼此之间的兼容,用户就必须建立自己的 Export 应用,从而避免 ORA-00942 的错 误。 上述错误均为我们在使用回滚段时比较常见的问题,ORA-01598 指明当前使用的回滚 段的状态为“not online”,不能使用,将它改为“online”状态即可使用;ORA-01636 指明当前 回滚段已经为“online”状态,可以直接使用,不用再集合它。 ORA-1636 signalled during: alter rollback segment rb00 online 我们在做统计时还可能遇到下述问题: 一个 rollback segment 的状态为”Needs Recovery” 的现象,这是由于 ORACLE 回退一个事物表中的没有提交的事物时失败所造成的。通常原 因为一个 datafile 或者 tablespace 是在 offline 的状态或者一个 undo 的目标被破坏或者 rollback segment 被破坏。解决的办法是将所有的 tablespace 和 datafile 都置为 online 状态,如果不能 解决则做下面的工作: 1>.在 initsid.ora 中加入 event=”10015 trace name context forever lever 10”; 2>.shutdown 数据库然后重启; 3>.在$ORACLE_HOME/rdbms/log 下,找到 startup 时生成的 trace file;

4>.在 trace 文件中,找到下列信息“error recovery tx(#,#) object #”; 5>.根据 object#(与 sys.dba_objects 表中的 object_id 相同)在 sys.dba_objects 表中查出该 object 的名字; 6>.将该 object drop 掉; 7>.在 init.ora 文件中将该 rollback segment 放回 rollback_segments 参数中,删除 event;8>.shutdown 数据库然后重启。此时”Needs Recovery”的问题应该是完全解决了,否则 就是 rollback segment 被破坏了。 ORA-01688:unable to extend table name.name partition NAME by NUM in tablespace NAME 产生原因:指定的 tablespace 空间已经被占用满,无法扩展。 解决方法:使用“ALTER TABLESPACE ADD DATAFILE”命令增加文件系统文件和原 始分区,或者增加 INITIAL 的大小(如:alter tablespace CDRS101 default storage(next 500M pctincrease 1))应该能够解决,否则就是有人使用你的表空间上创建了一个比较大的数据文 件导致你的表空间不够用。 一个报错例子如下:
ORA-1688: unable to extend table RMMCDR.LOCAL_CDR partition LOCAL_CDR101 by 460800 in tablespace CDRS101


相关文章:
安装oracle数据库常见的错误
安装oracle数据库常见的错误 - 安装oracle常见的错误,经过自己实践操作,归纳总结大致有以下几个方面。
oracle安装及使用常见问题及解决方案
oracle安装及使用常见问题及解决方案 - oracle安装使用过程中的几个常见问题,如PLSQL中文乱码问题,PLSQL连接数据库失败问题,用户锁定问题等;以及常见的几种ora错误的...
ORACLE数据库常见问题诊断方法(常见错误篇)-20021...
ORACLE 数据库常见问题诊断方法 (常见错误篇) ORACLE 的这类错误在 ORALCE 的文档中有详细说明,但原因及措施说明不详细,本文 当着重说明如何解决这类错误。 1 ...
Oracle常见问题解决方案
Oracle常见问题解决方案_计算机软件及应用_IT/计算机_专业资料。oracle临时表空间...关于ORA-00257 archiver error处理方法数据库日志爆 满】 3.1 ORA-00257报错...
Oracle11g数据库口令失效的处理方案
操作 Oracle11g 数据库口令失效的处理方案问题说明: 部分铁路局近期出现税控服务器管理系统打不开网页的问题,是因为 oracle11g 数据库口令 180 天后失效导致,需要...
oracle数据库归档日志满问题解决方案
oracle数据库归档日志满问题解决方案_计算机软件及应用_IT/计算机_专业资料。...检查 flash recovery area 的使用情况,可以看见 archivelog 已经很大了,达到 96...
Oracle数据库同步解决方案
Oracle数据库同步解决方案_计算机软件及应用_IT/计算机_专业资料。Oracle数据库...下面你可以尽情的在 ThinkPad 机器上操作 BookMark 表, 你会即时发 现 DELL ...
oracle数据库故障紧急处理预案
oracle数据库故障紧急处理预案_计算机软件及应用_IT/计算机_专业资料。oracle数据...3. 用操作系统命令将其它正确的控制文件覆盖错误的控制文件。 4. 用下面命令...
Oracle数据库中出现ORA-01460错误问题的解决
Oracle数据库中出现ORA-01460错误问题的解决 - 我们今天主要向大家介绍的是 Oracle 数据库在实际操作中出现 ORA-01460 错误, 我们大家都知道在使用 PL/SQL D...
Oracle常见死锁发生的原因以及解决方法
Oracle常见死锁发生的原因以及解决方法_电脑基础知识_IT/计算机_专业资料。简单介绍oracle数据库运行过程中死锁产生的原因及解决办法! ...
更多相关标签: