次のようなエラーのため、共有プールをフラッシュしたい
ORA-04031: unable to allocate 32 bytes of shared memory
だから私は共有プールを使ってフラッシュしたい
alter system flush shared_pool;
使用してsysdbaとして接続
hwflow08:flman800 > sqlplus "conn as sysdba"
SQL*Plus: Release 10.2.0.3.0 - Production on Wed Jan 28 05:39:56 2015
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Enter password: Connected.
システム変更コマンドの実行中に、ORA-01012に直面しました
SQL> alter system flush buffer_cache;
alter system flush buffer_cache
*
ERROR at line 1:
ORA-01012: not logged on
共有プールをフラッシュするにはどうすればよいですか? (DBをシャットダウンしたり、共有プールのサイズを増やしたりしたくありません)
以前同じ問題が来た:
SHUTDOWN DB
へのオプションを残しました。したがって、STARTUP
の後、SYSDBAを介して接続し、同じクエリを実行したときalter system flush shared_pool;
そのときは、完全に正常に動作します。それで、メモリが不足しているときにOracle
がフラッシュ共有プールを許可しないのはなぜですか? alter system flush shared_pool;
を効率的に使用する方法
編集:10gのバグのようです
sGA領域のサイズ(バッファープール、辞書キャッシュ、ライブラリキャッシュ)を確認します。
動的ビューも確認してくださいv$sga_resize_ops
。そこに理由が見つかるかもしれません。また、これらのバージョンのOracleにはバグがあり、古いバージョンの実行計画が多すぎるとOracleがそれを取り除くことができませんでした。ターミナルパッチセット10.2.0.5にアップグレードする必要があります。
また、パラメータcursor_sharingの設定を検討する必要がありますが、これが役立つ場合もあります。 1つ目は原因を特定する必要があります。通常、これはHibernateなどのORMフレームワークが原因です。
更新:初期リリースの12c RACクルーザーにもメモリリークがあります。したがって、これを実行すると:
SQL> select * from ( select name, bytes/1024/1024/1024 from v$sgastat where pool ='shared pool' order by 2 desc ) where rownum <11;
NAME BYTES/1024/1024/1024
-------------------------- --------------------
ges resource dynamic 7.42374295
value block free list 4.61375274
free memory 2.66423168
gcs resources 1.78276435
ges enqueues 1.45691999
gcs shadows .990424648
db_block_hash_buckets .343753815
gcs res hash bucket .125
gc name table .09375
KTSL subheap .086000413
したがって、7GBのSGA RAM=がいくつかのクラスタウェアバッファによって占有されていることがわかります。
しかし、これらのエラーの最も一般的な原因は、ライブラリキャッシュの増大を引き起こす大量のハード解析によって引き起こされます。