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/');
7. Snapshot Clone
7.1 概述
- 存储快照
- 快速
- 节省空间
7.2 ASM Snapshot
# ASM 磁盘组快照
asmcmd mkdg ...
# 创建快照
asmcmd volcreate ...
7.3 NetApp / 存储层
- LUN 快照
- LVM 快照
8. PDB Snapshot Carousel
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 |
| PDB | PDB 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. 最佳实践
- RMAN Duplicate:完整克隆
- Active Duplicate:无需备份
- Data Pump:选择性
- PDB Clone:多租户
- Snapshot:快速
- TTS:跨平台
- 验证完整性:业务
- 编译无效对象:utlrp
- 测试:业务
- 文档化:流程
14. 参考资料
[1] Oracle Database Backup and Recovery User’s Guide 19c, “RMAN Duplicate” https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/