「駑馬十駕」 IT系情報を中心に調べた事をコツコツ綴っています。

はじめに

Oracle Databaseでユーザーを作成する際に、以下のようなエラーが発生することがあります。

ORA-00959: tablespace 'USERS' does not exist

このエラーは、指定した表領域(tablespace)が存在しない場合に発生します。本記事では、原因の解説と実際の解決方法をまとめます。


エラーの原因

ORA-00959「指定した表領域が存在しない」 ことを意味します。

例えば以下のSQLを実行した場合を考えます。

このとき、環境に USERS という表領域が作成されていなければ、ORA-00959 が返されます。

よくある原因

  • インストール時にデフォルトの USERS 表領域が作成されなかった

  • 他の管理者が不要と判断し削除してしまった

  • マルチテナント環境(CDB/PDB)で表領域の有無が異なる


対処法

1. 既存の表領域を確認する

まずは現在存在している表領域を確認します。

 
SELECT tablespace_name FROM dba_tablespaces;

ここで USERS が表示されなければ、エラーの通り存在していないことが確認できます。


2. 表領域を作成する

存在しない場合は新たに表領域を作成します。

 
CREATE TABLESPACE USERS DATAFILE '/u01/app/oracle/oradata/ORCL/users01.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;

※ データファイルのパスは環境に応じて修正してください。


3. 既存の表領域を指定してユーザーを作成する

新しく表領域を作成せず、既存の表領域を利用する方法もあります。

 
CREATE USER testuser IDENTIFIED BY password DEFAULT TABLESPACE SYSTEM TEMPORARY TABLESPACE TEMP;

ただし、SYSTEM を業務用に利用するのは推奨されないため、専用の表領域を作成する方がベストです。


4. ユーザー作成後の権限付与

ユーザー作成が成功したら、最低限以下の権限を付与します。

 
GRANT CREATE SESSION TO testuser; GRANT CREATE TABLE TO testuser;

必要に応じて他の権限も付与してください。


まとめ

  • ORA-00959「指定した表領域が存在しない」 ことが原因

  • DBA_TABLESPACES ビューで表領域の存在を確認

  • 必要に応じて新規作成、または既存の表領域を指定する

表領域の存在を確認してからユーザー作成を行うことで、エラーを回避できます。

❓よくある質問(FAQ)

Q1. ORA-00959エラーはなぜ発生するのですか?

A. 指定した表領域(tablespace)が存在しない場合に発生します。ユーザー作成時の DEFAULT TABLESPACE に指定した名前が、データベース内に存在しないことが原因です。


Q2. 表領域が存在するかどうかを確認するには?

A. 以下のSQLで確認できます。

 
SELECT tablespace_name FROM dba_tablespaces;

ここに指定した名前が含まれていなければ、新しく表領域を作成する必要があります。


Q3. SYSTEM表領域を代わりに使っても良いですか?

A. 技術的には可能ですが推奨されません。SYSTEM はOracle内部で利用される表領域であり、業務用のオブジェクトを置くとパフォーマンスや管理に悪影響が出る可能性があります。専用の表領域を作成しましょう。


Q4. 表領域を作成するときのファイルパスはどう決めればいいですか?

A. 通常はOracleデータベースのデータファイル格納ディレクトリ(例:/u01/app/oracle/oradata/ORCL/)に置きます。環境ごとの構成ポリシーに従い、十分な容量のあるディスクを指定してください。


Q5. マルチテナント環境(CDB/PDB)でも同じ対応ですか?

A. はい。ただしCDB直下とPDB配下で表領域の有無が異なることがあります。ユーザーを作成するPDBに接続し直し、そのPDB内で表領域を確認・作成してください。

Ads by Google

コメントを残す

メールアドレスが公開されることはありません。