Oracle PDB 创建


前置条件

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

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

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

-- 基础创建
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

本地克隆

-- 将源 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)

-- 先创建数据库链接
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

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

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

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

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

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


方式五:快照克隆

-- 先创建快照
ALTER PLUGGABLE DATABASE pdb1 SNAPSHOT pdb1_snap_20260318;

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

方式六:代理 PDB

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

CREATE PLUGGABLE DATABASE proxy_pdb
  AS PROXY FROM pdb1@remote_link;

创建后验证

-- 查看 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

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

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