Oracle 数据库克隆

Oracle 数据库克隆

适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

数据库克隆用于创建副本[1]:

场景

  • 开发测试环境
  • 数据分析
  • 故障排查

2. 克隆方式

2.1 RMAN Duplicate

  • 完整克隆
  • 主数据库 → 副本

2.2 Data Pump

  • 逻辑克隆
  • 选择性

2.3 Snapshot

  • 快速克隆
  • 存储层

2.4 PDB Clone(12c+)

  • PDB 克隆
  • 快速

3. RMAN Duplicate

3.1 准备

# 源库备份
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

3.2 辅助实例

# 1. 创建密码文件
orapwd file=$ORACLE_HOME/dbs/orapworcl_clone password=****** entries=10

# 2. 参数文件
# initorcl_clone.ora
db_name='orcl_clone'
control_files='/u01/oradata/orcl_clone/control01.ctl'
db_file_name_convert=('/u01/oradata/orcl/', '/u01/oradata/orcl_clone/')
log_file_name_convert=('/u01/oradata/orcl/', '/u01/oradata/orcl_clone/')

# 3. 启动
sqlplus / as sysdba
SQL> STARTUP NOMOUNT PFILE='?/dbs/initorcl_clone.ora';

3.3 网络配置

# tnsnames.ora
ORCL = (DESCRIPTION = (ADDRESS = ...) (CONNECT_DATA = (SERVICE_NAME = orcl)))
ORCL_CLONE = (DESCRIPTION = (ADDRESS = ...) (CONNECT_DATA = (SERVICE_NAME = orcl_clone)))

3.4 Duplicate

rman target sys/pwd@orcl auxiliary sys/pwd@orcl_clone

RMAN> DUPLICATE TARGET DATABASE TO orcl_clone
  SPFILE
  NOFILENAMECHECK;

详细见:Oracle RMAN 备份恢复


4. Active Duplicate(11g+)

4.1 概述

  • 无需备份
  • 网络传输
  • 实时

4.2 执行

rman target sys/pwd@orcl auxiliary sys/pwd@orcl_clone

RMAN> DUPLICATE TARGET DATABASE TO orcl_clone
  FROM ACTIVE DATABASE
  SPFILE
  NOFILENAMECHECK;

5. Data Pump 克隆

5.1 导出

# 全库
expdp system/pwd DIRECTORY=dpump_dir DUMPFILE=full.dmp FULL=Y

# Schema
expdp system/pwd DIRECTORY=dpump_dir DUMPFILE=scott.dmp SCHEMAS=SCOTT

# 表
expdp system/pwd DIRECTORY=dpump_dir DUMPFILE=table.dmp TABLES=employees,departments

5.2 传输

scp full.dmp clone-host:/tmp/

5.3 导入

# 全库
impdp system/pwd DIRECTORY=dpump_dir DUMPFILE=full.dmp FULL=Y

# Schema 重命名
impdp system/pwd DIRECTORY=dpump_dir DUMPFILE=scott.dmp 
  REMAP_SCHEMA=SCOTT:SCOTT_TEST

# 表空间重命名
impdp system/pwd DIRECTORY=dpump_dir DUMPFILE=full.dmp 
  REMAP_TABLESPACE=users:users_test

详细见:Oracle Data Pump 详解


6. PDB Clone

6.1 本地克隆

-- 1. 源 PDB OPEN
ALTER PLUGGABLE DATABASE orclpdb CLOSE;
ALTER PLUGGABLE DATABASE orclpdb OPEN READ ONLY;

-- 2. 克隆
CREATE PLUGGABLE DATABASE orclpdb_clone FROM orclpdb
  FILE_NAME_CONVERT=('/u01/oradata/orcl/orclpdb/', '/u01/oradata/orcl/orclpdb_clone/');

-- 3. 启动
ALTER PLUGGABLE DATABASE orclpdb_clone OPEN;

