一
> EXP
> ORA
(
二
共享內存太小
三
SQL> show sga
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
show parameter shared_pool
NAME TYPE VALUE
shared_pool_reserved_size string
shared_pool_size string
SQL> select sum(free_space) from v$shared_pool_reserved;
SUM(FREE_SPACE)
我們可以看到沒有合理利用保留區
SQL> SELECT SUM(RELOADS)/SUM(PINS) FROM V$LIBRARYCACHE;
SUM(RELOADS)/SUM(PINS)
不算太嚴重
SQL> SELECT round((B
FROM V$SYSSTAT A
V$SYSSTAT B
WHERE A
AND B
AND ROWNUM =
hardpaseperc
SQL> SELECT FREE_SPACE
FREE_COUNT
REQUEST_FAILURES
REQUEST_MISSES
LAST_FAILURE_SIZE
FROM V$SHARED_POOL_RESERVED;
FREE_SPACE FREE_COUNT REQUEST_FAILURES REQUEST_MISSES LAST_FAILURE_SIZE
最近一次申請共享區失敗時該對象需要的共享區大小
select name from v$db_object_cache where sharable_mem =
name
dbms_lob
SQL> select * from x$ksmlru where ksmlrsiz>
ADDR INDX INST_ID KSMLRCOM KSMLRSIZ KSMLRNUM KSMLRHON KSMLROHV KSMLRSES
SQL> select KSPPINM
from x$ksppi
x$ksppcv
where x$ksppi
and KSPPINM =
KSPPINM KSPPSTVL
_shared_pool_reserved_min_alloc
我們看到INDX=
最近未使用的內存
區小和碎片過多
所以不符合申請保留區的條件
減低門值
因為LAST_FAILURE_SIZE<_shared_pool_reserved_min_alloc所以表明沒有有效的使用保留區
SQL> alter system set
alter system set
*
ERROR at line
ORA
運行dbmspool
SQL> @/home/oracle/products/
找出需要keep到共享內存的對象
SQL> select a
a
a
a
a
b
b
from v$db_object_cache a
v$sqlarea b
where a
(( a
and a
or a
and SUBSTR(b
OWNER NAME SHARABLE_MEM KEP EXECUTIONS ADDRESS HASH_VALUE
SELECT COUNT(OBJECT_ID)
FROM ALL_OBJECTS
WHERE OBJECT_NAME = :b
AND OWNER = :b
STANDARD
DBMS_LOB
DBMS_LOB
DBMS_LOB
DBMS_PICKLER
DBMS_PICKLER
SQL> execute dbms_shared_pool
SQL> execute dbms_shared_pool
SQL> execute dbms_shared_pool
SQL> execute dbms_shared_pool
SQL> select OWNER
SQL> alter system flush shared_pool;
System altered
SQL> SELECT POOL
POOL BYTES
shared pool
large pool
java pool
[oracle@ali
[oracle@ali
未發現錯誤
四
由於以上解決的方法是在不能DOWN機的情況下
但問題的本質是共享區內存過小
的解決問題
From:http://tw.wingwit.com/Article/program/Oracle/201311/17486.html