暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CDB 架构下还有其他数据迁移方法

恩恩霸 2025-08-11
268

在 Oracle 19c Multitenant 架构里,所谓“把数据从 PDB-A 搬到 PDB-B”既可能是
(1)**同一 CDB 内的两个 PDB 之间搬数据**;
(2)**把某个 PDB 从 CDB1 整库搬到 CDB2**;
(3)**把 Non-CDB、其它版本或云端数据库的数据合并到某个 PDB**。
三种场景的技术路线并不相同。下面把官方文档、社区最佳实践及生产案例汇总成一篇 1500 字左右的“迁移地图”,供 DBA 按图索骥。

---

### 一、同一 CDB 内:PDB↔PDB 的“逻辑搬运”

目标:业务不停机、只搬部分表或 Schema。
特点:两个 PDB 都在同一个 CDB,数据文件可以共享磁盘组,不需要文件系统级复制。

| 方法 | 技术要点 | 停机时间 | 备注 |
|---|---|---|---|
| **Database Link + INSERT /*+APPEND*/ SELECT** | 先在目标 PDB 创建指向源 PDB 的 dblink,再按表或分区并行插入;可结合 DBMS_PARALLEL_EXECUTE 做分片提交。 | 0~秒级 | 只搬数据,不搬索引、触发器、统计信息。需要提前建好对象。 |
| **Data Pump over Network Link** | `impdp … network_link=lnk_to_src schemas=HR,OE` 直接抽数据进目标 PDB,跳过落地 dump 文件。 | 0~分钟级 | 支持过滤、remap_tablespace、remap_schema。不支持 BFILE、ORDIMAGE。 |
| **GoldenGate / XStream** | 初始化加载后持续复制,最终做无缝切换。 | 秒级 | 需额外 license,配置复杂,适合超大数据量或跨平台字符集。 |
| **CTAS/IAS over DB Link** | `create table t1 as select * from t1@src;` 或 `insert /*+append*/ into t1 select * from t1@src;` | 0~分钟级 | 大对象(LOB)段需单独设置 stream 池,否则慢。 |

---

### 二、跨 CDB:整库搬迁的五种武器

场景:把“PDB1@CDB1”完整搬到“PDB1@CDB2”,业务名不变,甚至 IP 都不改。
以下五种办法按“停机时间”从短到长排序。

#### 1. Hot Clone(CREATE PLUGGABLE DATABASE … FROM … RELOCATE)

- 原理:源 PDB 继续读写,后台通过 redo 增量同步;目标端执行 `ALTER PLUGGABLE DATABASE OPEN` 时自动把连接踢到目标,源 PDB 被关闭并删除。
- 停机时间:< 10 秒。
- 条件:双方 CDB 均为 19c、归档模式、本地 undo,且 `compatible=19.0.0` 以上。
- 命令示例:

```sql
-- CDB2 上执行
create pluggable database pdb1
from pdb1@link_cdb1
relocate availability max;
alter pluggable database pdb1 open;
```

- 社区案例:CSDN 博主 cqsztech 在 2023-10 用此方法把 1.2 TB 的 PDB 从 Exadata 搬到 x86 服务器,切换时业务仅中断 7 秒。

#### 2. Refreshable PDB(先“热备”,再“转正”)

- 步骤:
1) 在 CDB2 创建可刷新 PDB `create pluggable database pdb1_refresh from pdb1@link refresh mode every 60 minutes;`
2) 每天自动增量同步;
3) 维护窗口内执行最后一次手动刷新 → `alter pluggable database pdb1_refresh refresh;`
4) `alter pluggable database pdb1 refresh mode none;` 断开与源库的关系 → `open read write`。
- 停机时间:最后一次刷新耗时,一般数分钟。
- 优势:可在目标端反复验证,回滚风险低。

#### 3. 传统 Unplug / Plug(“拔插头”)

- 思路:`alter pluggable database pdb1 unplug into '/tmp/pdb1.xml';` 把数据文件和 XML 描述文件拷贝到目标端,再 `create pluggable database pdb1 using '/tmp/pdb1.xml' move file_name_convert=('+DATA','/u02/oradata');`
- 停机时间:拷贝文件时长。
- 适合:跨平台、跨存储、跨 ASM 到文件系统,一次到位。
- 注意:源 PDB 必须干净关闭,不可 open read only。

#### 4. RMAN Backupset Restore

- 用 RMAN `backup pluggable database pdb1;` 生成备份集,目标端 `restore pluggable database pdb1 from service CDB1;` 再做增量恢复。
- 适合:底层存储为 Data Guard、ZDLRA 等备份一体机的场景。
- 停机时间:最后一次增量恢复+switchover。

#### 5. Data Pump Full Transportable

- 仅当 PDB 内包含大量加密表空间、HCC 压缩列、In-Memory 对象,而上述物理方法受限时,才考虑逻辑导出。
- 命令:`expdp full=y transportable=always version=19 directory=dp dumpfile=full.dmp`
- 缺点:导出导入时间长,需要表空间只读。

---

### 三、Non-CDB → PDB 的三条路线

| 路线 | 关键操作 | 是否需停机 | 备注 |
|---|---|---|---|
| **DBCA Silent Clone** | 在目标 CDB 执行 `dbca -silent -createPluggableDatabase -createFromRemoteNonCDB …` | 仅 Non-CDB 需只读 | 官方推荐,自动生成 XML,转换脚本 `noncdb_to_pdb.sql` 自动调用。 |
| **Data Pump Full Transportable** | 同上一节 | 需要只读 | 适合 11gR2 以前无法做 clone 的环境。 |
| **XTTS (Cross Platform Transportable Tablespaces)** | 用 RMAN 备份表空间 → 转换字节序 → 导入元数据。 | 最后一次表空间只读 | 跨平台(如 AIX→Linux)必选,支持增量。 |

---

### 四、云端/异地:自动化与商业工具

- **Oracle Cloud Infrastructure (OCI)**:提供“PDB Relocate to Cloud”向导,底层即 Hot Clone + OCI Object Storage 做中转。
- **AWS RDS Custom for Oracle**:不支持直接插拔 PDB,需用 Data Pump 或 GoldenGate。
- **第三方工具**:深信服 DMP、NetApp Ansible 工具包均可把本地 PDB 热迁到 AWS FSx/EC2,脚本里封装了 `CREATE PLUGGABLE DATABASE … RELOCATE`。

---

### 五、选型速查表

| 需求 | 推荐方法 | 备注 |
|---|---|---|
| 同一 CDB,搬几张表 | DB Link + INSERT 或 CTAS | 最快、最简单 |
| 同一 CDB,搬整个 Schema | Data Pump over Network Link | 保留约束、索引 |
| 跨 CDB,停机<10 秒 | Hot Clone (RELOCATE) | 19c 必备技能 |
| 跨 CDB,可接受分钟级停机 | Refreshable PDB | 可验证、可回滚 |
| 跨平台/跨存储 | Unplug/Plug 或 XTTS | 物理迁移,完整性高 |
| 上云 | OCI 向导或 DMP | 图形化、自动化 |

---

### 六、小结

Oracle 19c CDB 架构把“搬库”拆成了两层:
- **逻辑层**:用 DB Link、Data Pump 在 PDB 之间“抽数据”,灵活、细粒度。
- **物理层**:用 Clone、Unplug/Plug、RMAN 把 PDB 当“集装箱”整体搬迁,简单、快速。

理解这两层后,再按停机窗口、数据量、平台差异、预算四个维度做决策,就能在 1~1500 字之外,把任何一次“PDB 挪窝”变成可复制的标准流程。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论