web-dev-qa-db-ja.com

ORA-00959:表領域は存在しませんが、選択で表示できます

したがって、私はSYSDBAとしてOracleに接続しており、次のコマンドを実行しようとしています。

 create user C##demo identified by demopassword;

それはユーザー作成で終わります。

次に、実行します:

alter user C##demo default tablespace PAVEL_DATA temporary tablespace PAVEL_TEMP;

これはエラーで終了します:

ORA-00959:表領域「PAVEL_DATA」が存在しません

しかし、このコマンドを実行すると:

SELECT TABLESPACE_NAME, STATUS, CONTENTS
FROM USER_TABLESPACES;

私はテーブルスペースを見ることができます:

  TABLESPACE_NAME          STATUS    CONTENTS
------------------------------ --------- ---------
SYSTEM                 ONLINE    PERMANENT
SYSAUX                 ONLINE    PERMANENT
TEMP                   ONLINE    TEMPORARY
USERS                  ONLINE    PERMANENT
UNDOTBS2               ONLINE    UNDO
PAVEL_DATA             ONLINE    PERMANENT
PAVEL_TEMP             ONLINE    TEMPORARY

では、作成時にエラーテーブルスペースが存在しないのはなぜですか?

[〜#〜]編集[〜#〜]

コメントに従って続けて、これは私が実行したときに私が見るものですselect tablespace_name, con_id from cdb_tablespaces

TABLESPACE_NAME            CON_ID
------------------------------ ----------
PAVEL_DATA              1
PAVEL_TEMP              1
SYSTEM                  4
SYSAUX                  4
TEMP                    4
USERS                   4

TABLESPACE_NAME            CON_ID
------------------------------ ----------
SYSTEM                  3
SYSAUX                  3
TEMP                    3
USERS                   3
EXAMPLE                 3    
PAVEL_TEMP              3
PAVEL_DATA              3

したがって、両方のテーブルスペースがDB $ ROOT(id = 1)とプラガブルデータベース(id> 2)に作成されます。それでも、プラガブルデータベースに接続すると、同じエラーが発生します。ばかげているに違いないが、今は盲目だ...

2
Pavel Janicek

共通ユーザーを作成するとき、次の句を使用して指定されたデフォルトのテーブルスペース、一時テーブルスペース、またはプロファイルは、CDBに属するすべてのコンテナーに存在する必要があります。

  • デフォルトのテーブルスペース
  • 一時テーブルスペース
  • クォータ
  • プロフィール

その他

更新した出力によると、PAVEL_DATAテーブルスペースはコンテナ番号4に存在しないようです。

さらに、CREATE USERまたはALTER USERコマンドでDEFAULT TABLESPACEまたはDEFAULT TEMPORARY TABLESPACE句を指定すると、現在閉じているPDBSに指定されたデフォルト/一時テーブルスペースが存在しない場合、成功する可能性があります。ただし、作成または変更したばかりの共通ユーザーを使用して、これらの新しく開いたPDBを開こうとしたり接続しようとすると、エラーが発生する場合があります。

デモンストレーション:

SQL> create user c##_sales_hr identified by password default tablespace tbs_sales;
create user c##_sales_hr identified by password default tablespace tbs_sales
*
ERROR at line 1:
ORA-65048: error encountered when processing the current DDL statement in
pluggable database ORAPDB1
ORA-00959: tablespace 'TBS_SALES' does not exist


SQL> select tablespace_name, con_id from cdb_tablespaces;

TABLESPACE_NAME                CON_ID
------------------------------ ----------
SYSTEM                         1
SYSAUX                         1
UNDOTBS1                       1
TEMP                           1
USERS                          1
TBS_SALES                      1
SYSTEM                         4
SYSAUX                         4
TEMP                           4
ORAPDB1_TBS1                   4
MGMT_ECM_DEPOT_TS              4

11 rows selected.

SQL> alter session set container=orapdb1;

Session altered.

SQL> create tablespace tbs_sales datafile '+DATA' size 50M;

Tablespace created.

SQL> conn / as sysdba
Connected.
SQL> create user c##_sales_hr identified by password default tablespace tbs_sales;

User created.
2
JSapkota