You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何连接Oracle 11g与19c数据库并实现特定列插入同步?

Oracle 11g到19c特定列数据传输方案

场景说明

我们正在从Oracle 11g迁移至Oracle 19c,需要测试插入操作时能否将11g中特定列的数据传输到19c。具体需求为:将11g中PRODUCT表和SUPPLIER表的对应列数据,合并传输到19c的PRODUCT WAREHOUSE表,三者对应列结构一致:

源端(Oracle 11g)

PRODUCT表

Product_nameproduct_description
BoltMetal
ZiptiePlastic

SUPPLIER表

Product_nameSupplier
BoltHome Depot
ZiptiePlastic Corp

目标端(Oracle 19c)

PRODUCT WAREHOUSE表

Product_nameproduct_descriptionSupplier
BoltmetalHome Depot
ZiptieplasticPlastic Corp

可行方案

一、DBLINK数据库链接(实时插入测试首选)

这是Oracle原生跨库访问方式,适合验证实时插入场景:

  1. 在19c端创建指向11g的DBLINK
    登录19c数据库,执行以下SQL:
    CREATE DATABASE LINK dblink_11g
    CONNECT TO 11g用户名 IDENTIFIED BY 11g密码
    USING '(DESCRIPTION =
              (ADDRESS = (PROTOCOL = TCP)(HOST = 11g服务器IP)(PORT = 1521))
              (CONNECT_DATA = (SERVICE_NAME = 11g数据库服务名))
            )';
    
  2. 执行跨库插入(合并两表数据)
    直接通过DBLINK读取11g数据并插入到19c目标表:
    INSERT INTO "PRODUCT WAREHOUSE" (Product_name, product_description, Supplier)
    SELECT p.Product_name, LOWER(p.product_description), s.Supplier
    FROM PRODUCT@dblink_11g p
    JOIN SUPPLIER@dblink_11g s ON p.Product_name = s.Product_name;
    
    注:如果仅需单表特定列,简化SELECT语句即可。

二、EXPDP/IMPDP数据泵(批量迁移测试)

适合批量导出特定列后导入的测试场景:

  1. 11g端导出特定列
    使用expdp命令导出目标列(替换占位符):
    expdp 11g用户名/11g密码@11g服务名 tables=PRODUCT,SUPPLIER \
    columns=(PRODUCT.PRODUCT_NAME,PRODUCT.PRODUCT_DESCRIPTION,SUPPLIER.PRODUCT_NAME,SUPPLIER.SUPPLIER) \
    dumpfile=prod_supp.dmp logfile=prod_supp_export.log
    
  2. 19c端导入并合并
    将dump文件传输到19c服务器后,可先导入临时表再合并,或直接通过SQL语句插入:
    impdp 19c用户名/19c密码@19c服务名 dumpfile=prod_supp.dmp logfile=prod_supp_import.log \
    remap_table=PRODUCT:PRODUCT_TEMP,SUPPLIER:SUPPLIER_TEMP
    
    然后执行合并插入:
    INSERT INTO "PRODUCT WAREHOUSE" (Product_name, product_description, Supplier)
    SELECT p.Product_name, LOWER(p.product_description), s.Supplier
    FROM PRODUCT_TEMP p
    JOIN SUPPLIER_TEMP s ON p.Product_name = s.Product_name;
    

三、SQL*Loader(文件中转式测试)

适合通过中间文件传输数据的场景:

  1. 11g端导出特定列到CSV
    执行SQL脚本生成CSV文件:
    SET HEADING OFF FEEDBACK OFF PAGESIZE 0 COLSEP ','
    SPOOL prod_supp.csv
    SELECT p.Product_name, p.product_description, s.Supplier
    FROM PRODUCT p
    JOIN SUPPLIER s ON p.Product_name = s.Product_name;
    SPOOL OFF
    
  2. 19c端用SQL*Loader导入
    编写控制文件load_prod.ctl:
    LOAD DATA
    INFILE 'prod_supp.csv'
    INTO TABLE "PRODUCT WAREHOUSE"
    FIELDS TERMINATED BY ','
    (Product_name, product_description "LOWER(:product_description)", Supplier)
    
    执行导入命令:
    sqlldr 19c用户名/19c密码@19c服务名 control=load_prod.ctl log=load.log
    

四、Oracle GoldenGate(实时同步测试)

如果需要验证持续的插入/更新同步场景,可使用GoldenGate:

  • 在11g端配置Extract进程,捕获PRODUCT、SUPPLIER表的特定列变更
  • 在19c端配置Replicat进程,将变更同步到PRODUCT WAREHOUSE表
  • 适合长期数据同步的迁移验证

内容的提问来源于stack exchange,提问作者Ian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:13:18