oracle ASM实例报04031错误
- 格式:docx
- 大小:17.31 KB
- 文档页数:2
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=‟‟;如果多余的空间比较多,就可以适当追加一个大的回滚段给表空间使用,从而避免上述的错误。
你也可以用以下语句来检测一下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。
Oracle的常见错误及解决办法ORA-12528:TNS:listener: all appropriate instances are blocking new connectionsORA-12528问题是因为监听中的服务使⽤了动态服务,实例虽然启动,但没有注册到监听。
实例是通过PMON进程注册到监听上的,⽽PMON进程需要在MOUNT状态下才会启动。
所以造成了上⾯的错误。
解决这个问题,有三种⽅法:1、把监听设置为静态;2、在tnsnames.ora中追加(UR=A);3、重新启动服务;⽅法1、通过修改listener.ora的参数,把listener.ora动态注册设置为静态注册,然后重新启动监听# listener.ora Network Configuration File: $ORACLE_HOME\network\admin\listener.ora# Generated by Oracle configuration tools.LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))(ADDRESS = (PROTOCOL = TCP)(HOST = [IP])(PORT = 1521))))SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = [DBNAME])(ORACLE_HOME = [$ORACLE_HOME])(SID_NAME = [SID])))静态注册的风险:如果在instance运⾏中,lisener重新启动,就找不到instance了。
静态注册需要先启动lisener,再启动instance。
且静态模式下,lisener status显⽰的是unknown⽅法2、启动到nomount状态,通过修改tnsnames.ora的参数# tnsnames.ora Network Configuration File: $ORACLE_HOME\network\admin\tnsnames.ora# Generated by Oracle configuration tools.SYK =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = [IP])(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = SYK)(UR=A)))然后连接上数据库SQL>alter database mount;SQL>alter database open;⽅法3、重启ORACLE或者重启ORACLE服务在oracle帐户下依序执⾏如下命令:sqlplus / as sysdba;//在其它帐户(如root)下执⾏可能会报错(ORA-01031)因为这些帐户没有在dba组中shutdown immediate;startup;/s/blog_636415010100x3lc.htmloracle实例名: error while loading shared libraries: libskgxp10.so: cannot open shared object file: No such file or directory是环境变量LD_LIBRARY_PATH的问题。
Oracle数据库教程——记一次ora-04030错误的处理过程今天客户说从数据库后台发现报错,具体如下:Errors in file/oracle/mytest/saptrace/diag/rdbms/mytest/mytest/incident/incdir_183218/mytest_j003_8103_i18 3218.trc:ORA-04030: out of process memory when trying to allocate 1052696 bytes (pga heap,log read buffer) ORA-07445: exception encountered: core dump [kgdsdst()+16] [SIGSEGV] [ADDR:0xFFFFFFFF7FFB4634] [PC:0x1081A1C90] [Address not mapped to object] []在查看的时候,并没有发现有什么语句问题的,检查系统限制如下:root@mytest# ulimit -acore file size (blocks, -c) unlimiteddata seg size (kbytes, -d) unlimitedfile size (blocks, -f) unlimitedopen files (-n) 256pipe size (512 bytes, -p) 10stack size (kbytes, -s) 8192cpu time (seconds, -t) unlimitedmax user processes (-u) 29995virtual memory (kbytes, -v) unlimited同时,报错中指出Address not mapped to object,可能存在没有足够的交换分区紧接着,又有如下报错Errors in file /oracle/mytest/saptrace/diag/rdbms/mytest/mytest/trace/mytest_psp0_27454.trc: ORA-27300: OS system dependent operation:fork failed with status: 12ORA-27301: OS failure message: Not enough spaceORA-27302: failure occurred at: skgpspawn3根据官网的介绍如下:CauseThis issue is mainly caused by lack of memory / swap. Checking the memory configuration on the server, we have found the following综合分析,报了04030的错误,而下面又分别报了27302及27301的错误。
ORA-04030错误处理方法总结----HRP项目研发中心(董珮)一、错误现象描述目前正在使用的为oracle 10g数据库,使用过程中报ORA-04030错误,具体错误信息是: ORA-04030: 在尝试分配...字节(...)时进程内存不足(如图所示)。
同时服务器表现为数据库无法登录,PL/SQL一直在登录页面登录,然后卡死,DOS窗口登录现象为ORA-04030:????二、错误原因分析根据异常信息,可以很容易的判断是由于内存使用过多,分配不足所致的,但是电脑本身内存并不小(4G内存,当时已使用内存仅为1.56G),经查,是因为oracle在分配内存时,设了一个默认值,而这个默认值比较小,当程序使用过程中数据库占用内存超出这个限制的时,就会出现这个错误。
值得我们注意的是max_sga_size和sga_target的设置。
max_sga_size指的是可动态分配的最大值﹐而sga_target是当前已分配的最大sga。
max_sga_size是不可以动态修改的﹐而sga_target是可动态修改﹐直到达到max_sga_size的值。
如果在实例启动时﹐max_sga_size < sga_target或max_sga_size未设定﹐则启动后max_sga_size的值会等于sga_target的值,这时如果内存占用超过sga_target,则会出现ORA-04030的错误。
三、解决方案通过调整SGA的值来解决此问题,操作前需要注意以下事项:1.查看服务器操作系统,因为32操作系统SGA上限值为1.7G,64位目前我还查到有没有确定上限值。
2.SGA、PGA的分配原则如下:OLTP:SGA=系统内存*0.56,PGA=SGA*(0.1~0.2)OLAP:SGA=系统内存*0.48,PGA=SGA*(0.45~0.65)3.记得一定要在修改SGA前备份SPFILEORCL.ORA文件,切记!!!该文件路径:10g oracle为%%\oracle\product\10.2.0\db_1\dbs\SPFILEORCL.ORA11g oracle为%%\app\Administrator\product\11.2.0\dbhome_1\database \SPFILE%ORACLE_SID%.ORA下面就可以放心的修改SGA了,修改步骤如下:1.重启服务,因为此时你的数据库已经登录不上去了,先重启一下服务释放部分内存,保证数据库能正常登录;2.调整SGA大小用DBA权限登录执行下面语句:alter system set sga_max_size=1024M scope=spfile;(以1G为例,实际情况可根据上文分配原则以及具体数据量来酌情分配)alter system set sga_target=1024M scope=spfile;(当然,该值也可以小于1024)执行之后重启ORACLE服务变更方可生效注意:如果修改之后数据库无法正常登录,报类似于“ORA-01034: ORACLE not available;ORA-27101: shared memory realm does not exist”等错误,则可能是因为你没有留意上述注意事项,将SGA值改的太大了,超过了操作系统要求上限,解决办法为还原注意事项3中的SPFILEORCL.ORA 文件,重启服务之后再重新进行SGA的调整。
如何解决ORA-04031 错误翻译:Fenng文章内容1.和共享池(shared pool)相关的实例参数2.诊断ORA-04031错误3.解决ORA-04031错误• 已知的Oracle BUG• 共享池碎片o V$SQLAREA 视图o X$KSMLRU 视图• 小的共享池尺寸o 库高速缓冲(library cache)命中率o 共享池大小的计算4.对ORA-04031的高级分析诊断并解决ORA-04031错误对于大多数应用来说,共享池的大小对于Oracle性能来说都是很重要的。
共享池中保存数据字典高速缓冲和完全解析或编译的的PL/SQL块和SQL语句。
当我们在共享池中试图分配大片的连续内存失败的时候,Oracle首先刷新池中当前没使用的所有对象,使空闲内存块合并。
如果仍然没有足够大单个的大块内存满足请求,就会产生ORA-04031错误。
当这个错误出现的时候你得到的错误信息如下:Error: ORA 4031Text: unable to allocate %s bytes of shared memory (%s,%s,%s)---------------------------------------------------------------------------------------------------------------- Cause: More shared memory is needed than was allocated in the shared pool.Action: Either use the dbms_shared_pool package to pin large packages, reduce your use ofshared memory, or increase the amount of available shared memory by increasing the value ofthe init.ora parameter "shared_pool_size".1.共享池相关的实例参数在继续之前,理解下面的实例参数是很重要的:• SHARED_POOL_SIZE – 这个参数指定了共享池的大小,单位是字节。
Oracle ORA-04031 错误说明分类:Oracle 故障解决案例Oracle 性能调优2011-06-15 14:42 364人阅读评论(0) 收藏举报在老熊的Blog上看到他们写的有关ORA-04031的文章,转到blog。
老熊的Blog:/an-ora-04031-case.htmlORA-04031这个错误,几乎每一个专业的DBA都遇到过。
这是一个相当严重的错误,Oracle进程在向SGA申请内存时,如果申请失败,则会报这个错误。
大部分情况下是在向SGA中的shared pool申请内存时失败,而少有向large pool等池中申请内存失败。
比如下面的报错:Wed Apr 27 16:00:25 2011Errors in file/oracle/app/oracle/admin/zxin/bdump/zxin1_ora_2052294.trc:ORA-04031: unable to allocate 4128 bytes of shared memory("shared pool","unknown object","sga heap(3,0)","kgllk hash table")这里很清楚地表示出来,是在向shared pool申请内存时失败。
shared pool内存申请(分配)失败,通常有如下的几种可能:(1)shared pool过小,比如在SGA Manual Management方式下,shared pool 设置过小。
比如一套数千连接的大系统,shared pool只设置了几百M。
这种情况下,要解决问题很解单,增加shared pool的大小即可。
(2)应用没有使用绑定变量,硬解析非常多,导致shared pool内存碎片严重,分配大块内存时不能获得连续的内存空间。
硬解析多的一个变种是虽然使用了绑定变量,但是由于某种原因,Cursor不能共享,导致Child Cursor非常多。
ORA-04031故障分析处理当任何试图分配一个大的连续的共享池中的内存失败,Oracle首先会刷新掉共享池中所有目前不在使用的对象,然后使得内存块被合并在一起。
如果内存块仍然不够满足需求,那么就会出现ORA- 04031错误。
这些错误同样可能发生在ASM的实例中。
默认的共享池的大小基本能够满足大部分的环境,但是如果遇到ORA-04031错误的时候可能就需要增大。
当遇到这个错误的时候,往往会出现如下的消息显示:04031, 00000, "unable to allocate %s bytes of shared memory ("%s","%s", "%s","%s")"先来了解一下跟共享池相关的实例参数:a) SHARED_POOL_SIZE --–这个参数指定共享池的大小,以字节为单位。
b) SHARED_POOL_RESERVED_SIZE --–指定为大的连续的共享池内存请求预留的共享池的大小。
这个参数连同SHARED_POOL_RESERVED_MIN_ALLOC参数,可以用于避免消除由于共享池碎片太多导致迫使Oracle搜寻空闲的共享池空间而产生ORA-04031错误。
c) _SHARED_POOL_RESERVED_MIN_ALLOC --–这个参数用于控制预留内存的分配。
大于这个参数的内存分配可以使用预留内存的列表。
这个参数的默认值适合绝大多数的系统,如果增加这个参数值,那么Oracle将允许分配越少的预留内存列表而更多的请求共享池列表。
这个参数在Oracle8i和之后的版本都是隐含参数,但是可以通过执行如下SQL查到:select nam.ksppinm NAME,val.KSPPSTVL VALUEfrom x$ksppi nam,x$ksppsv valwhere nam.indx = val.indxand nam.ksppinm like '%shared%' order by 1;对于Oracle10g,具有一个新特性自动内存管理,允许dba保留用于分配给Oracle内存区域使用的共享内存。
环境:oracle 11.2.0.3 rac ,AIX6.1第一节点ASM实例报04031,赶到单位检查日志:ORA-04031: unable to allocate 3896 bytes of shared memory ("shared pool","select name_kfgrp, number_kf...","sga heap(1,0)","kglsim object batch")登录ASM实例,检查SGASQL> select bytes,name,pool from v$sgastat where name like '%free memory%';60501728 free memory shared pool未发现异常设置事件检查TRACESQL >alter session set events '4031 trace name heapdump level 536870914';SQL >alter session set events '4031 trace name context off;检查TRACE文件1、Memory Utilization of Subpool 1中未发现异常2、LIBRARY CACHE STATISTICS--SQL AREA reload较高,其他正常。
MOS上记录了一个11.2.0.3的BUG:Oracle Server - Enterprise Edition - Version 11.2.0.3 and laterInformation in this document applies to any platform.Symptoms11.2.0.3.0 ASM instance crash after giving the following errors:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Tue Mar 27 14:09:16 2012Errors in file /app/oracle/diag/asm/+asm/+ASM1/trace/+ASM1_ora_2966.trc (incident=206840):ORA-04031: unable to allocate 3896 bytes of shared memory ("shared pool","DECLAREhdl number; blk_nu...","sga heap(1,0)","kglsim object batch")Incident details in: /app/oracle/diag/asm/+asm/+ASM1/incident/incdir_206840/+ASM1_ora_2966_i206840.trc ... <the above repeat massively>Tue Mar 27 15:11:28 2012DDE: Problem Key 'ORA 4031' was completely flood controlled (0x6)Further messages for this problem key will be suppressed for up to 10 minutesTue Mar 27 15:15:25 2012Errors in file /app/oracle/diag/asm/+asm/+ASM1/trace/+ASM1_ora_2967.trc (incident=211937):ORA-00600: internal error code, arguments: [ksxp_rm_check0], [0xFFFFFFFF79122998], [0], [0x517854080], [], [], [], [], [], [], [], []Incident details in: /app/oracle/diag/asm/+asm/+ASM1/incident/incdir_211937/+ASM1_ora_2967_i211937.trc WARNING: ASM communication error: op 0 state 0x0 (15055)ERROR: direct connection failure with ASMNOTE: Deferred communication with ASM instanceErrors in file /app/oracle/diag/asm/+asm/+ASM1/trace/+ASM1_ora_21400.trc:ORA-15055: unable to connect to ASM instanceORA-00600: internal error code, arguments: [ORA_NPI_ERROR], [600], [ORA-00600: internal error code, arguments: [ksxp_rm_check0],[0xFFFFFFFF79122998], [0], [0x517854080], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []CauseNon-published Bug:12925089 which fix is included starting 11.2.0.4根据ID 1370925.1推荐ASM配置:ReferencesNOTE:437924.1 - ASM & Shared Pool (ORA-4031)NOTE:1363369.1 - Things to Consider Before Upgrading to 11.2.0.3 Grid Infrastructure/ASMHdr: 13605735 11.2.0.3 PCW 11.2.0.3 PRODID-5 PORTID-46Abstract: SET ASM MEMORY_TARGET TO BE AT LEAST 1536M WHILE UPGRADING TO 11.2.0.3*** 01/18/12 02:34 pm REQUEST TEXT ***In 11.2.0.3, init.ora parameter "processes" will be default to "available CPUcores * 80 + 40". As the default value for "memory_target" is based on"processes", it can be insufficient if there's large number of CPU cores orlarge number of diskgroups which could cause issues, it's recommended toincrease the value of memory_max_target and memory_target while/beforeupgrading to 11.2.0.3 to the minimal of 1536m or the default.*** 01/18/12 02:34 pm BUSINESS NEED ****** 01/19/12 01:42 am ****** 02/03/12 02:18 pm ****** 02/03/12 02:18 pm RESPONSE ***ER is forwarded for further consideration修改相关参数bjschxdbcx01:/u01/app/grid/diag/asm/+asm/+ASM1/trace$vmstatSystem configuration: lcpu=40 mem=81920MB ent=10.00kthr memory page faults cpu----- ----------- ------------------------ ------------ -----------------------r b avm fre re pi po fr sr cy in sy cs us sy id wa pc ec6 1 9409443 1227672 0 0 0 215 399 0 4608 71811 23295 6 2 89 2 1.37 13.71.修改PROCESSES=CPU.CORE*80+402.metalink推荐memory_max_target = 4096m ,memory_target = 1536m3.修改_library_cache_advice=falseSQL> alter system set "_library_cache_advice"=false scope = spfile;System altered.SQL> alter system set memory_max_target = 4096m scope=spfile;System altered.SQL> alter system set memory_target = 1536m scope=spfile;System altered.SQL> alter system set processes = 32402 scope = spfile;System altered.--重启第一节点集群后现象消失crsctl stop cluster -n bjschxdbcx01crsctl start cluster -n bjschxdbcx01。