質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Q&A

解決済

2回答

5074閲覧

ORA-04031の回避方法を探しています。

7713tim

総合スコア8

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

0グッド

1クリップ

投稿2018/04/24 09:39

編集2018/04/25 01:15

Oracle 11g データベースを使用したシステムでORA-04031が発生し、DB更新がとまってしまう現象が数週間~数ヶ月おきに発生する環境があり、回避方法を探しています。
Oracleのサポートセンターを契約しようとしたのですが、システムを導入しているライセンス数分(顧客数百件分)の契約を求められたため断念しました。
どなたかお詳しい方がいらっしゃいましたらご教授いただけないでしょうか。
###現場環境

  • DBサーバPC1台、クライアントPC数台のクローズドネットワーク

(DBのデータを更新するアプリはサーバPCで動作しています。)

  • サーバPCのOS : Windows Server 2012 Standard(x64)
  • サーバPCのメモリ : 4GB
  • DBアプリケーション : Oracle 11g
  • Oracleバージョン : 11.2.0.4.0

###現象発生時の状態
DBに接続するアプリ側ではサーバ、クライアント共にORA-04031ORA-0604などDBへアクセスできない事を示すエラーが発生するのですが、Oracle本体ではアラートログなど一切出力されず、至って正常な状態に見えます。
現象が発生した際は、DBへ接続しているアプリの再起動(切断、再接続)では復旧できず、サーバPC再起動でのみ復旧する状態です。
###ORAエラー詳細

