You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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: 表空间不存在的报错。

解决方案步骤

  1. 切换到目标PDB(XEPDB1)
    以SYSTEM用户登录后,执行语句切换到XEPDB1容器:
ALTER SESSION SET CONTAINER = XEPDB1;
  1. 在XEPDB1内创建表空间
    在当前PDB环境下重新创建CONCERTO_DATA表空间:
CREATE TABLESPACE CONCERTO_DATA
    datafile 'concerto_data.dbf' size 10M
    autoextend on
    next 512K
    maxsize unlimited;
  1. 关联用户与表空间
  • 若用户已存在,执行修改语句:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 19:55:49