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;

相关推荐
等风来不如迎风去2 小时前
【linux】tar [选项] 归档文件名 要打包的文件/目录..
linux·运维·elasticsearch
小周学学学2 小时前
vmware的python自动化:批量迁移虚拟机
运维·自动化·vmware·虚拟化
Gold Steps.2 小时前
GitOps之Jenkins 构建镜像自动更新 Helm 并触发 ArgoCD 自动同步
运维·ci/cd·云原生
一殊酒2 小时前
【Docker】实战用例:前后端分离项目多容器Docker化设计
运维·docker·容器
爱折腾的小码农2 小时前
neo4j数据库桌面管理工具
数据库·neo4j
常利兵2 小时前
Room 3.0大变身:安卓开发的新挑战与机遇
android·jvm·oracle
总要冲动一次2 小时前
MySQL 5.7 全量 + 增量备份方案(本地执行 + 远程存储)
数据库·mysql·adb
猿小喵2 小时前
MySQL数据库源码调试
数据库·mysql
熠速2 小时前
CI/CD功能介绍
运维·ci/cd