ORA-00604: 再帰SQLレベル1でエラーが発生しました。 ORA-04031: 共有メモリーの32バイトを割当てできません。("shared pool", "select ...

###Oracleメモリ設定
初期化パラメータを設定したスクリプトは以下の通りです。

SQL

1ALTER SYSTEM SET MEMORY_TARGET = 2048M SCOPE=SPFILE; 2ALTER SYSTEM SET MEMORY_MAX_TARGET = 2048M SCOPE=SPFILE; 3ALTER SYSTEM SET SHARED_POOL_SIZE = 512M SCOPE=SPFILE; 4 5ALTER SYSTEM SET SGA_TARGET = 0M SCOPE=SPFILE; 6ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0M SCOPE=SPFILE; 7ALTER SYSTEM SET LOG_BUFFER = 1048576 SCOPE=SPFILE; 8ALTER SYSTEM SET CURSOR_SHARING = 'SIMILAR' SCOPE=SPFILE; 9ALTER PROFILE DEFAULT LIMIT 10 failed_login_attempts unlimited 11 password_life_time unlimited 12 password_lock_time unlimited 13 password_grace_time unlimited;

※最初に現象が発生した際はMEMORY_TARGET(MAXも同様)を1GBで設定していたのですが、現象発生後に2GBに増やしました。(それでも現象が発生しています。)
###Oracleのパラメータ

  • SHARED_POOL_RESERVED_SIZE : 51170508
  • LARGE_POOL_SIZE : 0
  • STREAMS_POOL_SIZE : 0
  • SGA_MAX_SIZE : 1G

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ORA- エラーはコードだけではなくメッセージも載せましょう。
DB サーバーが実際に積んているメモリは?

SYSユーザーより

SQL

1select version from v$instance ;

の結果は?

SHARED_POOL_RESERVED_SIZE
LARGE_POOL_SIZE
STREAMS_POOL_SIZE
MAX_SGA_SIZE
の内容も質問に載せてください。

Oracleのバグの可能性もあるのでサポート契約がないとパッチは適応できないので辛いですね。サポート契約してない人にオラクル・サポートから得た情報を教えるのも禁止されています。
ORA-600などオラクル・サポートに問合せないと解決できないエラーもありますから、次の機会にオラクルのライセンスを買う機会があったら、是非いっしょにサポート契約してください。胃に穴があかないためにも。

ORA-600 が発生してからOracleのサポート契約の必要性を説明して説得するパワーはもうありません。

ORA-04031エラーとはどのようなエラーか?

投稿2018/04/24 10:08

編集2018/04/24 12:31
Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

7713tim

2018/04/25 01:17

ご指摘ありがとうございます。 質問内容を追記しました。 サポート契約ですね・・・したいのは山々なのですが、現状厳しい状況です。 必要だという説明は続けていくつもりです。
Orlofsky

2018/04/25 17:49

>ORA-04031: 共有メモリーの32バイトを割当てできません。("shared pool", "select ... 共有メモリーが枯渇したので、shared_pool_sizeを増やしてください、と言っています。ここのselect文がどこのプログラムから実行されているか特定できていますか?憶測も含めて書くと、たとえば1回実行すれば良いところをLOOPの中で何百万回、何千万回実行していることはありませんか?カーソルはきちんとCLOSEしていますか? DBサーバーの負荷の少ない時間に ALTER SYSTEM FLUSH SHARED_POOL; を実行することで気休め程度になるかもしれません。 http://www.doppo1.net/oracle/trouble/ORA-04031.html 再現方法 を実行してしてみては? 開発環境で 初期化パラメータ open_cursors を100 or 50 で ORA-04031 を再現してみては? SIerを通すと割引してもらえなかったりするので、ライセンスを数百件分も買っているなら日本オラクル社から直接ライセンスを買うことでかなりの割引ができるはずです。サポート料も込みで。 http://www.oracle.com/technetwork/jp/articles/index-090582-ja.html statspack の SQL Statistics を調べることでパフォーマンス面から追跡できるSQLも見つかるかもしれません。
7713tim

2018/04/26 01:42 編集

ご回答ありがとうございます。 確かに、定期的にflushする仕組みを組み込む方法は検討する価値があると思います。 再現手順を拝見したところ、強制的にORA-04031を発生させるもののようですね。 試してみたいと思います。 >statspack 確かに参考になりそうです。勉強してみます。
7713tim

2018/04/26 01:49

>SIerを通すと 会社としては通す義理があるようなのですが、何とか回避できないか掛け合ってみます。 ありがとうございます。
Orlofsky

2018/04/26 03:45

去年の今頃、Oracleはライセンスを半額で売っていました。 http://tech.nikkeibp.co.jp/it/atcl/column/14/346926/042500951/ Oracleのソフトウェアはサポート契約を前提としている製品です。ただコストを削るためにサポート契約しないでライセンスを買うことを勧めたSIerは早めに切った方が良いです。ORA-04031の原因はOracleのバグと貴社のシステムのバグのどちらか、あるいは両方かもしれません。Oracleにはこの手のバグは多数あって、サポート契約すると見ることができる My Oracle Support Knowldge Base(旧KROWN クラウン:知識ベース)で公開されます。 数百ライセンスも買っているなら有償研修の割引や無償サービスなどいろいろな見返りがあるはずです。SIerはそれを貴社に渡さず、新規の顧客開拓に使っているかもしれません。有償研修に行けば1回くらいサポート契約なしでもサポートに質問を取り次いでくれるかも(あくまでかもで)しれません。 誤ったルールを作ることはどこの国でも良くあることです。しかし、そのルールが誤っていることがわかっても絶対に直そうとしないのも日本の伝統です。
7713tim

2018/04/27 03:31

情報ありがとうございます。 やはりサポート契約する方向で検討したいと思います。 迅速で的確なご助言ありがとうございました。 また機械がありましたらよろしくお願いいたします。
guest

0

再起動で直るんだったら、やっぱり共有メモリ関係が疑わしいですね。
bugだったら、夜間再起動をスケジュール化するとかしかなさそう。

投稿2018/04/24 13:06

sazi

総合スコア25184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

7713tim

2018/04/25 01:24

ご回答ありがとうございます。 夜間再起動は検討したのですが・・・24時間年中無休で稼働させないといけないシステムなので難しいという結論になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問