尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Oracle11g客户端bin目录:imp/exp导入导出与PL/SQL配置指南

Oracle11g客户端bin目录:imp/exp导入导出与PL/SQL配置指南 简介本资源为Oracle 11g 64位版本bin目录的完整打包面向使用PL/SQL Developer进行数据迁移的数据库管理员与开发人员核心解决imp.exe、exp.exe缺失导致无法图形化导入导出的问题。压缩包共691个文件约126.04MB以372个dll动态库、118个exe可执行程序、56个bat批处理脚本为主另含pm、flt、pl、lib等辅助文件涵盖数据库启动、配置管理与性能分析等工具链。其中imp.exe负责将导出文件加载入库支持表、模式、用户乃至整库的选择性导入exp.exe则用于提取数据与对象生成外部文件便于备份、迁移与环境复用二者在PL/SQL Developer中通过图形界面调用免去手写命令行参数的繁琐。目前已有4156人学习下载适合需要快速补齐Oracle客户端工具、搭建测试环境或进行版本升级迁移的读者参考使用。1. 为什么我单独留了一份 Oracle11g 的 bin 目录上周帮同事处理一个十年前的业务库对方发来的备份只有.dmp文件服务器上 Oracle 客户端早卸了PL/SQL Developer 连上去能查数据但导入导出按钮点下去就报「无法初始化」。翻了一圈才发现问题不在 PL/SQL而在它调用的imp.exe和exp.exe根本不在 PATH 里。这两个小工具是 Oracle 客户端bin目录下的命令行程序PL/SQL Developer 的导入导出功能本质上是给它们套了个图形壳真正干活的是这两个 exe。这份资源就是 Oracle11g 64 位客户端里的bin目录核心是imp.exe、exp.exe配套还有impdp.exe、expdp.exe、sqlplus.exe以及一堆依赖 DLL。它解决的是「机器上没装完整 Oracle 服务端但需要做逻辑备份和迁移」这个场景。适合两类人一是用 PL/SQL Developer 做日常运维、需要走图形界面导入导出的 DBA二是临时接手老项目、只想快速把.dmp灌进库里的开发。如果你机器上已经装了完整 Oracle 服务端这份东西对你意义不大服务端自带的bin更全。2. imp 与 exp 的定位先搞清它和 impdp 不是一回事2.1 经典导出导入与数据泵的分界Oracle 的逻辑备份工具分两代。exp/imp是 Oracle 10g 之前就有的经典工具走的是客户端-服务端协同模式导出文件叫「导出转储文件」扩展名习惯用.dmp。expdp/impdp是 10g 引入的数据泵Data Pump走服务端进程性能高、支持并行、能断点续传但要求目标库有对应的 DIRECTORY 对象权限。很多人以为imp是老古董该淘汰实际不是。经典模式有个数据泵替代不了的优势它不依赖服务端的 DIRECTORY 目录对象只要客户端能连上库就能把数据导到本地任意路径。跨版本迁移时从高版本往低版本导exp/imp的兼容性反而更稳。我经手的几个从 11g 往 10g 回迁的活儿最后都是靠exp救的场。选型上给个直接判断目标库你能登服务器、有 DBA 权限、追求速度用expdp/impdp你只有客户端连接权限、导出文件要落本地、或者跨大版本用exp/imp。这份bin目录两套工具都齐但标题强调imp.exe/exp.exe说明它的主战场是经典模式。2.2 64 位客户端与 32 位 PL/SQL 的错位这里有个血泪经验必须提前说。PL/SQL Developer 长期只有 32 位版本而 Oracle11g 客户端分 32 位和 64 位。如果你装的是 64 位客户端32 位的 PL/SQL 根本加载不了它的 OCI 动态库会报「无法定位 OCI.dll」或者「不能初始化确认已安装 32 位 Oracle 客户端」。那这份 64 位bin目录怎么用两种思路。一是你用的是 64 位 PL/SQL Developer14 版本之后官方出了 64 位那直接匹配把bin目录加进 PATH 即可。二是你坚持用 32 位 PL/SQL那就得让 32 位客户端和这份 64 位bin共存PL/SQL 走 32 位 OCI而imp.exe/exp.exe单独调用 64 位版本。共存的关键是 PATH 顺序和TNS_ADMIN指向后面第 4 章会展开。提示判断自己 PL/SQL 是 32 位还是 64 位打开 PL/SQLHelp → About版本号后面会标 (32 bit) 或 (64 bit)。别靠安装包名字猜。2.3 bin 目录里到底哪些文件不能少不是整个bin目录所有文件都必需但删错一个 DLL 就可能让imp.exe起不来。核心清单如下文件作用是否必需imp.exe经典导入工具是exp.exe经典导出工具是impdp.exe / expdp.exe数据泵工具按需sqlplus.exe命令行连接工具排错用强烈建议oraclient11.dll客户端核心库是oraociei11.dllOCI 即时客户端库是orannzsbb11.dll网络加密相关是oci.dllOCI 接口库PL/SQL 依赖是orasql11.dllSQL 引擎库是oraociei11.dll这个文件特别大通常上百 MB它是即时客户端Instant Client的核心。如果你拿到的bin目录里没有它imp.exe一运行就会报「找不到 oraociei11.dll」。有些精简包会把它单独拎出来注意别漏。3. 把 bin 目录接进 PL/SQL环境变量与调用链3.1 环境变量三件套PATH、ORACLE_HOME、TNS_ADMINimp.exe能不能被 PL/SQL 找到取决于 PATH。能不能连上库取决于TNS_ADMIN指向的tnsnames.ora。这两件事分开配别混。假设你把这份bin目录放到了D:\oracle\product\11.2.0\client_1\bin配置如下# Windows 系统环境变量用 setx 永久写入或系统属性里手动加 setx PATH %PATH%;D:\oracle\product\11.2.0\client_1\bin /M # ORACLE_HOME 指向 bin 的上一级 setx ORACLE_HOME D:\oracle\product\11.2.0\client_1 /M # TNS_ADMIN 指向存放 tnsnames.ora 的目录通常是 network\admin setx TNS_ADMIN D:\oracle\product\11.2.0\client_1\network\admin /M逻辑说明PATH 让系统能找到imp.exeORACLE_HOME是很多 Oracle 工具启动时自检的基准路径缺了它exp.exe可能报「ORACLE_HOME 未设置」TNS_ADMIN决定去哪读tnsnames.ora如果你把网络配置文件放在非默认位置必须显式指定。参数说明/M表示写系统级变量需要管理员权限的 CMD。如果只想对当前用户生效去掉/M。改完必须重开 CMD 和 PL/SQL环境变量不会热加载。3.2 tnsnames.ora 的最小配置TNS_ADMIN目录下要有tnsnames.ora内容形如ORCL11G (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 192.168.1.100)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME orcl) ) )HOST填数据库服务器 IPPORT默认 1521SERVICE_NAME填库的服务名不是 SID 的话注意区分。配完用tnsping ORCL11G验证返回 OK 才算通。tnsping.exe也在bin目录里顺手就能测。3.3 在 PL/SQL 里触发 imp/expPL/SQL Developer 的导入导出入口在 Tools 菜单下Tools → Import Tables 走imp.exeTools → Export Tables 走exp.exe。点开后它会去 PATH 里找对应 exe找不到就弹「无法初始化」。一个常见误区以为在 PL/SQL 里配了 Oracle Home 就行。实际上 PL/SQL 的 Preferences → Oracle Home 只影响它自己连库用的 OCI不影响它调imp.exe时的 PATH 查找。两者要分别配。我一般先在 CMD 里裸跑一次imp helpy能出帮助信息再回 PL/SQL 点按钮这样能把问题隔离在「环境变量」还是「PL/SQL 配置」上。4. 命令行实操exp 导出与 imp 导入的完整参数4.1 exp 导出三种模式与常用参数exp支持三种导出模式整库FULL、按用户OWNER、按表TABLES。日常用得最多的是按用户导。# 按用户导出导出 scott 用户所有对象到本地 dmp exp scott/tigerORCL11G fileD:\backup\scott_20240101.dmp logD:\backup\scott_exp.log ownerscott # 按表导出只导 emp 和 dept 两张表 exp scott/tigerORCL11G fileD:\backup\tables.dmp tables(emp,dept) # 整库导出需要 DBA 权限 exp system/managerORCL11G fileD:\backup\full.dmp fully逻辑说明file是导出文件路径log记录过程日志出问题先看 log。owner指定用户tables指定表名列表fully整库。连接串scott/tigerORCL11G里的ORCL11G就是tnsnames.ora里配的服务名。参数说明几个容易踩的consistenty保证导出期间数据一致性基于 UNDO大库导出建议开compressn别压缩区段11g 里默认行为有变化显式写清楚grantsy是否导出权限迁移到新库通常要indexesy是否导索引只导数据时可设 n 加快速度。buffer参数控制数组提取大小默认够用网络差时可调小。4.2 imp 导入顺序、忽略与覆盖导入比导出更容易翻车因为涉及对象已存在时的处理策略。# 标准导入对象已存在则报错跳过 imp scott/tigerORCL11G fileD:\backup\scott_20240101.dmp logD:\backup\scott_imp.log fully # 忽略已存在对象只补缺失的 imp scott/tigerORCL11G fileD:\backup\scott_20240101.dmp ignorey # 只导入结构不导数据 imp scott/tigerORCL11G fileD:\backup\scott_20240101.dmp rowsn # 导入到不同用户从 scott 导到 scott_new imp scott_new/tigerORCL11G fileD:\backup\scott_20240101.dmp fromuserscott touserscott_new逻辑说明ignorey是最常用的参数表示遇到已存在的表不报错直接往里追加数据。rowsn只建结构适合先搭骨架再单独灌数据。fromuser/touser做用户映射跨用户迁移必备。参数说明commity表示每导入一批就提交大表导入时避免回滚段爆掉但会慢一些buffer控制提交批次大小feedback每导入多少行显示一次进度默认 0 不显示设成 10000 能看到进度条。导入顺序上imp会自动先建表再导数据再建索引不用手动干预但如果 dmp 里含序列注意序列当前值可能不跟着走导完要手动校准。4.3 用 sqlplus 做导入后的验证导完别急着交付用sqlplus核一下行数和对象数-- 连接目标库 sqlplus scott/tigerORCL11G -- 查各表行数 SELECT table_name, num_rows FROM user_tables ORDER BY table_name; -- 查无效对象 SELECT object_name, object_type, status FROM user_objects WHERE status INVALID; -- 查序列当前值 SELECT sequence_name, last_number FROM user_sequences;num_rows是统计信息里的值可能不准要精确就SELECT COUNT(*)。INVALID对象多半是视图或存储过程依赖缺失重新编译即可ALTER VIEW 视图名 COMPILE;。序列的last_number如果和源库对不上用ALTER SEQUENCE 序列名 RESTART START WITH 新值;校准。5. 避坑与排查那些让导入导出卡住的真实原因5.1 现象PL/SQL 点导入报「无法初始化」原因PL/SQL 找不到imp.exe或者找到了但依赖 DLL 缺失。最常见是 PATH 里没有bin目录其次是bin目录里缺oraociei11.dll。解决CMD 里执行where imp看能否定位到 exe。定位不到就检查 PATH。定位到了但 PL/SQL 还报错在 CMD 里直接跑imp helpy如果报缺 DLL把缺失的 DLL 补进bin目录。补 DLL 时注意版本要匹配 11g别从 12c 的目录里拷。5.2 现象imp 导入报「IMP-00058: 遇到 ORACLE 错误 942」原因942 是「表或视图不存在」。通常发生在导入顺序上——dmp 里某个对象依赖另一个还没导入的对象或者目标用户下缺少必要的表空间。解决先确认目标用户有CREATE TABLE权限和对应表空间配额。如果是表空间不存在先建表空间或改用户的默认表空间。导入时加ignorey让已存在的跳过减少中断。实在不行用showy参数先看 dmp 里到底有哪些 DDLimp ... showy logddl.log把 DDL 导出来人工检查。5.3 现象导出大表时 exp 卡住不动原因exp默认一次性读取大表加上网络延迟会显得卡死。也可能是 UNDO 表空间不足consistenty时快照太老。解决加feedback10000看进度确认是在跑还是真卡。网络问题就调小buffer比如buffer4096。UNDO 不足就找 DBA 扩 UNDO 表空间或者关掉consistent分批次导。我一般对大表单独用tables导别混在整用户导出里。5.4 现象64 位 imp 和 32 位 PL/SQL 冲突原因32 位 PL/SQL 加载 32 位 OCI而 PATH 里 64 位bin在前导致 PL/SQL 误加载 64 位 DLL报「不是有效的 Win32 应用程序」。解决PATH 里把 32 位客户端路径放前面64 位bin放后面。PL/SQL 的 Oracle Home 指向 32 位客户端。调用imp.exe时因为 32 位客户端里通常也有imp.exe会优先用 32 位的功能一样。如果非要指定 64 位就在 CMD 里用绝对路径调D:\...\64bit\bin\imp.exe。5.5 现象导入后中文乱码原因源库和目标库的字符集不一致或者NLS_LANG没设对。解决先查两边字符集SELECT * FROM nls_database_parameters WHERE parameter NLS_CHARACTERSET;。导入前设NLS_LANG格式为语言_地区.字符集比如SIMPLIFIED CHINESE_CHINA.AL32UTF8。CMD 里set NLS_LANGSIMPLIFIED CHINESE_CHINA.AL32UTF8再跑imp。字符集不一致时imp会尝试转换但可能丢字符跨字符集迁移最好用数据泵并做转换测试。6. 进阶用参数文件批量跑以及一个校验习惯命令行参数一多手敲容易错。我习惯把参数写进parfile一个文件对应一次任务可复用可版本管理。# exp_scott.par useridscott/tigerORCL11G fileD:\backup\scott_%date%.dmp logD:\backup\scott_exp.log ownerscott consistenty grantsy indexesy feedback10000调用时exp parfileexp_scott.par。注意%date%这种变量在 parfile 里不会展开得在 CMD 里先算好再传或者干脆用固定名加日期后缀手动改。parfile 里每行一个参数#开头是注释别写中文注释某些版本会解析出错。导入侧同理imp parfileimp_scott.par。批量场景下我会写个批处理循环处理多个 dmpecho off set NLS_LANGSIMPLIFIED CHINESE_CHINA.AL32UTF8 for %%f in (D:\backup\*.dmp) do ( echo 正在导入 %%f imp scott/tigerORCL11G file%%f log%%~nf.log ignorey feedback10000 if errorlevel 1 echo %%f 导入失败检查日志 %%~nf.log )逻辑说明for遍历目录下所有 dmp%%~nf取文件名不含扩展名做日志名。errorlevel 1判断上一条命令是否失败失败就打印提示。这个脚本我用了好几年唯一要注意的是imp的返回码有时不准失败也可能返回 0所以日志必须人工扫一眼。最后说个校验习惯。每次导完我都会跑一遍源库和目标库的对象数量对比-- 源库执行记录结果 SELECT object_type, COUNT(*) FROM user_objects GROUP BY object_type ORDER BY object_type; -- 目标库执行同样语句逐项对比表、索引、序列、触发器的数量对不上就说明有对象没导过来。这个动作花不了一分钟但能挡住大部分「以为导完了其实缺东西」的事故。从那以后我每次交付前都强制走一遍对象计数对比再附上 exp/imp 的 log 一起归档。希望帮到你。本文还有配套的精品资源点击获取
返回列表