【每日一错】PDB之间数据迁移


题目

在这里插入图片描述


答案解析

解析:普通 SQL 语句(INSERT INTO … SELECT、CTAS)无法直接跨 PDB 访问数据,因为每个 PDB 都是独立的数据库环境,拥有自己的数据字典和会话范围。

扩展学习

在 Oracle 19c 的 CDB(Container Database) 架构中,每个 PDB(Pluggable Database) 都是一个独立的数据库环境,拥有自己的数据字典、用户和表空间。
PDB 与 PDB 之间默认不能直接访问数据,因此跨 PDB 数据迁移需要借助特定的技术手段。

一、常见迁移方法

1. 使用 EXPDP/IMPDP 工具(推荐)

原理:Data Pump 将数据导出为转储文件(DMP),再导入到目标 PDB。
流程

  1. 在源 PDB 使用 expdp 导出:

    expdp user1/password@pdb1 tables=table1 dumpfile=table1.dmp directory=dp_dir
    
  2. 将 DMP 文件传输到目标 PDB 所在服务器的 Data Pump 目录。

  3. 在目标 PDB 使用 impdp 导入:

    impdp user2/password@pdb2 tables=table1 dumpfile=table1.dmp directory=dp_dir
    

优点:官方推荐,速度快,支持并行,适合大数据量和结构+数据迁移。
缺点:需要磁盘空间存放 DMP 文件。

2. 使用 DB Link + SQL 语句

原理:在目标 PDB 建立到源 PDB 的 Database Link,通过远程 SQL 查询实现数据复制。
示例

-- 在目标 PDB 创建 DB Link
CREATE DATABASE LINK pdb1_link
  CONNECT TO user1 IDENTIFIED BY password
  USING 'PDB1';

-- CREATE TABLE AS SELECT
CREATE TABLE new_table AS
SELECT * FROM table1@pdb1_link;

-- INSERT INTO SELECT
INSERT INTO table2
SELECT * FROM table1@pdb1_link;

优点:操作简单,适合小规模、临时数据传输。
缺点:受网络延迟影响,不适合大数据量;需要手动维护结构和索引。

3. 使用 DBMS_DATAPUMP 包

原理:Data Pump 的 PL/SQL API 版本,底层与 expdp/impdp 相同。
示例

DECLARE
  h1 NUMBER;
BEGIN
  h1 := DBMS_DATAPUMP.OPEN(operation => 'EXPORT', job_mode => 'TABLE', job_name => 'MY_JOB', version => 'LATEST');
  DBMS_DATAPUMP.ADD_TABLE(h1, 'SCOTT', 'EMP');
  DBMS_DATAPUMP.ADD_FILE(h1, 'emp_data.dmp', 'DATA_PUMP_DIR');
  DBMS_DATAPUMP.START_JOB(h1);
  DBMS_DATAPUMP.DETACH(h1);
END;
/

优点:适合在 PL/SQL 程序中自动化数据迁移。
缺点:需要 PL/SQL 编程,不是初学者首选。


二、方法对比

方法是否需 DB Link是否走网络直连是否需中间文件速度适用场景
DB Link + SQL一般小数据量、临时迁移
EXPDP/IMPDP大数据量、结构+数据迁移
DBMS_DATAPUMP自动化迁移、批量作业

总结

跨 PDB 数据迁移的选择原则:

  1. 少量数据 → DB Link + SQL。
  2. 大数据量 / 结构迁移 → EXPDP/IMPDP(推荐)。
  3. 需要自动化 → DBMS_DATAPUMP。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值