ORA-00959: 表空间不存在但我可以在选择中看到它

Pav*_*cek 5 oracle tablespaces oracle-12c

因此,我以 SYSDBA 的身份连接到 Oracle 并尝试运行此命令:

 create user C##demo identified by demopassword;
Run Code Online (Sandbox Code Playgroud)

以创建用户结束。

然后我运行:

alter user C##demo default tablespace PAVEL_DATA temporary tablespace PAVEL_TEMP;
Run Code Online (Sandbox Code Playgroud)

以错误结束:

ORA-00959: 表空间 'PAVEL_DATA' 不存在

但是如果我运行这个命令:

SELECT TABLESPACE_NAME, STATUS, CONTENTS
FROM USER_TABLESPACES;
Run Code Online (Sandbox Code Playgroud)

我可以看到表空间:

  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
Run Code Online (Sandbox Code Playgroud)

那么,为什么在创建表空间时会出现错误表空间不存在?

编辑

根据评论继续,这是我运行时看到的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
Run Code Online (Sandbox Code Playgroud)

因此,这两个表空间都是在 DB$ROOT (id=1) 和可插入数据瓶 (id>2) 中创建的。但是,当连接到可插拔数据库时,我仍然遇到相同的错误。一定是愚蠢的事情,但我现在瞎了……

ato*_*pas 5

创建普通用户时,使用以下子句指定的任何默认表空间、临时表空间或配置文件必须存在于属于 CDB 的所有容器中:

  • 默认表空间
  • 临时表空间
  • 配额
  • 轮廓

  • 更多的

    根据您更新的输出,PAVEL_DATA容器 number 中似乎不存在表空间4

    此外,如果当前关闭的 PDBS 上不存在指定的默认/临时表空间,则带有 or 子句的 or 命令可能CREATE USER会成功。但是,当您尝试使用刚刚创建或更改的普通用户打开或连接这些新打开的 PDB 时,可能会出现错误。ALTER USERDEFAULT TABLESPACEDEFAULT 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.
    
    Run Code Online (Sandbox Code Playgroud)