最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何在Oracle 19c中设置PDB默认表空间
时间:2026-08-17 18:59:48 编辑:袖梨 来源:一聚教程网
必须先切换到目标PDB再执行ALTER DATABASE DEFAULT TABLESPACE命令,否则在CDB$ROOT中操作无效;需验证当前容器为PDB(通过SHOW CON_NAME或SYS_CONTEXT),确保目标表空间ONLINE,且不可设为SYSTEM/SYSAUX。
不能在 CDB$ROOT 里改 PDB 的默认表空间,必须先切换到目标 PDB,再用 ALTER DATABASE DEFAULT TABLESPACE 命令设置 —— 这是唯一有效路径。
确认当前容器是目标 PDB 而不是 CDB$ROOT
很多操作失败,根源在于没切对容器。哪怕你刚连上 / 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
执行 ALTER DATABASE DEFAULT TABLESPACE 设置
这条命令修改的是整个 PDB 级别的默认永久表空间,影响所有后续未显式指定表空间的建表、建索引等操作。它不改变已有用户的 DEFAULT_TABLESPACE 属性,只影响新对象的落库位置。
- 确保目标表空间已存在且状态为
ONLINE(查DBA_TABLESPACES) - 运行
ALTER DATABASE DEFAULT TABLESPACE users(替换users为你的业务表空间名) - 该语句无需指定用户,也不需要
GRANT权限,SYS或SYSTEM在 PDB 内即可执行 - 执行后立即生效,无需重启 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 级则兜底所有未覆盖的情况。