因为现在的项目用的是Oracle的数据库,在使用的过程中,经常会碰到一些问题,有的问题碰到多了,就做了一个总结,和大家分享一下.对于这些问题,如果谁有不同的解决方案,欢迎交流.
一.ORA-00942:table or view does not exist
产生原因:这是由于装载的表或视图不存在,多半是CATEXP.SQL还没有运行,无法执行Export视图,如果CATEXP.SQL已经运
行,则可能是版本错误。
解决方法:因为Import和Export共享的一些视图是通过运行CATEXP.SQL来装载的(它们具有相同的视图),并不生成单独的CATEXP.SQL,因而造成视图与Export代码不同步,较难保持彼此之间的兼容,用户就必须建立自己的Export应用,从而避免ORA-00942的错误。
二.ORA-1636 signalled during: alterrollback segment rb00 online
我们在做统计时还可能遇到下述问题:一个rollbacksegment的状态为”Needs Recovery”的现象,这是由于ORACLE回退一个事物表中的没有提交的事物时失败所造成的。通常原因为一个datafile或者tablespace是在offline的状态或者一个undo的目标被破坏或者rollback segment被破坏。
解决的办法是将所有的tablespace和datafile都置为online状态,如果不能解决则做下面的工作:1>.在initsid.ora中加入event=”10015 tracename context forever lever 10”;2>.shutdown数据库然后重启;3>.在$ORACLE_HOME/rdbms/log下,找到startup时生成的tracefile;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数据库然后重启。此时”NeedsRecovery”的问题应该是完全解决了,否则就是rollback segment被破坏了。
三.ORA-01688:unable to extend tablename.name partition NAME by NUM in tablespace NAME
产生原因:指定的tablespace空间已经被占用满,无法扩展。
解决方法:使用“ALTER TABLESPACE ADDDATAFILE”命令增加文件系统文件和原始分区,或者增加INITIAL的大小(如:alter tablespace CDRS101 default storage(next 500Mpctincrease 1))应该能够解决,否则就是有人使用你的表空间上创建了一个比较大的数据文件导致你的表空间不够用。
四.ORA-03113:end-of-fileon communication channel
产生原因:通讯不正常结束,从而导致通讯通道终止
解决方法:1>.检查是否有服进程不正常死机,可从alert.log得知
2>.检查sql*Net Driver是否连接到ORACLE可执行程序
3>.检查服务器网络是否正常,如网络不通或不稳定等
4>.检查同一个网上是否有两个同样名字的节点
5>.检查同一个网上是否有重复的IP地址
五.ORA-01652:unable to extend temp segmentby num in tablespace name
产生原因:ORACLE临时段表空间不足,因为ORACLE总是尽量分配连续空间,一但没有足够的可分配空间或者分配不连续就会出现上述的现象。
解决方法:我们知道由于ORACLE将表空间作为逻辑结构-单元,而表空间的物理结构是数据文件,数据文件在磁盘上物理地创建,表空间的所有对象也存在于磁盘上,为了给表空间增加空间,就必须增加数据文件。先查看一下指定表空间的可用空间,使用视图SYS.DBA_FREE_SPACE,视图中每条记录代表可用空间的碎片大小:
SQL>Select file_id,block_id,blocks,bytes from sys.dba_free_spacewhere tablespace_name=’<users>’;
返回的信息可初步确定可用空间的最大块,看一下它是否小于错误信息中提到的尺寸,再查看一下缺省的表空间参数:
SQL>SELECTINITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,PCT_INCREASE FROM SYS.DBA_TABLESPACESWHERE
TABLESPACE_NAME=name;
通过下面的SQL命令修改临时段表空间的缺省存储值:
SQL>ALTERTABLESPACE name DEFAULT STORAGE (INITIAL XXX NEXT YYY);
适当增大缺省值的大小有可能解决出现的错误问题,也可以通过修改用户的临时表空间大小来解决这个问题:
SQL>ALTERUSER username TEMPORARY TABLESPACE new_tablespace_name;
使用ALTER TABLESPACE命令,一但完成,所增加的空间就可使用,无需退出数据库或使表空间脱机,但要注意,一旦添加了数据文件,就不能再删除它,若要删除,就要删除表空间。