Oracleエラー対応(ORA-04031):EXPDP処理を実行するとORA-04031が発生

Oracleエラー対応(ORA-04031):EXPDP処理を実行するとORA-04031が発生

現役DBAが解説 ~Oracleエラー対応~

エラーメッセージ

 ORA-04031: 共有メモリーのstringバイトを割当てできません

原因

初期化パラメータにて、EXPDPで使用するメモリ領域「STREAMS POOL」の割り当てが0(未設定)になっており、EXPDPを実行するたびに「STREAMS POOL」へのメモリ割り当てが発生していた。

そのため、メモリの断片化が発生しEXPDP実行時に「STREAMS POOL」への割り当てができなくなり、エラーが発生していた。

解決策

初期化パラメータ「STREAMS_POOL_SIZE」を変更(0→32MB)し、「STREAMS POOL」領域に常時メモリを確保するように変更。※以下に簡単な手順を記載

データベース再起動なしで変更可能なパラメータだが、断片化解消も併せて対応するため再起動を実施した。

実行コマンド(一部)

(1)パラメータ変更する場合は必ず初期化パラメータのバックアップを取得しましょう。

SQL> create pfile='/**/pfile_bk' from spfile='+DG1/***/spfile***.ora';

(2)パラメータ変更SQL実行(RAC環境)

SQL> ALTER SYSTEM SET STREAMS_POOL_SIZE = 32M SCOPE = SPFILE SID = '*';

実際の手順は上記コマンド前後にパラメータ値を確認するSQLも実行しています。