Oracle XE 18c创建用户遇ORA-00959:表空间不存在问题排查
ORA-00959错误排查:Oracle XE 18c CDB/PDB环境下创建用户失败
问题场景
在Oracle XE 18c中复用修改后的Oracle XE 11g脚本创建数据库时,CDB和PDB中的表空间、角色均创建成功,但执行CREATE USER命令时抛出ORA-00959: tablespace 'MY_TABLESPACE' does not exist错误。
复现步骤
SQLPLUS /NOLOG SQL> CONNECT SYS/<SYS pwd>@XE AS SYSDBA connected. SQL> SHOW CON_NAME CDB$ROOT SQL> CREATE TABLESPACE "MY_TABLESPACE" SIZE 50M AUTOEXTEND ON DATA FILE 'C:\OracleApp\ORADATA\XE\MyFile.DBF'; SQL> ALTER SESSION SET CONTAINER = XEPDB1; SQL> CREATE TABLESPACE "MY_TABLESPACE" LOGGING DATA FILE 'C:\OracleApp\ORADATA\XE\XEPDB1\MyFile.DBF' SIZE 100M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; /* 两个表空间及对应数据文件均已正确创建,文件位于对应目录:\ORADATA\XE 和 \ORADATA\XE\XEPDB1。 /* 创建两个角色:MY_ADMIN_ROLE 和 MY_NORMAL_ROLE,并授予权限等。 */ SQL> CREATE USER "MY_ADMIN_USER" PROFILE "DEFAULT" IDENTIFIED BY "<my admin pwd>" DEFAULT TABLESPACE "MY_TABLESPACE" TEMPORARY TABLESPACE "TEMP" QUOTA UNLIMITED ON "MY_TABLESPACE" ACCOUNT UNLOCK; ORA-00959: tablespace 'MY_TABLESPACE' does not exist.
错误原因
核心问题是不必要的双引号使用导致对象名大小写敏感:
- Oracle默认会将未加双引号的对象名自动转换为大写存储和查询,无需手动添加双引号。
- 你在创建表空间、用户时使用了双引号包裹名称,强制Oracle将对象名按原字符串(此处为大写)存储,但后续查询时若出现隐性的大小写匹配问题(如字符集差异、命令解析时的大小写转换异常),就会导致Oracle无法找到对应的表空间。
- 另外需确认执行
CREATE USER时,当前会话确实处于XEPDB1容器中,若意外切回CDB$ROOT,也会因找不到PDB中的表空间报错。
解决步骤
确认当前容器:执行以下命令确保会话在
XEPDB1中:SHOW CON_NAME;若输出不是
XEPDB1,执行ALTER SESSION SET CONTAINER = XEPDB1;切换。移除所有不必要的双引号:修改所有对象创建命令,去掉双引号(因为你的对象名均为大写,符合Oracle默认规则):
- 创建CDB表空间:
CREATE TABLESPACE MY_TABLESPACE SIZE 50M AUTOEXTEND ON DATA FILE 'C:\OracleApp\ORADATA\XE\MyFile.DBF'; - 创建PDB表空间:
CREATE TABLESPACE MY_TABLESPACE LOGGING DATA FILE 'C:\OracleApp\ORADATA\XE\XEPDB1\MyFile.DBF' SIZE 100M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; - 创建用户:
CREATE USER MY_ADMIN_USER PROFILE DEFAULT IDENTIFIED BY "<my admin pwd>" DEFAULT TABLESPACE MY_TABLESPACE TEMPORARY TABLESPACE TEMP QUOTA UNLIMITED ON MY_TABLESPACE ACCOUNT UNLOCK;
- 创建CDB表空间:
验证表空间存在:在
XEPDB1容器中执行查询,确认表空间存在:SELECT TABLESPACE_NAME FROM DBA_TABLESPACES WHERE TABLESPACE_NAME = 'MY_TABLESPACE';若返回结果,则表空间已正确创建,可继续执行用户创建命令。
内容的提问来源于stack exchange,提问作者Plomong
相关产品推荐
相关产品推荐

