当前位置: 首页 > news >正文

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

文章目录

  • 题目
  • 答案解析
  • 扩展学习
    • 一、常见迁移方法
      • 1. 使用 EXPDP/IMPDP 工具(推荐)
      • 2. 使用 DB Link + SQL 语句
      • 3. 使用 DBMS\_DATAPUMP 包
    • 二、方法对比
  • 总结


题目

在这里插入图片描述


答案解析

解析:普通 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_linkCONNECT TO user1 IDENTIFIED BY passwordUSING '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 相同。
示例

DECLAREh1 NUMBER;
BEGINh1 := 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。
http://www.dtcms.com/a/326564.html

相关文章:

  • 7.Java的继承
  • 分享一款基于STC8H8K32U-45I-LQFP48单片机的4路数字量输入输出模块
  • 多重时间聚合算法(MAPA)改进需求预测模型
  • Redis实现排行榜
  • C++11 auto关键字:智能类型推导指南
  • 字符串相关例题(查询子串在主串中的个数)
  • GB17761-2024标准与电动自行车防火安全的技术革新
  • 编译GCC-12.1.0
  • Linux内核网络设备框架及其注册流程分析
  • Cursor 实用技巧与常见难题解析:从入门到进阶的技术实践
  • Pytest项目_day11(fixture、conftest)
  • OSPF IP FRR 理论和实验
  • 当C#遇上Notepad++:实现GCode可视化编辑的跨界实践
  • 3.数据类型和类型装换
  • Qt——实现”Hello World“、认识对象树与Qt坐标系
  • 用 Node.js 玩转 Elasticsearch从安装到增删改查
  • 月报 Vol.02:新增条件编译属性 cfg、#alias属性、defer表达式,增加 tuple struct 支持
  • 【前端插件】Code-Inspector-Plugin:重新定义前端开发的调试与协作体验
  • 【CSS 布局】告别繁琐计算:CSS 现代布局技巧(gap, aspect-ratio, minmax)
  • CobaltStrike的搭建与使用
  • 数字IC后端层次化Hierarchical Flow子系统Sub-System模块 block partition和pin assignment细节盘点
  • C++算法(数据结构)版
  • 《深度解构:React与Redux构建复杂表单的底层逻辑与实践》
  • 【软考架构】需求工程中,系统分析与设计的结构化方法
  • JavaEE 初阶第十七期:文件 IO 的 “管道艺术”(下)
  • C++11范围for循环:高效遍历新方式
  • Django ORM查询技巧全解析
  • 【LLM】OpenAI开源GPT级模型,120B及20B参数GPT-OSS
  • 如何在 Ubuntu 24.04 LTS Linux 上安装和使用 Flatpak
  • Oracle自动采集AWR Gets TOP SQL脚本