首页主机资讯如何在debian上使用sqlplus进行数据迁移

如何在debian上使用sqlplus进行数据迁移

时间2025-12-23 09:30:04发布访客分类主机资讯浏览614
导读:在 Debian 上使用 sqlplus 进行数据迁移 一、准备环境 在 Debian 上,sqlplus 属于 Oracle Instant Client。建议安装 Basic 与 SQL*Plus 包,并准备 Oracle 官方客户端...

在 Debian 上使用 sqlplus 进行数据迁移

一、准备环境

  • Debian 上,sqlplus 属于 Oracle Instant Client。建议安装 Basic 与 SQL*Plus 包,并准备 Oracle 官方客户端仓库的 API Key(登录后下载)。
  • 安装依赖:
    • Debian 11/12 常见为 libaio1;Debian 10 可能为 libaio1:i386(32 位库)。
    • 示例:sudo apt-get update & & sudo apt-get install -y libaio1 wget unzip
  • 下载并安装 Instant Client(示例为 21.5 版本,x86_64):
    • wget https://download.oracle.com/otn_software/linux/instantclient/215000/instantclient-basiclite-linux.x64-21.5.0.0.0dbru.zip
    • wget https://download.oracle.com/otn_software/linux/instantclient/215000/instantclient-sqlplus-linux.x64-21.5.0.0.0dbru.zip
    • 解压并整理:
      • unzip instantclient-basiclite-*.zip -d /usr/local
      • unzip instantclient-sqlplus-*.zip -d /usr/local
      • mv /usr/local/instantclient_21_5 /usr/local/sqlplus
      • cd /usr/local/sqlplus & & mkdir -p lib & & mv .so lib
      • chmod +x sqlplus & & ln -s /usr/local/sqlplus/sqlplus /usr/local/bin/sqlplus
  • 配置环境变量(写入 ~/.bashrc 或 /etc/profile):
    • export ORACLE_HOME=/usr/local/sqlplus
    • export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
    • export PATH=$ORACLE_HOME/bin:$PATH
    • 可选:export TNS_ADMIN=$ORACLE_HOME/network/admin
  • 验证:sqlplus -v 或 sqlplus user/pass@//host:1521/service。

二、迁移方案总览

  • 下表对比常见迁移方式(均在 Debian 主机上通过 sqlplus/配套工具执行或驱动):
方式 适用场景 核心工具 主要优点 主要限制
Data Pump 导出/导入 同构 Oracle 库间迁移、跨版本/跨平台 expdp/impdp 速度快、可并行、可重映射 需目录对象、版本兼容控制
SQL*Plus COPY 小数据量、跨库直连复制 sqlplus copy 配置简单、无需额外服务 不支持 LOB、性能一般
SQL*Loader 文件到 Oracle 的大批量加载 sqlldr 批量高效、容错可控 需准备控制文件与数据文件
SPOOL 生成 SQL Oracle → 文本/其他库 sqlplus spool 灵活可定制 需清洗转换、性能一般

三、方式一 Data Pump 迁移(推荐,适合中大型数据)

  • 源库准备
    • 以管理员登录:sqlplus / as sysdba
    • 创建目录对象并赋权(目录为操作系统真实路径):
      • CREATE DIRECTORY dumpdir AS ‘/u01/dumpdir’;
      • GRANT READ, WRITE ON DIRECTORY dumpdir TO your_user;
  • 导出(示例按 schema)
    • expdp your_user/your_pass@orcl DIRECTORY=dumpdir DUMPFILE=exp_20251223.dmp LOGFILE=exp_20251223.log SCHEMAS=your_user PARALLEL=4
    • 常用参数:TABLES=…、CONTENT=DATA_ONLY|METADATA_ONLY、EXCLUDE=STATISTICS、VERSION=11.2.0(低版本导入时)
  • 传输
    • 将 /u01/dumpdir/exp_20251223.dmp 复制到目标库的同一目录对象路径下(目标库也需有同名 DIRECTORY 指向该路径)
  • 目标库导入
    • 创建目录对象并赋权(同上)
    • 基本导入:
      • impdp your_user/your_pass@orcl DIRECTORY=dumpdir DUMPFILE=exp_20251223.dmp LOGFILE=imp_20251223.log SCHEMAS=your_user
    • 常见重映射:
      • 表空间:REMAP_TABLESPACE=tbs_old:tbs_new
      • 用户:REMAP_SCHEMA=src_user:tgt_user
      • 版本:VERSION=11.2.0(从高版本导入低版本时)
  • 提示
    • 迁移前检查字符集、表空间、临时表空间、统计信息;必要时在导入后收集统计信息。

四、方式二 SQL*Plus COPY 直连复制(小数据量)

  • 适用:两个 Oracle 库之间直连复制少量数据;不支持 BLOB/CLOB/LONG 等大对象。
  • 示例:
    • 同库同用户:
      • COPY FROM scott/tiger@orcl CREATE dept_copy USING SELECT * FROM dept;
    • 跨库复制:
      • COPY FROM scott/tiger@srcdb TO lsjdemo/lsjdemo@tgtdb CREATE dept_copy USING SELECT * FROM dept;
  • 操作方式:APPEND/CREATE/INSERT/REPLACE;每行末尾用 - 续行,命令末尾不要加分号。

五、方式三 SQL*Loader 批量加载与 SPOOL 导出

  • SQL*Loader(文件 → Oracle)
    • 准备数据文件(如 data.txt,分隔符为逗号)与控制文件(table.ctl):
      • load data
        infile ‘data.txt’
        into table your_table
        fields terminated by ‘,’
        (col1, col2, col3 DATE “YYYY-MM-DD HH24:MI:SS”)
    • 执行:sqlldr user/pass@orcl control=table.ctl log=load.log bad=load.bad direct=true(大批量建议 direct=true)
  • SPOOL 导出(Oracle → 文本/其他库)
    • 在 sqlplus 中生成 INSERT/CSV:
      • SET HEAD OFF PAGESIZE 0 FEEDBACK OFF LINESIZE 2000 TRIMSPOOL ON
      • SPOOL /tmp/export_inserts.sql
      • SELECT ‘INSERT INTO t(col1,col2) VALUES (’‘’||col1||‘’‘,’‘’||col2||‘’‘); ’ FROM t;
      • SPOOL OFF
    • 如需导入 MySQL,可在 MySQL 中执行:SOURCE /tmp/export_inserts.sql; (注意日期/数值格式转换)。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何在debian上使用sqlplus进行数据迁移
本文地址: https://pptw.com/jishu/778178.html
Ubuntu消息中心在哪找 怎样提升debian上sqlplus的执行效率

游客 回复需填写必要信息