oracle 的CDB[Container Database,容器数据库] 和PDB[Pluggable Database,可插拔数据库]
在Oracle数据库中,CDB(Container Database,容器数据库)和PDB(Pluggable Database,可插拔数据库)是Oracle 12c及以后版本中引入的新特性,它们为数据库的管理和部署提供了更灵活的方式。以下是对Oracle CDB表空间与PDB表空间的详细解释、对比以及管理操作的介绍。
1. Oracle CDB表空间的概念
Oracle CDB是一个逻辑上的数据库容器,它可以包含多个PDB。CDB本身也拥有其自己的表空间和数据库对象,这些表空间和对象对于CDB中的所有PDB都是可见的(除非特别限制)。CDB表空间是CDB中存储数据的基本逻辑单元,它用于存储数据库对象的物理文件。CDB表空间可以包括SYSTEM表空间、SYSAUX表空间等系统级表空间,以及用户自定义的表空间。
2. Oracle PDB表空间的概念
PDB是CDB中的一个逻辑上独立的数据库环境,它可以在CDB中被创建、删除或插拔。每个PDB都拥有自己的表空间和数据库对象,这些表空间和对象在PDB内部是独立的,但在CDB级别上可以通过特定的方式被访问和管理。PDB表空间是PDB中存储数据的基本逻辑单元,它们与CDB中的表空间在逻辑上是隔离的,但在物理上可能共享相同的存储介质。
3. Oracle CDB表空间与PDB表空间的区别
- 逻辑隔离:CDB表空间是CDB级别的,对所有PDB可见(除非特别限制);而PDB表空间是PDB级别的,仅在其所属的PDB内部可见。
- 管理范围:CDB表空间的管理范围是整个CDB,包括所有PDB;而PDB表空间的管理范围是单个PDB。
- 物理存储:虽然逻辑上隔离,但CDB和PDB的表空间在物理上可能共享相同的存储介质(如磁盘、ASM磁盘组等),具体取决于数据库的配置和存储策略。
4. Oracle CDB和PDB表空间管理的常用操作
- 创建表空间:在CDB中,可以直接使用CREATE TABLESPACE语句创建表空间,这些表空间对CDB中的所有PDB可见(如果未设置限制)。在PDB中,同样可以使用CREATE TABLESPACE语句创建表空间,但这些表空间仅在该PDB内部可见。
-- 在CDB中创建表空间
CREATE TABLESPACE my_cdb_ts DATAFILE '/path/to/my_cdb_ts.dbf' SIZE 100M;
-- 切换到PDB后创建表空间
ALTER SESSION SET CONTAINER = my_pdb;
CREATE TABLESPACE my_pdb_ts DATAFILE '/path/to/my_pdb_ts.dbf' SIZE 100M;
- 删除表空间:删除表空间的操作类似,但需要注意删除PDB表空间时,可能会影响到PDB中的数据。
-- 删除CDB中的表空间
DROP TABLESPACE my_cdb_ts INCLUDING CONTENTS AND DATAFILES;
-- 切换到PDB后删除表空间
ALTER SESSION SET CONTAINER = my_pdb;
DROP TABLESPACE my_pdb_ts INCLUDING CONTENTS AND DATAFILES;
- 查看表空间:在CDB或PDB中,可以使用SELECT语句从DBA_TABLESPACES等系统视图中查询表空间信息。
-- 在CDB中查看表空间
SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;
-- 切换到PDB后查看表空间
ALTER SESSION SET CONTAINER = my_pdb;
SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;
5. 在何种场景下会选择使用CDB或PDB表空间的建议
- 多租户环境:在需要支持多个独立数据库环境但希望共享相同硬件和数据库实例的场景下,使用CDB和PDB可以简化管理并降低成本。每个PDB可以作为一个独立的数据库环境,而CDB则提供了统一的管理和监控界面。
- 灵活部署:PDB的插拔特性使得数据库的部署和迁移变得更加灵活。可以将PDB从一个CDB中拔出并插入到另一个CDB中,从而实现数据库的快速迁移和部署。
- 资源隔离:虽然PDB在逻辑上是独立的,但它们可以共享CDB的资源(如内存、CPU等)。因此,在需要资源隔离但又不希望为每个数据库实例分配独立硬件的场景下,使用CDB和PDB可以是一个不错的选择。
总之,Oracle CDB和PDB表空间为数据库的管理和部署提供了更灵活、更高效的解决方案。在选择使用CDB或PDB表空间时,需要根据具体的业务需求和场景来进行决策。
----------------------------=========================-------------------------------------------
查看CDB和PDB
-- 以sysdba身份登录
sqlplus /nolog
conn /as sysdba;
-- sysdba身份可以查看所有pdb数据库
show pdbs;
-- 切换会话到指定数据库
alter session set container=cdb$root; --切换会话到CDB
alter session set container=ORCLPDB; --切换会话到PDB
-- 查看当前连接数据库: 返回cdb或者pdb名称
show con_name;
-- 查看当前用户及其用户空间
select * from user_users;
建立PDB
建立PDB并指定管理员和默认tablespace
-- 用pdbseed创建pdb并指定pdb位置,设置PDB默认管理员用户autumnp1,并指定该pdb的默认表空间
create pluggable database pdbautumn
admin user autumnp1 identified by orcl
roles = (DBA)
FILE_NAME_CONVERT=('D:\Oracle\oradata\ORCL\pdbseed','D:\Oracle\oradata\ORCL\pdbautumn')
DEFAULT TABLESPACE autumnpdbdefaulttabsp DATAFILE 'D:\Oracle\oradata\ORCL\pdbautumn\autumnpdbdefaulttabsp.dbf' SIZE 10M AUTOEXTEND ON NEXT 1M;
-- 赋予用户指定表空间的配额(指定大小,也可以用UNLIMITED不限制大小)
ALTER USER autumnp1 QUOTA UNLIMITED ON autumnpdbdefaulttabsp;
-- 打开指定pdb数据库
alter pluggable database pdbautumn open;
-- 打开全部pdb数据库
alter pluggable database all open;
登录PDB数据库
sqlplus autumnp1/orcl@127.0.0.1:1521/pdbautumn
用户类型
COMMOM USERS: 普通用户,一般建立在CDB层,用户名需要以C#或C##开头。这种用户可以在CDB和各PDB直接切换session。
LOCAL USERS: 本地用户,仅建立在PBD层,建立的时候需要指定容器。
新建COMMON用户
新建common用户并赋予权限
-- 创建用户并指定密码,没有指定表空间会用默认的表空间USERS和TEMP
create user c##aeolian identified by orcl;
-- 给common user赋予权限
grant connect,resource,dba to c##aeolian;
-- 一次性赋予所有权限,注意这里的create session仅限用户在当前(dba所处的数据库)这个pdb建立连接。
grant dba,connect,resource,create session,create table,create view,unlimited tablespace to aeolian ;
-- 查看登录用户的表空间
select * from user_users;
登录
-- 登录默认的CDB,不用指定ip:port/dbname
sqlplus c##autumn/orcl
-- 登录其他PDB
-- 需要其他PDB的dba进行授权grant connect,resource,dba to c##autumn;
-- 授权方式一:sqlplus system/orcl登录后切换到pdb中alter session set container=ORCLPDB;然后进行授权
-- 授权方式二:sqlplus aeolian/orcl@127.0.0.1:1521/ORCLPDB as sysdba拥有dba角色的local用户登录后进行授权
sqlplus c##autumn/orcl@127.0.0.1:1521/ORCLPDB
新建Local用户
创建表空间
首先创建表空间,如果不事先创建表空间,新建用户时就会用默认表空间user和temp
#永久表空间创建,datafile可以指定表空间物理文件位置
#大小 500M,每次 5M 自动增大,最大不限制
create tablespace aeolian_tablespace datafile 'aeolianfile.dbf' size 100M autoextend on next 5M maxsize unlimited;;
#临时表空间创建
create temporary tablespace aeolian_template_tablespace tempfile 'aeoliantempfile.dbf' size 10m;
#查看表空间及其文件位置
select file_name,tablespace_name from dba_data_files;
创建local user
切换到指定PDB数据库ORCLPDB下面新建用户时,新建的用户为数据库PDB下面的local用户,而system作为common用户可以随意切换cdb和各个pdb。system要想在指定pdb下操作需要先切换session到指定的pdb下面。
#切换到PDB数据库,可以用dba用户执行show pdbs查看所有pdb数据库。不切换默认就是默认的CDB数据库。
alter session set container=ORCLPDB;
#创建账户密码,12c往后普通用户需要带前缀C##或c##
#创建用户,并指定默认表空间,如果不指定表空间则默认永久性表空间为system,默认临时表空间为temp
create user aeolian identified by orcl default tablespace aeolian_tablespace temporary tablespace aeolian_template_tablespace;
# 普通用户:授予connect, resource权限。
# DBA管理用户:授予connect,resource, dba权限。
# 提示:connect,resource, dba三个都是oracle内置已经绑定好权限的角色
grant connect,resource,dba to aeolian;
local用户登录PDB
#用户登录 username/pwd@IP:Port/PDB
sqlplus aeolian/orcl@127.0.0.1:1521/ORCLPDB
用户和表空间关系
一个用户可以同时管理很多表空间,但是默认表空间只有一个,当创建表,视图,引索等不指定表空间时都会存放在默认表空间中。
的默认表空间
-- 可以将tablespace2这个表空间分配给autumn这个用户来管理
ALTER USER autumn QUOTA UNLIMITED ON tablespace2;
-- 指定默认表空间
ALTER USER autumn DEFAULT TABLESPACE tablespace2;
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验