远程克隆pdb成功的关键在于源库和目标库满足热克隆前提:1. 源库必须启用local_undo_enabled(需在cdb$root下执行alter database local undo on并重启);2. 源库必须处于archivelog模式;3. db link须指向远端cdb实例而非pdb;4. file_name_convert路径末尾斜杠不可省略。
远程克隆 pdb 能否成功,关键不在 create pluggable database ... from ...@dblink 这条语句本身,而在于源库和目标库的底层配置是否满足热克隆前提——尤其是 local_undo_enabled 和归档模式。12.2 之前不满足就只能停机只读克隆;12.2+ 若未启用 local undo,照样报 ora-65035。
检查并启用源库的 local undo 模式
这是最常被忽略、也最容易导致 ORA-65035 的环节。错误信息明确说“source PDB does not have local undo enabled”,但很多人误以为只需在源 PDB 内执行命令,其实必须在 CDB 根容器(CDB$ROOT)下操作,且需重启数据库。
-
SELECT property_value FROM database_properties WHERE property_name = 'LOCAL_UNDO_ENABLED';—— 若返回FALSE或空,则需切换 - 必须先关闭数据库:
SHUTDOWN IMMEDIATE - 以 upgrade 模式启动:
STARTUP UPGRADE - 在
CDB$ROOT下执行:ALTER DATABASE LOCAL UNDO ON; - 再
SHUTDOWN IMMEDIATE→STARTUP完成生效 - 注意:切换后 Oracle 会自动为每个 PDB 创建专属 undo 表空间,无需手动建
确保源库处于 ARCHIVELOG 模式
非归档模式下,远程克隆(尤其热克隆)无法保证数据一致性,Oracle 会拒绝操作或强制要求源 PDB 只读——这直接破坏“在线”价值。
- 检查:
ARCHIVE LOG LIST,确认输出含Database log mode: Archive Mode - 若非归档,需执行:
SHUTDOWN IMMEDIATE→STARTUP MOUNT→ALTER DATABASE ARCHIVELOG;→ALTER DATABASE OPEN; - 归档路径建议提前配置好(
log_archive_dest_1),避免克隆中途因归档失败中断
创建跨库数据库链接(DB Link)的实操要点
DB Link 必须建在目标 CDB 中,且连接用户权限、TNS 配置、全局名限制三者稍有偏差就会报错,比如 ORA-02085 或连接超时。
- 目标端执行:
ALTER SESSION SET GLOBAL_NAMES = FALSE;—— 否则 DB Link 名必须与远端服务名完全一致,极易触发ORA-02085 - 远端需创建专用用户(推荐公共用户):
CREATE USER c##clone_user IDENTIFIED BY pwd CONTAINER=ALL;,并授予CREATE SESSION和CREATE PLUGGABLE DATABASE - TNS 名称要能解析到远端 CDB(不是 PDB!),哪怕你最终克隆的是某个 PDB,DB Link 仍需指向 CDB 实例的服务名
- 验证连通性:
SELECT SYSDATE FROM DUAL@your_dblink;,而非查表——避免因对象权限不足误判
执行克隆语句时的关键参数与陷阱
CREATE PLUGGABLE DATABASE 命令表面简单,但 FILE_NAME_CONVERT、密钥参数、TDE 配置等稍有疏漏,PDB 就会卡在 MOUNTED 状态甚至报 ORA-17628。
- 路径映射必须精确:如源数据文件在
/u01/oradata/cdb1/pdb_src/,目标目录是/u01/oradata/cdb2/pdb_clone/,则FILE_NAME_CONVERT应写成('/u01/oradata/cdb1/pdb_src/', '/u01/oradata/cdb2/pdb_clone/')—— 末尾斜杠不能少,否则可能生成非法路径 - 若源库启用了 TDE(透明数据加密),必须显式加
KEYSTORE IDENTIFIED BY ...子句,否则新 PDB 打开时会进RESTRICTED模式 - 12.2+ 推荐用
CREATE_FILE_DEST替代FILE_NAME_CONVERT,更简洁且自动处理路径,但需确保目标 ASM 或文件系统有足够空间 - 克隆完成后,新 PDB 默认是
MOUNTED,务必执行ALTER PLUGGABLE DATABASE pdb_name OPEN;,否则不可用
真正卡住人的地方往往不是语法,而是源库 undo 模式没切、归档没开、DB Link 指向了 PDB 服务名而非 CDB、或者 FILE_NAME_CONVERT 路径末尾缺斜杠——这些细节一错,整条链路就断在第一步。动手前花两分钟跑一遍 LOCAL_UNDO_ENABLED 和 ARCHIVE LOG LIST,比反复重试高效得多。











