Oracle XE 21c(Docker容器)无法将表空间关联至用户的问题
解决Oracle XE 21c中PDB用户无法关联CDB表空间的问题
问题根源
你在CDB$ROOT根容器(con_id=1)创建了CONCERTO_DATA表空间,但用户CONCERTO是在可插拔数据库XEPDB1(con_id=3)中创建的。Oracle多租户架构中,CDB与PDB的资源相互隔离,PDB内的用户无法直接访问CDB级的表空间,因此出现ORA-00959: 表空间不存在的报错。
解决方案步骤
- 切换到目标PDB(XEPDB1)
以SYSTEM用户登录后,执行语句切换到XEPDB1容器:
ALTER SESSION SET CONTAINER = XEPDB1;
- 在XEPDB1内创建表空间
在当前PDB环境下重新创建CONCERTO_DATA表空间:
CREATE TABLESPACE CONCERTO_DATA datafile 'concerto_data.dbf' size 10M autoextend on next 512K maxsize unlimited;
- 关联用户与表空间
- 若用户已存在,执行修改语句:
ALTER USER CONCERTO DEFAULT TABLESPACE CONCERTO_DATA;
- 若重新创建用户,直接指定默认表空间:
CREATE USER CONCERTO IDENTIFIED BY "password" DEFAULT TABLESPACE CONCERTO_DATA TEMPORARY TABLESPACE temp; -- 执行授权语句 GRANT DBA, CREATE ANY TYPE TO CONCERTO; GRANT EXECUTE ON DBMS_AQADM TO CONCERTO; GRANT EXECUTE ON DBMS_AQ TO CONCERTO; GRANT AQ_ADMINISTRATOR_ROLE TO CONCERTO; GRANT CONNECT TO CONCERTO; GRANT CREATE TYPE TO CONCERTO;
验证操作
执行以下语句确认用户默认表空间已更新:
SELECT username, default_tablespace FROM dba_users WHERE username = 'CONCERTO';
同时可以查询PDB内的表空间状态:
SELECT tablespace_name, con_id, STATUS FROM cdb_tablespaces WHERE TABLESPACE_NAME='CONCERTO_DATA';
此时结果应显示con_id=3(对应XEPDB1)且状态为ONLINE。
内容的提问来源于stack exchange,提问作者Denis Beurive
相关产品推荐
相关产品推荐

