同样的语句:plsqldeveloper导致ORA-04031,但在本地执行则正常!

[复制链接]
查看11 | 回复9 | 2009-11-30 15:55:11 | 显示全部楼层 |阅读模式
同样的语句:plsqldeveloper导致ORA-04031,但在本地执行则正常!
用plsqldeveloper执行:
SQL> select tablespace_name,file_name,bytes/1024/1024/1024,autoextensiblefrom dba_temp_files order by tablespace_name,FILE_NAME;

select tablespace_name,file_name,bytes/1024/1024/1024,autoextensiblefrom dba_temp_files order by tablespace_name,FILE_NAME

ORA-04031: unable to allocate 3888 bytes of shared memory ("shared pool","unknown object","sga heap(2,0)","kglsim object batch")

用ssh在服务器本地执行:
SQL> SQL> SQL> SQL> select tablespace_name,file_name,bytes/1024/1024/1024,autoextensiblefrom dba_temp_files order by tablespace_name,FILE_NAME;

TABLESPACE_NAMEFILE_NAME
BYTES/1024/1024/1024 AUT
-------------------- ---------------------------------------------------------------------- -------------------- ---
TEMP2
/data/oradata/smsdb/temp021.dbf
4.8828125 YES
难道是plsqldeveloper的bug?
回复

使用道具 举报

千问 | 2009-11-30 15:55:11 | 显示全部楼层
ORA-04031---查了一下:可能是共享池过小
于是查看服务器:sga_max_size 1680M,32bit linux,只能这么大。shared_pool_size 352M,db_cache_size1232M
感觉db_cache_size占得内存太多了。于是打算分500m给shared_pool_size。
SQL> alter system set db_cache_size=732m;

System altered

SQL> alter system set shared_pool_size=852m;

alter system set shared_pool_size=852m

ORA-02097: parameter cannot be modified because specified value is invalid
ORA-04033: Insufficient memory to grow pool

SQL> sho parameter db_c

NAME
TYPEVALUE
------------------------------------ ----------- ------------------------------
db_cache_advice
stringON
db_cache_size
big integer 736M
db_cache_size只减少了496M!
SQL> alter system set shared_pool_size=848m;(过了好几分钟才反馈结果。)

alter system set shared_pool_size=848m

ORA-02097: parameter cannot be modified because specified value is invalid
ORA-04033: Insufficient memory to grow pool

SQL> sho parameter shared

NAME
TYPEVALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address
integer 0
max_shared_servers
integer
shared_memory_address
integer 0
shared_pool_reserved_size
big integer 18454937
shared_pool_size
big integer 800M
shared_server_sessions
integer
shared_servers
integer 1

shared_pool_size只分配了800M,为什么没有分配成848m呢?剩下的48M哪去了呢?
=================初始的一些查询数据:
SQL> SELECT free_space, avg_free_size,used_space, avg_used_size, request_failures,
¡¡¡¡last_failure_size
¡¡¡¡FROM v$shared_pool_reserved;
23
FREE_SPACE AVG_FREE_SIZE USED_SPACE AVG_USED_SIZE REQUEST_FAILURES LAST_FAILURE_SIZE
---------- ------------- ---------- ------------- ---------------- -----------------
16605060448785.405186561250421.9459 117479
3904

SQL> sho parameter SHARED_POOL_RESERVED_MIN_ALLOC ;
SQL> sho parameter shared_pool_reserved

NAME
TYPEVALUE
------------------------------------ ----------- ------------------------------
shared_pool_reserved_size
big integer 18454937
SQL> sho parameter sga

NAME
TYPEVALUE
------------------------------------ ----------- ------------------------------
lock_sga
boolean FALSE
pre_page_sga
boolean FALSE
sga_max_size
big integer 1680M
sga_target
big integer 1680M

db_cache_size
big integer 1232M

SQL> sho parameter shared

NAME
TYPEVALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address
integer 0
max_shared_servers
integer
shared_memory_address
integer 0
shared_pool_reserved_size
big integer 18454937
shared_pool_size
big integer 352M
shared_server_sessions
integer
shared_servers
integer 1
[ 本帖最后由 lixunpeng 于 2010-5-29 20:42 编辑 ]
回复

使用道具 举报

千问 | 2009-11-30 15:55:11 | 显示全部楼层
还有,不是说10G 的sga_target=0才能手动管理sga吗?
为什么我现在可以改池大小呢?
db 10.2.0.1.0
NAME
TYPEVALUE
------------------------------------ ----------- ------------------------------
lock_sga
boolean FALSE
pre_page_sga
boolean FALSE
sga_max_size
big integer 1680M
sga_target
big integer 1680M
回复

使用道具 举报

千问 | 2009-11-30 15:55:11 | 显示全部楼层
ORA-04031是缓冲区过小,但是plsqldeveloper导致ORA-04031是非常奇怪的现象?不理解。
shared_pool_size只分配了800M,为什么没有分配成848m呢?剩下的48M哪去了呢?
alter system set shared_pool_size=848m;的时候报错了,48M的丢失是系统只能将shared_pool_size扩展到800M。
回复

使用道具 举报

千问 | 2009-11-30 15:55:11 | 显示全部楼层
ORACLE没有说分配了sga_target就不能分配 db_cache_size 和shared_pool_size和java_pool_size等的大小. 在分配了sga_target以后,在手动的分配db cache,shared pool一般是为了防止ORACLE内存的大的抖动.
回复

使用道具 举报

千问 | 2009-11-30 15:55:11 | 显示全部楼层
即使是动态调整,ORACLE也会将你设置的值作为该参数动态调整的最小值
回复

使用道具 举报

千问 | 2009-11-30 15:55:11 | 显示全部楼层
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-04033: Insufficient memory to grow pool
估计是db_cache buffer还没有释放出重新分配的内存,导致没有足够的内存来分配。
回复

使用道具 举报

千问 | 2009-11-30 15:55:11 | 显示全部楼层
原帖由 achilly 于 2010-5-29 12:29 发表
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-04033: Insufficient memory to grow pool
估计是db_cache buffer还没有释放出重新分配的内存,导致没有足够的内存来分配。

噢,那我等一段时间再试验一下,看能不能再加上48m。
回复

使用道具 举报

千问 | 2009-11-30 15:55:11 | 显示全部楼层
原帖由 7945ssp 于 2010-5-29 12:15 发表
ORACLE没有说分配了sga_target就不能分配 db_cache_size 和shared_pool_size和java_pool_size等的大小. 在分配了sga_target以后,在手动的分配db cache,shared pool一般是为了防止ORACLE内存的大的抖动.

学习了。
回复

使用道具 举报

千问 | 2009-11-30 15:55:11 | 显示全部楼层
原帖由 achilly 于 2010-5-29 12:29 发表
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-04033: Insufficient memory to grow pool
估计是db_cache buffer还没有释放出重新分配的内存,导致没有足够的内存来分配。

过了好几个小时,还是不行:
SQL> alter system set shared_pool_size=848m;

alter system set shared_pool_size=848m

ORA-02097: parameter cannot be modified because specified value is invalid
ORA-04033: Insufficient memory to grow pool
以后再试试。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行