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;