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

如何实现从Oracle数据库向MariaDB的数据拉取?

从Oracle拉取数据到MariaDB的可行方案

1. Oracle导出 + MariaDB导入(离线同步)

这是最易实现的离线方案,适合非实时需求:

  • 在Oracle端用数据泵导出目标数据:
    expdp your_oracle_user/your_pwd@orcl schemas=target_schema tables=table1,table2 dumpfile=oracle_dump.dmp logfile=export.log
    
  • 将导出文件传输到MariaDB服务器后,可选择两种导入方式:
    • 若导出为SQL脚本,直接执行:
      mysql -u mariadb_user -p target_mariadb_db < oracle_data.sql
      
    • 若导出为CSV(可通过Oracle SQL Developer或UTL_FILE生成),用MariaDB的LOAD DATA高效导入:
      LOAD DATA INFILE '/path/to/data.csv'
      INTO TABLE target_mariadb_table
      FIELDS TERMINATED BY ',' ENCLOSED BY '"'
      LINES TERMINATED BY '\n'
      IGNORE 1 ROWS;
      

2. Oracle创建DB_LINK推送数据(主动同步)

Oracle可以通过ODBC驱动建立到MariaDB的数据库链接,配合定时任务主动推送数据:

  • 先在Oracle端配置MariaDB的ODBC DSN,再创建数据库链接:
    CREATE DATABASE LINK mariadb_sync_link
    CONNECT TO mariadb_user IDENTIFIED BY mariadb_pwd
    USING 'mariadb_odbc_dsn';
    
  • 编写PL/SQL脚本实现增量同步,比如:
    MERGE INTO target_table@mariadb_sync_link t
    USING (SELECT * FROM source_oracle_table WHERE update_time > (SELECT COALESCE(MAX(update_time), TO_DATE('1970-01-01','YYYY-MM-DD')) FROM target_table@mariadb_sync_link)) s
    ON (t.id = s.id)
    WHEN MATCHED THEN UPDATE SET t.col1 = s.col1, t.update_time = s.update_time
    WHEN NOT MATCHED THEN INSERT (id, col1, update_time) VALUES (s.id, s.col1, s.update_time);
    COMMIT;
    
  • 用Oracle的DBMS_SCHEDULER创建定时任务,自动执行同步:
    BEGIN
      DBMS_SCHEDULER.CREATE_JOB (
        job_name        => 'ORACLE_TO_MARIADB_SYNC',
        job_type        => 'PLSQL_BLOCK',
        job_action      => 'BEGIN /* 上面的MERGE脚本 */ END;',
        start_date      => SYSTIMESTAMP,
        repeat_interval => 'FREQ=HOURLY;BYMINUTE=0;',
        enabled         => TRUE,
        comments        => 'Incremental sync from Oracle to MariaDB'
      );
    END;
    /
    

3. ETL工具实现实时/准实时同步

如果需要低延迟的数据同步,推荐使用专业ETL工具:

  • Oracle GoldenGate:捕获Oracle的Redo Log,将数据变更实时同步到MariaDB,支持复杂场景的增量复制。
  • Apache Kafka Connect:配置Oracle Source Connector抽取数据,MariaDB Sink Connector写入数据,适合大数据流场景。
  • Talend/Informatica:可视化配置抽取、转换、加载流程,支持定时或实时同步,上手门槛低。

4. MariaDB定时拉取(你已知方案的优化)

你提到的MariaDB通过数据链接拉取,可配合MariaDB事件调度器实现自动定时拉取:

-- 开启事件调度器
SET GLOBAL event_scheduler = ON;

-- 创建每小时执行一次的同步任务
CREATE EVENT sync_oracle_data
ON SCHEDULE EVERY 1 HOUR
STARTS CURRENT_TIMESTAMP
DO
BEGIN
  INSERT INTO mariadb_target_table
  SELECT * FROM oracle_source_table@oracle_data_link
  WHERE update_time > (SELECT COALESCE(MAX(update_time), '1970-01-01 00:00:00') FROM mariadb_target_table);
  COMMIT;
END;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:05:35