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も実行しています。