Oracleエラー対応(ORA-01031):ORA-01031発生時の対処方法について
現役DBAが解説-Oracleエラー対応
Oracle Databaseでよく発生するエラーとしてORA-01031があります。
これは実行ユーザーに必要な権限が付与されていないために発生します。
今回はORA-01031の内容とエラー発生時の対応について、ユーザーがマテリアライズドビューを作成する場合を例にご説明します。
1. エラー発生例
ORA-01031エラー発生例(USER1がマテリアライズドビュー作成)
SQL> create materialized view USER1.TEST_MVIEW as select * from USER2.TEST_TABLE; create materialized view USER1.TEST_MVIEW as select * from USER2.TEST_TABLE ERROR at line 1: ORA-01031: insufficient privileges
2. エラー原因
USER1がマテリアライズドビューを作成しようとしたところ、必要なシステム権限が足りないためにエラーが発生しています。
3. エラー調査と対応
まず、USER1に付与されているシステム権限をUSER_SYS_PRIVSやDBA_SYS_PRIVSから確認します。
※USER_SYS_PRIVSは現行ユーザーのみのシステム権限を表示します
<システム権限確認>
SQL> select username, privilege, admin_option 2 from user_sys_privs; USERNAME PRIVILEGE ADM ---------------- -------------------------------------------- --- USER1 CREATE SESSION NO
確認の結果、USER1には「CREATE SESSION」権限しか付与されていません。
そのため、マテリアライズドビューを作成するために必要なシステム権限をSYSTEM等の管理ユーザーからGRANT文でUSER1に付与します。
今回気を付けなくてはいけないのは、マテリアライズドビューを作成するためには「CREATE MATERIALIZED VIEW」権限だけでは不足している、という点です。
「CREATE MATERIALIZED VIEW」権限に加えて「CREATE TABLE」権限も必要になります。
OracleのSQL言語リファレンスには、前提条件の項目に必要な各種権限が記載されていますので、不足している権限をこちらで確認しておきましょう。
※実際のマニュアルでは、マテリアライズドビュー作成に必要な権限は『「CREATE MATERIALIZED VIEW」権限と「CREATE TABLE」権限、または「CREATE ANY TABLE」権限のいずれか』と記載がありますが、「CREATE ANY TABLE」権限は他スキーマへのテーブル作成も可能になる強力な権限なので、なるべく付与しないことを推奨します
CREATE MATERIALIZED VIEW権限だけ付与した場合
SQL> select username, privilege, admin_option 2 from user_sys_privs; USERNAME PRIVILEGE ADM -------------- ---------------------------------------- --------- USER1 CREATE MATERIALIZED VIEW NO USER1 CREATE SESSION NO SQL> create materialized view USER1.TEST_MVIEW as select * from USER2.TEST_TABLE; create materialized view USER1.TEST_MVIEW as select * from USER2.TEST_TABLE * ERROR at line 1: ORA-01031: insufficient privileges
→まだ権限が足りないためエラー
CREATE MATERIALIZED VIEW権限とCREATE TABLE権限を付与した場合
SQL> select username, privilege, admin_option
2 from user_sys_privs; USERNAME PRIVILEGE ADM --------------- ---------------------------------------- -------- USER1 CREATE TABLE NO USER1 CREATE MATERIALIZED VIEW NO USER1 CREATE SESSION NO SQL> create materialized view USER1.TEST_MVIEW as select * from USER2.TEST_TABLE; Materialized view created.
→権限が足りているため、マテリアライズドビューが作成できた
4. 最後に
ORA-01031はDB操作する実行ユーザーに必要な権限が不足しているために発生するエラーです。
まずは実行ユーザーに付与されている権限の確認と、操作に必要な権限の確認を行い、追加の権限を付与しましょう。
なお、このとき権限を複数付与する代わりに管理者用のDBAロールなどを付与してしまうと、必要以上に強力な権限をユーザーに与えてしまい、セキュリティ上大きな問題になります。
エラー解消に必要な最低権限のみを与えるようにしてください。