ablog

不器用で落着きのない技術者のメモ

データベース作成後に catalog.sql を実行すると ORA-04031

Oracle でデータベース作成後に catalog.sql を実行すると ORA-04031 が発生。

$ sqlplus / as sysdba
SQL> startup nomount
SQL> @create_database
Database created.
SQL> @?/rdbms/admin/catalog
ORA-00604: error occurred at recursive SQL level 1
ORA-04031: unable to allocate 16 bytes of shared memory ("shared pool","select
obj#,type#,ctime,mtim...","sql area","tmp") 

共有プールが足りないみたいなので、共有プールをとりあえず 100M にして、やり直したら成功した。

$ vi $ORACLE_HOME/dbs/initmatrix.ora
(中略)
shared_pool_size = 100M
$ sqlplus / as sysdba
SQL> shutdown abort
SQL> exit
$ cd $ORACLE_BASE/oradata/matrix/
$ rm *
$ cd $ORACLE_BASE/admin/matrix/scripts
$ sqlplus / as sysdba
SQL> startup nomount
SQL> @create_database
Database created.
SQL>  @?/rdbms/admin/catalog
(中略)
PL/SQL procedure successfully completed.

ググってみると、

> ORA-04031 …
あぁ…
こっちのエラーコード見逃してました><
適当に共有プールをinit.oraに設定(100M)してcreateで上手くいきました。

OTN Japan - 404 Error

同じようなことしてる人がいた。


また、catalog.sql や catproc.sql を実行するとなぜかエラーが発生する場合、単純に表領域が足りなくなっていることがある。仕事で使う環境ならそんなにサイズを小さくすることはないと思うけど。