oracle常见错误精集.docx
- 文档编号:23827805
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:22
- 大小:32.18KB
oracle常见错误精集.docx
《oracle常见错误精集.docx》由会员分享,可在线阅读,更多相关《oracle常见错误精集.docx(22页珍藏版)》请在冰豆网上搜索。
oracle常见错误精集
一、6个常见错误
1、ORA-12541:
TNS:
没有监听器
原因:
没有启动监听器或者监听器损坏。
若是前者,使用命令netstartOracleOraHome81TNSListener(名字可能有出入)即可;如果是后者,则使用“Net8ConfigurationAssistant”工具向导之“监听程序配置”增加一个监听器即可(基本不用写任何信息,一路OK。
在添加之前可能需要把所有的监听器先删!
)
2、ORA-12500:
TNS:
监听程序无法启动专用服务器进程或ORA-12560:
TNS:
协议适配器错误
原因:
Oracle的数据库服务没有启动。
使用命令netstartOracleSERVICEORADB(ORADB为数据库名字)即可。
如果仍没有解决,请继续向下看。
3、如果数据库服务启动失败,则很有可能是其注册表项值损坏,最好的做法是以下两步:
1)ORADIM-DELETE-SIDoradb删除数据库服务项
2)ORADIM-NEW-SIDoradb新增数据库服务项
注:
这个过程中如果出错,就重启计算机!
4、ORA-12154:
TNS:
能解析服务名
原因:
Oracle的网络服务名没有正确配置。
请使用“Net8ConfigurationAssistant”工具向导之“本地网络服务名配置”配置TNS即可。
如果仍没有解决,请继续向下看。
5、ORA-1034:
TNS:
Oracle不可用
原因:
Oracle的数据库服务正确启动,但是数据库没有打开!
使用命令:
1)svrmgrl启动服务管理器
2)connectinternal以internal身份登陆
3)startup打开数据库
6、ORA-12560:
TNS:
协议适配器错误(顽固性的)
原因:
未知。
解决:
必杀技--打开“Windows任务管理器”,杀死Oracle.exe及ORADIM.exe进程,书写自己的ora_startup.bat,执行之!
PS:
1、我的ora_startup.bat:
◆netstartOracleOraHome81TNSListener
◆netstartOracleSERVICEORADB
◆svrmgrl一般情况下不用,不过有时少不了它的,具体步骤见第5步。
2、我的ora_shutdown.bat:
◆netstopOracleOraHome81TNSListener
◆netstopOracleSERVICEORADB
3、Oracle相关服务名请参见“管理工具”之“服务”中以Oracle开头的服务名
二、Oracle数据库操作常见错误及解决方
ORA-01650:
unabletoextendrollbacksegmentNAMEbyNUMintablespaceNAME
产生原因:
上述ORACLE错误为回滚段表空间不足引起的,这也是ORACLE数据管理员最常见的ORACLE错误信息。
当用户在做一个非常庞大的数据操作导致现有回滚段的不足,使可分配用的回滚段表空间已满,无法再进行分配,就会出现上述的错误。
解决方式:
使用“ALTERTABLESPACEtablespace_nameADDDATAFILEfilenameSIZEsize_of_file”命令向指定的数据增加表空间,根据具体的情况可以增加一个或多个表空间。
当然这与还与你主机上的裸盘设备有关,如果你主机的裸盘设备已经没有多余的使用空间,建议你不要轻意的增加回滚段表空间的大小,可使用下列的语句先查询一下剩余的tablespace空间有多少:
Selectuser_name,sql_textfromV$open_cursorwhereuser_name=’
如果多余的空间比较多,就可以适当追加一个大的回滚段给表空间使用,从而避免上述的错误。
你也可以用以下语句来检测一下rollbacksegment的竞争状况:
Selectclass,countfromV$waitstatwherecalssin(‘systemundoheader’,’
systemundoblock’,’undoheader’,’undoblock’);
和
Selectsum(value)fromV$sysstatwherenamein
(‘db_block_gets’,’consistentsgets’);
如果任何一个classincount/sum(value)大于1%,就应该考虑增加rollbacksegment。
ORA-01652:
unabletoextendtempsegmentbynumintablespacename
产生原因:
ORACLE临时段表空间不足,因为ORACLE总是尽量分配连续空间,一但没有足够的可分配空间或者分配不连续就会出现上述的现象。
解决方法:
我们知道由于ORACLE将表空间作为逻辑结构-单元,而表空间的物理结构是数据文件,数据文件在磁盘上物理地创建,表空间的所有对象也存在于磁盘上,为了给表空间增加空间,就必须增加数据文件。
先查看一下指定表空间的可用空间,使用视图SYS.DBA_FREE_SPACE,视图中每条记录代表可用空间的碎片大小:
SQL>Selectfile_id,block_id,blocks,
bytesfromsys.dba_free_spacewheretablespace_name=’
返回的信息可初步确定可用空间的最大块,看一下它是否小于错误信息中提到的尺寸,再查看一下缺省的表空间参数:
SQL>SELECTINITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,
PCT_INCREASEFROMSYS.DBA_TABLESPACESWHERE
TABLESPACE_NAME=name;
通过下面的SQL命令修改临时段表空间的缺省存储值:
SQL>ALTERTABLESPACEnameDEFAULTSTORAGE(INITIALXXXNEXTYYY);
适当增大缺省值的大小有可能解决出现的错误问题,也可以通过修改用户的临时表空间大小来解决这个问题:
SQL>ALTERUSERusernameTEMPORARYTABLESPACEnew_tablespace_name;
使用ALTERTABLESPACE命令,一但完成,所增加的空间就可使用,无需退出数据库或使表空间脱机,但要注意,一旦添加了数据文件,就不能再删除它,若要删除,就要删除表空间。
一个报错例子如下:
ORA-1652:
unabletoextendtempsegmentby207381intablespaceTEMPSPACE
ORA-01578:
Oracledatablockcorrupted(file#num,block#num)
产生原因:
当ORACLE访问一个数据块时,由于:
1、硬件的I/O错误;
2、操作系统的I/O错误或缓冲问题;
3、内存或paging问题;
4、ORACLE试图访问一个未被格式化的系统块失败;5、数据文件部分溢出等上述几种情况的一种引起了逻辑坏块或者物理坏块,这时就会报ORA-01578的错误。
解决方式:
由于ORACLE只有在访问到有问题的数据文件时才会报错,所以报错的时间有可能会比实际出错的时间要晚,如果ORA-01578出错信息提示数据坏块指向的是用户自己的数据文件,则用以下方法来解决:
如果通过下面的SQL语句查出的坏块出现有索引上,则只需重建索引即可
SQL>
Selectowner,segment_name,segment_typefromdba_extents
wherefile_id=
(
如果坏块出现在表上,先用以下语句分析是否为永久性坏块(建议多执行一两次,有助于鉴别数据坏块是永久性的(硬盘上的物理坏块)还是随机性的(内存或硬件错误引起)):
SQL>Analyzetablevalidatestructurecascade;
执行该命令后,可能会出现以下的结果:
ORA-01578:
与原先错误信息有相同的参数,为永久性的物理或逻辑坏块;与原先错误信息有不同的参数,可能与内存,pagespace和I/O设备有关。
如果用户有此表的最新备份,那么最好是用此备份来恢复此表,或者使用event10231来取出坏块以外的数据:
<1>.先关闭数据库
<2>.编辑init.ora文件,加入:
event=”10231tracenamecontextforever,level10”
<3>.startuprestrict
<4>.创建一个临时表:
SQL>createtableerrortempasselect*fromerror;(error是坏表的表名)
<5>.把event从init.ora文件中删掉并重起数据库
<6>.rename坏表,把临时表rename成坏表的表名
<7>.创建表上的INDEX等
如果ORA-01578出错信息提示数据坏块指向的是数据字典或者是回滚段的话,你应该立即与ORACLE公司联系,共同商量一个好的解决办法。
ORA-01628:
max#ofextentsnumreachedforrollbacksegmentnum
产生原因:
这种错误通常为一个回滚段和一个表空间已经达到MAXEXTENTS参数设置的极限。
要注意的是这个MAXEXTENTS不是该回滚段或表空间的硬件极限,硬件极限取决于数据库创建时在init.ora文件中指定的DB_BLOCK_SIZE参数的值。
解决方法:
使用SQL命令ALTERTABLESPACE…STORAGE(MAXEXTENTSXXXX)来增加MAXEXTENTS,其中“XXXX”值必须大于错误信息中所指的数值,但不能大于LARGESTMAXEXTENT的值,如果已经达到了LARGESTMAXEXTENTVALUE,解决的办法就是重新创建较大的范围尺寸,使用带有选项COMPRESS=Y的Export工具导出表,如果表空间有可用空间,先给表做一个备份,用altertablespacetablespace_name更改其名字,然后再装载表回数据库。
查看其错误出现的地方,如果出现在回滚段或索引上,那么必须将其删除并重建,如果出现在临时表空间,修改临时表空间的存储字段,便可解决这个问题。
一个报错例子如下:
ORA-1628:
max#extents50reachedforrollbacksegmentRBS_1
ORA-00600:
internalerrorcode,arguments:
[num],[?
],[?
],[?
],[?
]
产生原因:
这种错误通常为ORACLE的内部错误,只对OSS和ORACLE开发有用。
ORA-600的错误经常伴随跟踪文件的状态转储(系统状态和进程状态),系统状态存储将包括ORACLERDBMS持有的当前对象的信息,进程状态转储则将显示特殊进程持有的对象,当进程符合了某错误条件时,经常是由于一些信息取自它持有的一个块,如果我们知道这些错误进程持有的块,就容易跟踪问题的来源。
解决方法:
一般来说出现这个错误我们本身是无法解决的,只有从提高系统本身各方面来解决这个内部问题,如增加硬件设备,调整系统性能,使用OPS(当然OPS从某种意义上说并不是一种好的解决方式)等。
ORA-600错误的第一个变量用于标记代码中错误的位置(代码中的每个部分的第一变量都不一样),从第二个到第五个变量显示附加信息,告诉OSS代码在哪里出现了错误。
一个报错例子如下:
ORA-00600:
internalerrorcode,
arguments:
[1237],[],[],[],[],[],[],[]
ORA-03113:
end-of-fileoncommunicationchannel
产生原因:
通讯不正常结束,从而导致通讯通道终止
解决方法:
1>.检查是否有服进程不正常死机,可从alert.log得知
2>.检查sql*NetDriver是否连接到ORACLE可执行程序
3>.检查服务器网络是否正常,如网络不通或不稳定等
4>.检查同一个网上是否有两个同样名字的节点
5>.检查同一个网上是否有重复的IP地址
ORA-00942:
tableorviewdoesnotexist
产生原因:
这是由于装载的表或视图不存在,多半是CATEXP.SQL还没有运行,无法执行Export视图,如果CATEXP.SQL已经运行,则可能是版本错误。
解决方法:
因为Import和Export共享的一些视图是通过运行CATEXP.SQL来装载的(它们具有相同的视图),并不生成单独的CATEXP.SQL,因而造成视图与Export代码不同步,较难保持彼此之间的兼容,用户就必须建立自己的Export应用,从而避免ORA-00942的错误。
上述错误均为我们在使用回滚段时比较常见的问题,ORA-01598指明当前使用的回滚段的状态为“notonline”,不能使用,将它改为“online”状态即可使用;ORA-01636指明当前回滚段已经为“online”状态,可以直接使用,不用再集合它。
ORA-1636signalledduring:
alterrollbacksegmentrb00online
我们在做统计时还可能遇到下述问题:
一个rollbacksegment的状态为”NeedsRecovery”的现象,这是由于ORACLE回退一个事物表中的没有提交的事物时失败所造成的。
通常原因为一个datafile或者tablespace是在offline的状态或者一个undo的目标被破坏或者rollbacksegment被破坏。
解决的办法是将所有的tablespace和datafile都置为online状态,如果不能解决则做下面的工作:
1>.在initsid.ora中加入event=”10015tracenamecontextforeverlever10”;
2>.shutdown数据库然后重启;
3>.在$ORACLE_HOME/rdbms/log下,找到startup时生成的tracefile;
4>.在trace文件中,找到下列信息“errorrecoverytx(#,#)object#”;
5>.根据object#(与sys.dba_objects表中的object_id相同)在sys.dba_objects表中查出该object的名字;
6>.将该objectdrop掉;
7>.在init.ora文件中将该rollbacksegment放回rollback_segments参数中,删除event;8>.shutdown数据库然后重启。
此时”NeedsRecovery”的问题应该是完全解决了,否则就是rollbacksegment被破坏了。
ORA-01688:
unabletoextendtablename.namepartitionNAMEbyNUMintablespaceNAME
产生原因:
指定的tablespace空间已经被占用满,无法扩展。
解决方法:
使用“ALTERTABLESPACEADDDATAFILE”命令增加文件系统文件和原始分区,或者增加INITIAL的大小(如:
altertablespaceCDRS101defaultstorage(next500Mpctincrease1))应该能够解决,否则就是有人使用你的表空间上创建了一个比较大的数据文件导致你的表空间不够用。
一个报错例子如下:
ORA-1688:
unabletoextendtableRMMCDR.LOCAL_CDRpartitionLOCAL_CDR101
by460800intablespaceCDRS101
三、Oracle常见错误代码
ORA-01650:
unabletoextendrollbacksegmentNAMEbyNUMintablespaceNAME 产生原因:
上述ORACLE错误为回滚段表空间不足引起的,这也是ORACLE数据管理员最常见的ORACLE错误信息。
当用户在做一个非常庞大的数据操作导致现有回滚段的不足,使可分配用的回滚段表空间已满,无法再进行分配,就会出现上述的错误。
ORA-01652:
unabletoextendtempsegmentbynumintablespacename 产生原因:
ORACLE临时段表空间不足,因为ORACLE总是尽量分配连续空间,一但没有足够的可分配空间或者分配不连续就会出现上述的现象。
ORA-01628:
max#ofextentsnumreachedforrollbacksegmentnum 产生原因:
这种错误通常为一个回滚段和一个表空间已经达到MAXEXTENTS参数设置的极限。
要注意的是这个MAXEXTENTS不是该回滚段或表空间的硬件极限,硬件极限取决于数据库创建时在init.ora文件中指定的DB_BLOCK_SIZE参数的值。
ORA-01688:
unabletoextendtablename.namepartitionNAMEbyNUMintablespaceNAME 产生原因:
指定的tablespace空间已经被占用满,无法扩展。
四、OracleRAC中错误观点出现的原因
OracleRAC几个常见的错误观点
由于最终用户习惯于获得瞬间响应时间,Oracle为其产品提供持续可用性方面受到了前所未有的挑战。
那些在RedwoodShores(译者注:
Oracle公司总部所在地)的家伙们提供了一个重要的工具这就是什么是RAC?
简单来说就是一套允许单个数据库被多份oracle程序同时访问的软件工具。
如果一个服务器崩溃了,事务能够在最短的down机时间内被重定向到其他存活的服务器上的宣传称RAC是治愈多种疾病的良药,而IT厂家则会对这样的市场宣传产生误解,从而无法正确区别在高可用环境(HA)中使用RAC的成本和收益。
最常见的OracleRAC错误观点在于误解了它的功能和限制。
OracleRealApplicationClusters被作为综合能力规划战略的一部分,但是人们并不完全明了其技术上的强项和限制。
下面列举一些关于这项技术的常见误解。
是为了提供扩展性的尽管Oracle公司希望你买小型刀片服务器然后使用他们的网格计算方案来获得“水平扩展”,但是实际上这并不是多数用户使用RAC的方法。
注意:
RAC只是在超大型IT部门需要超过单个服务器提供极限的更多马力时的一种正统扩展方法。
作为Oracle最佳实践,要通过“垂直扩展”先进行单个服务器的扩容,先向上扩展再向外扩展。
只有在你使单个服务器容量饱和之后再考虑“scaleout”到多个服务器上。
今天,单个服务器的内存和CPU马力比起前几年来说有了突飞猛进,因此比起往RAC环境中添加一个新服务器而言,增加单个机器的资源更加简单。
在真实环境中,单个服务器能够处理每秒上千次的事务。
只有世界上最大的那些Oracle数据库需要扩展到使用RAC。
OracleRAC是独立的高可用解决方案
记住RAC只能保护你免于实例失效,这仅仅是众多可能引起非计划性中断的原因之一。
为了真正的持续可用性,我们还必须部署多重镜像磁盘和冗余网络组件。
为了每个RAC节点的可用性,需要多个冗余的主机总线适配器,多个网卡以及多个电源。
就算只是在数据库实例产生了failover,你也需要提供软件以允许多个主机总线适配器自动failover,并且提供单个组件失效通知。
就像我们已经提到的,RAC系统需要一个clusterinterconnect来提供内存对内存(RAM-to-RAM)的数据块传输。
Interconnect必须非常快速,必须有高带宽和低延迟。
Interconnects包括
Cachefusion上的瓶颈也是为什么RAC扩展或者说水平扩展有问题的另外一个原因。
如果你的clusterinterconnect无法处理这样的流量,那么额外的服务器将会降低整个系统的性能而不是提升它。
解决这个问题的唯一办法就是改造应用以适应RAC,或者采购更快的存储比如说固态硬盘。
保证了快速响应时间事务响应时间总是重要的,但是它对于RAC数据库来说尤为重要。
这是因为在连接阶段为了探测是否一个RAC节点或者机器已经失效而消耗了等待时间,因此你必须保证新事务要小于1秒时间这样才能保证2秒的failover时间。
OracleRAC不需要灾难恢复组件除了在少数案例中使用了DWDM技术(也就是darkfiber),你仍然需要创建一份灾难恢复解决方案。
因为RAC节点通常只间隔数英里,像飓风这样的自然灾害还是能够引起全局中断。
因此RAC最佳实践中还是要包含一份地理上的快速失效接管解决方案,比如DataGuard或者更好一些,多路流复制。
五、Oracle10gRAC连接错误的处理
在远端客户端连接RAC数据库时,通过统一的服务名连接时经常会出现ORA-12545错误。
SQL>CONNNDMAIN@nuagerac输入口令:
******已连接。
SQL>CONNNDMAIN@nuagerac输入口令:
******
ERROR:
ORA-12545:
因目标主机或对象不存在,连接失败
警告:
您不再连接到ORACLE。
SQL>CONNNDMAIN@nuagerac输入口令:
******已连接。
SQL>CONNNDMAIN@nuagerac输入口令:
******已连接。
SQL>CONNNDMAIN@nuagerac输入口令:
******
ERROR:
ORA-12545:
因目标主机或对象不存在,连接失败
警告:
您不再连接到ORACLE。
本地数据库TNSNAMES的配置:
nuagerac=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.127)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.128)(PORT=1521))
(LOAD_BALANCE=yes)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=nuagerac)
(FAILOVER_MODE=
(TYPE=SELECT)
(METHOD=BASIC)
(RETRIES=180)
(DELAY=5)
)
)
)
Oracle在文档Note:
364855.1:
RACConnectionRedirectedToWrong
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 常见 错误