-- 4. 源 PDB 复原
ALTER PLUGGABLE DATABASE orclpdb CLOSE;
ALTER PLUGGABLE DATABASE orclpdb OPEN;

6.2 远程克隆

-- 1. DB Link
CREATE DATABASE LINK orclpdb_link 
  CONNECT TO system IDENTIFIED BY ****** USING 'orclpdb_remote';

-- 2. 远程克隆
CREATE PLUGGABLE DATABASE orclpdb_clone FROM orclpdb@orclpdb_link
  FILE_NAME_CONVERT=('/u01/oradata/remote/orclpdb/', '/u01/oradata/orcl/orclpdb_clone/');

详细见:Oracle 多租户 CDB/PDB 管理


7. Snapshot Clone

7.1 概述

  • 存储快照
  • 快速
  • 节省空间

7.2 ASM Snapshot

# ASM 磁盘组快照
asmcmd mkdg ...

# 创建快照
asmcmd volcreate ...

7.3 NetApp / 存储层

- LUN 快照
- LVM 快照

8.1 启用

ALTER PLUGGABLE DATABASE orclpdb SNAPSHOT MODE EVERY 24 HOURS;

8.2 查看快照

SELECT con_id, snapshot_name, snapshot_time 
FROM dba_pdb_snapshots;

8.3 创建快照 PDB

CREATE PLUGGABLE DATABASE orclpdb_snap FROM orclpdb
  SNAPSHOT COPY;

9. 跨平台克隆

9.1 TTS

-- 1. 表空间自包含
BEGIN
  DBMS_TTS.TRANSPORT_SET_CHECK('users, tools', TRUE);
END;
/
SELECT * FROM transport_set_violations;

-- 2. READ ONLY
ALTER TABLESPACE users READ ONLY;

-- 3. 导出元数据
expdp system/pwd DIRECTORY=dpump_dir DUMPFILE=tts.dmp 
  TRANSPORT_TABLESPACES=users TRANSPORT_FULL_CHECK=Y

-- 4. 复制数据文件

-- 5. 导入
impdp system/pwd DIRECTORY=dpump_dir DUMPFILE=tts.dmp 
  TRANSPORT_DATAFILES='/u01/oradata/users01.dbf'

详细见:Oracle TTS 传输表空间

9.2 跨平台 RMAN

# CONVERT
RMAN> CONVERT DATABASE NEW DATABASE 'orcl_clone'
  TRANSPORT SCRIPT '/tmp/transport.sql'
  TO PLATFORM 'Linux x86 64-bit';

10. 克隆策略选择

场景方式
完整克隆RMAN Duplicate
选择性Data Pump
快速Snapshot
PDBPDB Clone
跨平台TTS

11. 验证

11.1 数据完整性

-- 1. 行数
SELECT COUNT(*) FROM employees;

-- 2. 对象
SELECT COUNT(*) FROM dba_objects WHERE status = 'INVALID';

-- 3. 数据字典
SELECT * FROM dba_registry;

11.2 编译无效对象

@?/rdbms/admin/utlrp.sql

12. 常见坑与排错

12.1 Duplicate 失败

# 1. 网络
# 2. 路径
# 3. 权限
# 4. 字符集

12.2 Data Pump 慢

# 1. 并行
PARALLEL=8

# 2. 直接路径
ACCESS_METHOD=DIRECT_PATH

12.3 PDB 克隆失败

-- 1. 源 PDB 状态
-- 2. 空间
-- 3. 字符集

13. 最佳实践

  1. RMAN Duplicate:完整克隆
  2. Active Duplicate:无需备份
  3. Data Pump:选择性
  4. PDB Clone:多租户
  5. Snapshot:快速
  6. TTS:跨平台
  7. 验证完整性:业务
  8. 编译无效对象:utlrp
  9. 测试:业务
  10. 文档化:流程

14. 参考资料

[1] Oracle Database Backup and Recovery User’s Guide 19c, “RMAN Duplicate” https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/