如何在debian上使用sqlplus进行数据迁移
导读:在 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”)
- load data
- 执行:sqlldr user/pass@orcl control=table.ctl log=load.log bad=load.bad direct=true(大批量建议 direct=true)
- 准备数据文件(如 data.txt,分隔符为逗号)与控制文件(table.ctl):
- 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; (注意日期/数值格式转换)。
- 在 sqlplus 中生成 INSERT/CSV:
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在debian上使用sqlplus进行数据迁移
本文地址: https://pptw.com/jishu/778178.html
