Oracle

ORA-00959: 表空間不存在,但我可以在選擇中看到它

  • January 3, 2017

因此,我作為 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) 中創建的。但是,當連接到可插拔數據庫時,我得到了同樣的錯誤。這一定是愚蠢的,但我現在瞎了……

創建普通使用者時,使用以下子句指定的任何預設表空間、臨時表空間或配置文件必須存在於屬於 CDB 的所有容器中:

  • 預設表空間
  • 臨時表空間
  • 引用
  • 輪廓

更多的

根據您更新的輸出PAVEL_DATA,容器編號中似乎不存在表空間4

此外,如果指定的預設/臨時表空間在目前關閉的 PDBS 上不存在,則帶有or子句的CREATE USERorALTER USER命令可能會成功。但是,當您嘗試使用剛剛創建或更改的普通使用者打開或嘗試連接這些新打開的 PDB 時,您可能會遇到錯誤。DEFAULT TABLESPACE``DEFAULT TEMPORARY TABLESPACE

示範:

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.

引用自:https://dba.stackexchange.com/questions/159745