ORA-00604及ORA-04031错误处理

启动程序系统报错,plsql及sqlplus连接正常

Errors in file /home/oracle/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_j001_42779.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-04031: unable to allocate 264 bytes of shared memory ("shared pool","unknown object","CCUR^dafa7582","kglob")

查看trc日志,没看出异常信息,但基本应该是shared_pool 共享池的问题

普及下shared_pool的信息:

系统全局区SGA:
1)在一个instance只有一个sga
2)sga为所有session共享,随着instance启动而分配
3)instance down ,sga被释放

1.2 SGA的基本组件:Sga共享内存,linux中:tmsfs
1)shared pool
共享池是对SQL、PL/SQL程序进行语法分析、编译、执行的内存区域。共享池由库缓存(library cache),和数据字典缓存(data dictionary cache)以及结果缓存(result cache)等组成。共享池的大小直接影响数据库的性能。关于shared pool中的几个概念
①library cache:sql和plsql的解析场所,存放sql/plsql语句代码,以及它们的执行计划。以备其他用户共享(分析语句,并分析执行计划,放至library中以备共享。后期语句相同会被重用,即库池记录)
②data dictionary cache存放重要的数据字典信息,以备其他用户共享使用,用户权限等信息,在磁盘上是system01.dbf。Cache会调到内存中。
③server result cache存放服务器端的SQL结果集及PL/SQL函数返回值(读数据功能)
④User Global Area (UGA)共享服务器连接模式下如果没有配置large pool,则UGA属于SGA的shared pool, 专用连接模式时UGA属于PGA

ORA-00604及ORA-04031错误处理_第1张图片

查询shared_pool大小

SQL> show parameter shared_pool_size;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
shared_pool_size                     big integer 0
SQL> show parameter sga_max_size;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_max_size                         big integer 101G
SQL> 

=0代表系统自动分配,所以出现这个问题很奇怪,需要查看系统如何分配的,暂未再网上找到信息,希望博友提供专业知识

先直接改为sga_max_size的15%

alter system set shared_pool_size=sga_max_size*15%

重启后观察【/home/oracle/app/oracle/diag/rdbms/orcl/orcl/trace】无该问题

你可能感兴趣的:(oracle,数据库)