Oracle
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) 中創建的。但是,當連接到可插拔數據庫時,我得到了同樣的錯誤。這一定是愚蠢的,但我現在瞎了……
創建普通使用者時,使用以下子句指定的任何預設表空間、臨時表空間或配置文件必須存在於屬於 CDB 的所有容器中:
- 預設表空間
- 臨時表空間
- 引用
- 輪廓
根據您更新的輸出
PAVEL_DATA
,容器編號中似乎不存在表空間4
。此外,如果指定的預設/臨時表空間在目前關閉的 PDBS 上不存在,則帶有or子句的
CREATE USER
orALTER 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.