必须先切换到目标PDB再执行ALTER DATABASE DEFAULT TABLESPACE命令,否则在CDB$ROOT中操作无效;需验证当前容器为PDB(通过SHOW CON_NAME或SYS_CONTEXT),确保目标表空间ONLINE,且不可设为SYSTEM/SYSAUX。
不能在 CDB$ROOT 里改 PDB 的默认表空间,必须先切换到目标 PDB,再用 ALTER DATABASE DEFAULT TABLESPACE 命令设置 —— 这是唯一有效路径。
很多操作失败,根源在于没切对容器。哪怕你刚连上 / as sysdba,默认也在 CDB$ROOT,所有针对 PDB 的逻辑操作(包括设默认表空间)都会被忽略或报错。
SHOW CON_NAME:输出必须是你的 PDB 名(如 PDB1),不是 CDB$ROOT
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM dual:结果应与预期 PDB 名一致ALTER SESSION SET CONTAINER = PDB1(替换为实际 PDB 名)ALTER DATABASE 类命令只作用于当前容器,不跨 PDB这条命令修改的是整个 PDB 级别的默认永久表空间,影响所有后续未显式指定表空间的建表、建索引等操作。它不改变已有用户的 DEFAULT_TABLESPACE 属性,只影响新对象的落库位置。
ONLINE(查 DBA_TABLESPACES)ALTER DATABASE DEFAULT TABLESPACE users(替换 users 为你的业务表空间名)GRANT 权限,SYS 或 SYSTEM 在 PDB 内即可执行很多人查 DBA_USERS 里的 DEFAULT_TABLESPACE 字段,误以为它会随 ALTER DATABASE 改变 —— 实际不会。这个字段只反映用户创建时指定或继承的默认值,和 PDB 级默认表空间是两套机制。
SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_PERMANENT_TABLESPACE'
USERS),不是 SYSTEM
CREATE USER testuser IDENTIFIED BY pwd,再查 DBA_USERS 中该用户的 DEFAULT_TABLESPACE —— 它仍显示原值,但该用户建表时若不写 TABLESPACE,就会落到你设的 PDB 默认表空间里SYSTEM 和 SYSAUX 表空间不能设为 PDB 默认表空间(Oracle 显式禁止)真正容易被忽略的是:PDB 默认表空间控制的是“无显式指定时的落库位置”,而每个用户自己的 DEFAULT_TABLESPACE 是独立属性;两者共存,优先级是「用户级 > PDB 级」,但用户级只对那个用户生效,PDB 级则兜底所有未覆盖的情况。
小米路由器3G怎么恢复出厂设置(小米路由器3G该如何恢复出厂设置)
小米路由器3g和4a千兆版哪个好(小米路由器3g和4a千兆版对比区别)
Sensor Tower:ChatGPT全球份额跌破50%,Gemini与Claude加速追赶
OpenAI提速狂飙16倍!GPT-5.6多智能体V2上线,741轮怪物对话1秒打开
“十五五”时期 煤矿危险繁重岗位将由机器人替代
waytouniverse/ppt-generator:从 Markdown 大纲生成风格统一的 PPT 图片