Oracle PDB 创建

Oracle PDB 创建


前置条件

  • 当前连接到 CDB Root(CDB$ROOT
  • 具有 CREATE PLUGGABLE DATABASE 系统权限
  • 目标路径有足够空间和写权限

方式一:从种子创建(最常用)

基于 PDB$SEED 模板创建全新 PDB:

sql 复制代码
-- 基础创建
CREATE PLUGGABLE DATABASE hrpdb
  ADMIN USER pdb_admin IDENTIFIED BY password
  FILE_NAME_CONVERT=('/pdbseed/', '/hrpdb/');

-- 创建后打开
ALTER PLUGGABLE DATABASE hrpdb OPEN READ WRITE;

-- 保存状态(CDB 重启后自动恢复打开状态)
ALTER PLUGGABLE DATABASE hrpdb SAVE STATE;

常用参数:

参数 说明
ADMIN USER 创建 PDB 本地管理员账号
FILE_NAME_CONVERT 数据文件路径转换规则
CREATE_FILE_DEST 指定文件存放目录(Oracle 管理文件时使用)
STORAGE (MAXSIZE xG) 限制 PDB 最大存储空间
DEFAULT TABLESPACE 设置默认表空间

方式二:克隆现有 PDB

本地克隆

sql 复制代码
-- 将源 PDB 设置为只读(本地克隆要求)
ALTER PLUGGABLE DATABASE hrpdb CLOSE;
ALTER PLUGGABLE DATABASE hrpdb OPEN READ ONLY;

-- 执行克隆
CREATE PLUGGABLE DATABASE salespdb FROM hrpdb
  FILE_NAME_CONVERT=('/hrpdb/', '/salespdb/');

-- 恢复源 PDB 读写
ALTER PLUGGABLE DATABASE hrpdb CLOSE;
ALTER PLUGGABLE DATABASE hrpdb OPEN READ WRITE;

-- 打开新 PDB
ALTER PLUGGABLE DATABASE salespdb OPEN READ WRITE;

远程克隆(跨 CDB)

sql 复制代码
-- 先创建数据库链接
CREATE DATABASE LINK lnk_to_src
  CONNECT TO c##admin IDENTIFIED BY password
  USING 'source_cdb';

-- 远程克隆(源 PDB 无需停机)
CREATE PLUGGABLE DATABASE salespdb
  FROM hrpdb@lnk_to_src
  FILE_NAME_CONVERT=('/hrpdb/', '/salespdb/');

方式三:插入已拔出的 PDB

sql 复制代码
-- 使用 XML 描述文件插入
CREATE PLUGGABLE DATABASE salespdb
  USING '/backup/salespdb.xml'
  NOCOPY
  TEMPFILE REUSE;

-- NOCOPY:数据文件不移动,直接使用原路径
-- COPY:复制文件到新路径(默认)
-- MOVE:移动文件到新路径

方式四:重定位 PDB(迁移)

sql 复制代码
-- 从远程 CDB 迁移过来,源 PDB 自动关闭
CREATE PLUGGABLE DATABASE hrpdb
  FROM hrpdb@lnk_to_source
  RELOCATE
  AVAILABILITY MAX;

详见:[[Oracle PDB 迁移与重定位]]


方式五:快照克隆

sql 复制代码
-- 先创建快照
ALTER PLUGGABLE DATABASE pdb1 SNAPSHOT pdb1_snap_20260318;

-- 从快照克隆(速度极快,节省空间)
CREATE PLUGGABLE DATABASE pdb1_test
  FROM pdb1
  USING SNAPSHOT pdb1_snap_20260318;

方式六:代理 PDB

代理 PDB 是指向远程 CDB 中某个 PDB 的引用,本地不存储数据:

sql 复制代码
CREATE PLUGGABLE DATABASE proxy_pdb
  AS PROXY FROM pdb1@remote_link;

创建后验证

sql 复制代码
-- 查看 PDB 状态
SHOW PDBS;
SELECT NAME, OPEN_MODE, RESTRICTED FROM V$PDBS;

-- 查看 PDB 数据文件
SELECT FILE#, NAME FROM V$DATAFILE WHERE CON_ID = (
  SELECT CON_ID FROM V$PDBS WHERE NAME = 'HRPDB'
);

-- 查看兼容性警告
SELECT * FROM PDB_PLUG_IN_VIOLATIONS WHERE NAME = 'HRPDB';

删除 PDB

sql 复制代码
-- 先关闭,再删除(INCLUDING DATAFILES 同时删除物理文件)
ALTER PLUGGABLE DATABASE hrpdb CLOSE IMMEDIATE;
DROP PLUGGABLE DATABASE hrpdb INCLUDING DATAFILES;

相关推荐
雪可问春风17 小时前
docker环境部署
运维·docker·容器
XDHCOM17 小时前
ORA-32484重复列名错误,ORACLE数据库CYCLE子句故障修复与远程处理方案
数据库·oracle
lwx91485217 小时前
Linux-Shell算术运算
linux·运维·服务器
翻斗包菜17 小时前
PostgreSQL 日常维护完全指南:从基础操作到高级运维
运维·数据库·postgresql
somi717 小时前
ARM-驱动-02-Linux 内核开发环境搭建与编译
linux·运维·arm开发
呆瑜nuage18 小时前
MySQL表约束详解:8大核心约束实战指南
数据库·mysql
一博一言18 小时前
Oracle高版本Version_Count问题处理排查
oracle·dba
liliangcsdn18 小时前
Agent Memory智能体记忆系统的示例分析
数据库·人工智能·全文检索
那个失眠的夜18 小时前
Mybatis延迟加载策略
xml·java·数据库·maven·mybatis
Rick199318 小时前
SQL 执行流程
数据库·sql