Oracle 12c中如何管理容器数据库(CDB)与拨入式数据库(PDB)的表空间?

雨丽姑娘_2679

雨丽姑娘_2679

2026-06-24

590人浏览

原创

必须先切换到目标PDB容器再查表空间,因默认连接CDB$ROOT时dba_data_files仅显示CDB级文件;若在CDB中建表空间,PDB用户将因无权限而报ORA-01950;需确认PDB处于READ WRITE状态、路径隔离、禁用ALTER DATABASE DEFAULT TABLESPACE等CDB级命令。

查表空间前必须确认当前容器

直接连上 oracle 12c 默认进的是 cdb$root,dba_data_files 查出来的是 cdb 级别的文件,不是你业务 pdb 的。不切容器就建表空间,结果会建在 cdb 根里,后续用户建表会报 ora-01950: no privileges on tablespace —— 因为 pdb 用户默认没权限用 cdb 表空间。

先确认当前容器:show con_name;再查 PDB 列表:select name, open_mode from v$pdbs;确认目标 PDB 已处于 READ WRITE 状态。只有 open 的 PDB 才能操作其表空间。

  • 切到目标 PDB:alter session set container = orclpdb1
  • 再查数据文件:select tablespace_name, file_name from dba_data_files
  • 如果刚创建完 PDB 但没 open,alter pluggable database orclpdb1 open 再试

在 PDB 中创建永久表空间要指定完整路径

CDB 和 PDB 共享一套文件系统,但 Oracle 不允许 PDB 表空间文件和 CDB 文件混放(尤其不能放在 CDB 的 ORCL 目录下)。否则启动 PDB 时可能报 ORA-65043: invalid file name 或挂载失败。

路径必须指向该 PDB 对应的子目录,比如 CDB 数据目录是 /opt/oracle/oradata/ORCL/,那 PDB orclpdb1 的数据文件路径应为 /opt/oracle/oradata/ORCL/ORCLPDB1/ —— 注意末尾带 PDB 名,且该目录需提前 mkdir -p 并赋予 Oracle 用户读写权限。

  • 正确示例:create tablespace syz datafile '/opt/oracle/oradata/ORCL/ORCLPDB1/syz.dbf' size 1G autoextend on next 100M maxsize unlimited
  • 错误示例:create tablespace syz datafile '/opt/oracle/oradata/ORCL/syz.dbf'(建在 CDB 目录下)
  • 别漏掉 autoextend on,否则表空间满后 DML 直接失败,没有提示

设 PDB 默认表空间不能用 ALTER DATABASE

ALTER DATABASE DEFAULT TABLESPACE 是 CDB 级命令,对 PDB 无效。在 PDB 里执行只会报 ORA-65040: operation not allowed from within a pluggable database。

Crypto Sniper Oracle
Crypto Sniper Oracle

机构级量化市场预言机,提供订单簿失衡(OBI)、VWAP分析、自动化报告及Telegram预警。

下载

必须用 ALTER PLUGGABLE DATABASE 命令,且只能在 CDB$ROOT 下执行(连接 sys / as sysdba 后切过去),或在该 PDB 内以本地 sys 用户执行:

  • 在 CDB$ROOT 下设:alter pluggable database orclpdb1 default tablespace syz
  • 在 PDB 内设(需已连入):alter pluggable database default tablespace syz
  • 验证:select property_value from database_properties where property_name = 'DEFAULT_TBS_TYPE' 和 select property_value from database_properties where property_name = 'DEFAULT_PERMANENT_TABLESPACE'

临时表空间和 UNDO 表空间不能在 PDB 单独建

PDB 没有独立的 UNDO 表空间,整个 CDB 只有一个 UNDO 表空间,由 CDB$ROOT 管理。试图在 PDB 里建 UNDO TABLESPACE 会报 ORA-65087: cannot create undo tablespace in a pluggable database。

临时表空间可以建,但必须显式声明 TEMPORARY TABLESPACE(不是 TABLESPACE),且设为默认时也得用 ALTER PLUGGABLE DATABASE DEFAULT TEMPORARY TABLESPACE。

  • 建临时表空间:create temporary tablespace temp_pdb1 tempfile '/opt/oracle/oradata/ORCL/ORCLPDB1/temp01.dbf' size 50M
  • 设默认:alter pluggable database default temporary tablespace temp_pdb1
  • 别混淆:PDB 的 temp 表空间文件路径同样必须隔离,不能复用 CDB 的 temp01.dbf

真正容易被忽略的是:PDB 的临时表空间一旦设为默认,所有新用户都会自动分配它;但如果删掉这个表空间又没重设,默认会回退到 CDB 的 TEMP,而 PDB 用户未必有权限用——所以删之前务必先设好新默认。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

oracle

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

3903

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

831

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

1009

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

5741

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

2683

4

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

2024.04.07

5720

11

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

2024.04.29

7561

6

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1030

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

912

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程