首页 / 资讯中心 / 文章详情

Oracle11g 64位下PL/SQL导入导出:bin目录imp/exp配置与避坑指南

Oracle11g 64位下PL/SQL导入导出:bin目录imp/exp配置与避坑指南 ★ FEATURED ARTICLE
简介这份资源是Oracle 11g 64位版本的bin目录完整打包面向需要做数据库导入导出、备份迁移的DBA与开发人员尤其适合在PL/SQL Developer中调用图形化工具完成数据搬运的场景。包内共691个文件以372个dll动态库、118个exe可执行程序、56个bat批处理脚本为主另含pm、flt、pl、lib等配置与库文件压缩包约126.04MB其中imp.exe与exp.exe正是导入导出的核心工具可选择性迁移表、模式、用户乃至整库并支持压缩与一致性检查。目录中还包含sqlplus、oradim等实例管理与性能分析组件构成较完整的数据库管理工具集。目前已有4156人学习下载适合需要快速补齐Oracle客户端工具、搭建测试环境或排查导入导出问题的读者参考使用。1. 为什么 64 位 Oracle11g 的 bin 目录里imp.exe 和 exp.exe 才是 PL/SQL 导入导出的关键很多人装完 Oracle11g 64 位打开 PL/SQL Developer 连上库以为导入导出就是点两下菜单的事结果一到 Tools → Import Tables 就报「无法找到 EXP 程序」或者干脆闪退。问题不在 PL/SQL而在 Oracle11g 安装目录下那个bin文件夹——imp.exe和exp.exe这两个命令行工具才是 PL/SQL 图形界面背后真正干活的执行体。PL/SQL 本身不实现数据泵逻辑它只是拼出一条exp或imp命令再调用bin目录里的可执行文件去跑。这个标题讲的就是在 64 位 Oracle11g 环境下如何让bin目录里的imp.exe、exp.exe被 PL/SQL 正确识别和调用从而完成导入导出。适合两类人一是刚装完 Oracle11g、PL/SQL 能连库但导入导出报错的开发二是手里只有客户端安装包、没装完整数据库却想用 PL/SQL 做逻辑备份的运维。核心矛盾只有一个——64 位 PL/SQL 必须配 64 位 Oracle 客户端而bin目录就是这两者握手的物理位置。搞不清这个后面所有配置都是玄学。2. 先搞懂 imp.exe 和 exp.exe 在 bin 目录里到底扮演什么角色2.1 exp/imp 与 expdp/impdp 的选型边界Oracle 的导出导入有两套体系老式的exp.exe/imp.exeExport/Import 工具和新式的expdp.exe/impdp.exeData Pump。很多人一上来就想用数据泵觉得新的一定好但在 PL/SQL Developer 的图形化导入导出界面里默认调用的恰恰是老式的exp/imp。原因很直接Data Pump 是服务端工具expdp必须在数据库服务器上执行导出的 dump 文件也落在服务器目录而exp/imp是客户端工具可以在装了 Oracle 客户端的任意机器上跑文件落在本地。这就决定了选型逻辑维度exp.exe / imp.exeexpdp.exe / impdp.exe执行位置客户端即可必须在服务端PL/SQL 图形支持原生支持需手动配目录对象跨版本兼容好11g 可导 10g差版本必须匹配大表性能一般好支持并行文件落地本地任意路径服务端 DIRECTORY 对象如果你的场景是「在开发机上用 PL/SQL 把某张表导出来发给同事」那exp.exe就是唯一顺手的方案。bin目录里这两个 exe 的存在本质是 Oracle 给客户端留的一条本地导出通道。2.2 64 位 PL/SQL 为什么必须匹配 64 位 bin 目录这是翻车率最高的一点。PL/SQL Developer 有 32 位和 64 位两个版本Oracle 客户端也有 32 位和 64 位。规则是PL/SQL 的位数必须和 Oracle 客户端的位数一致而bin目录里的imp.exe/exp.exe位数又由客户端决定。如果你装的是 64 位 PL/SQL却指向了一个 32 位 Oracle 客户端的bin目录PL/SQL 能连上库因为 OCI 调用可能碰巧兼容但一执行导入导出就会报「无法初始化 EXP」或者进程直接退出。反过来32 位 PL/SQL 配 64 位客户端连库阶段就会报「无法定位 OCI dll」或「不能初始化你确认已经安装了 32 位 Oracle 客户端」。验证方法很简单在命令行里跑# 进入 Oracle 客户端的 bin 目录查看 exp.exe 的位数 # 方法一用 file 命令Linux/Git Bash 环境 file exp.exe # 方法二Windows 下用 PowerShell 查看 PE 头 # 打开 PowerShell执行 # (Get-Item C:\oracle\product\11.2.0\client_1\bin\exp.exe).VersionInfo更直接的办法是看bin目录同级有没有oci.dll用 Dependency Walker 或dumpbin /headers看机器类型。我一般会直接记住64 位客户端的bin目录里exp.exe体积通常在 1MB 以上32 位的会小一圈但这只是辅助判断最稳的还是看安装包名字里有没有x64。2.3 在 PL/SQL 里把 bin 目录指对首选项配置实操PL/SQL Developer 找exp.exe/imp.exe靠的是首选项里的路径配置不是环境变量。步骤打开 PL/SQL Developer菜单 Tools → Preferences。左侧树选 Oracle → Options不同版本可能叫 Oracle Home 或 Connection。在「Oracle Home」下拉里选中你的 64 位客户端主目录比如C:\oracle\product\11.2.0\client_1。在「OCI library」里确认指向bin\oci.dll。关键一步切到 Tools 或 Export/Import 相关页找到「Export/Import executables」路径填C:\oracle\product\11.2.0\client_1\bin。配置完重启 PL/SQL。如果 Tools 菜单下的 Import Tables 能正常弹出窗口说明bin目录已经被正确挂载。这里有个细节PL/SQL 不会去读PATH环境变量找exp.exe它只认首选项里写的绝对路径。所以哪怕你在 cmd 里敲exp能跑PL/SQL 里照样可能报找不到。3. 用 bin 目录下的 exp.exe 和 imp.exe 跑通一次完整导入导出3.1 命令行先验证 exp.exe 可用最小导出命令在让 PL/SQL 调用之前先在命令行把exp.exe跑通排除环境问题。打开 cmdcd 到bin目录或者把bin目录加进PATH# 进入 Oracle 客户端 bin 目录 cd C:\oracle\product\11.2.0\client_1\bin # 最小导出导出 scott 用户的 emp 表到当前目录 exp scott/tigerorcl fileemp.dmp tablesemp logemp_exp.log # 参数说明 # scott/tigerorcl —— 用户名/密码服务名服务名要和 tnsnames.ora 里一致 # fileemp.dmp —— 导出的二进制 dump 文件默认落在当前工作目录 # tablesemp —— 只导 emp 表不写则导整个用户 # logemp_exp.log —— 导出日志排错必看跑完看两样东西当前目录有没有生成emp.dmp以及emp_exp.log末尾有没有「成功终止导出」。如果报ORA-12541: TNS: 无监听程序说明服务名或监听有问题跟bin目录无关如果报EXP-00056之类多半是权限或表不存在。这一步过了才说明bin目录里的exp.exe本身是健康的。3.2 用 imp.exe 把 dmp 导回去参数与日志排查导出验证完紧接着验证导入形成闭环# 导入刚才的 emp.dmp 到 scott 用户表已存在时追加数据 imp scott/tigerorcl fileemp.dmp tablesemp fromuserscott touserscott logemp_imp.log # 参数说明 # fromuserscott —— 源 schemadmp 里记录的是谁导出的 # touserscott —— 目标 schema可以跨用户导入 # ignorey —— 表已存在时忽略建表错误直接追加数据 # commity —— 每导入一批就提交避免大表回滚段爆掉导入最常见的坑是「表已存在」导致IMP-00015报错加ignorey就能绕过。另一个坑是字符集如果导出端和导入端NLS_LANG不一致中文会变乱码。查当前字符集用select userenv(language) from dual;然后在导入前设set NLS_LANGSIMPLIFIED CHINESE_CHINA.ZHS16GBKWindows或export NLS_LANG...Linux。日志文件emp_imp.log里会逐条记录每张表的导入行数导入完对一下行数比在 PL/SQL 里肉眼数靠谱。3.3 在 PL/SQL Developer 里调用 bin 目录完成图形化导入导出命令行通了PL/SQL 里就顺了。操作路径连上数据库后菜单 Tools → Export Tables。选 Oracle Export 页签不是 SQL Inserts那个走的是另一套逻辑。在 Output file 里填本地路径比如D:\backup\emp.dmp。勾选要导出的表点 Export。PL/SQL 会在后台拼出exp.exe命令并调用bin目录里的可执行文件。导入同理Tools → Import Tables → Oracle Import选 dmp 文件填目标用户点 Import。如果这里报「Cannot find EXP executable」回到 2.3 检查首选项路径。如果报「EXP-00008: 遇到 ORACLE 错误 904」多半是 PL/SQL 调用的exp.exe版本和数据库版本差太多比如用 11g 客户端导 19c 库的某些新特性表。提示PL/SQL 的图形化导入导出本质是命令行包装所有参数最终都映射到exp/imp的命令行选项。遇到图形界面报错看不懂直接看 PL/SQL 生成的日志文件里面会有完整的命令行和 Oracle 原始错误码。4. 避坑bin 目录配置里最容易翻车的 5 个问题4.1 现象PL/SQL 报「无法定位 OCI dll」→ 原因位数不匹配 → 解决统一 64 位这是最经典的翻车。你装的是 64 位 PL/SQL Developer 14 免安装包却指向了 32 位 Oracle 客户端的bin目录。PL/SQL 启动时加载oci.dll失败直接弹「无法定位 OCI dll」或「不能初始化你确认已经安装了 32 位 Oracle 客户端」。注意后半句的误导性——它提示你装 32 位其实是因为它自己就是 32 位的。解决确认 PL/SQL 安装包名字里带x64Oracle 客户端也用 64 位安装包两者位数一致后重新在首选项里指路径。4.2 现象命令行 exp 能跑PL/SQL 里导入导出报找不到程序 → 原因首选项路径没配 → 解决填绝对路径exp.exe在PATH里cmd 敲exp有反应但 PL/SQL 的 Tools 菜单一点就报错。原因是 PL/SQL 不读系统PATH它只认 Preferences 里 Export/Import executables 那一栏。解决把bin目录的绝对路径填进去比如C:\oracle\product\11.2.0\client_1\bin不要带引号不要用相对路径重启 PL/SQL。4.3 现象导出成功但导入报 IMP-00015 表已存在 → 原因没加 ignore → 解决ignorey 或先 drop导入时如果目标表已经存在imp.exe默认会报IMP-00015: 下列语句失败因为对象已存在然后跳过这张表。如果你是想追加数据加ignorey如果是想覆盖先在 PL/SQL 里 drop 掉目标表再导。注意ignorey只忽略建表错误不忽略数据插入错误主键冲突照样报。4.4 现象中文数据导入后变问号或乱码 → 原因NLS_LANG 不一致 → 解决导出导入两端设同一字符集导出端数据库字符集是ZHS16GBK导入端客户端NLS_LANG没设默认走AMERICAN_AMERICA.US7ASCII中文全变问号。解决在导入的 cmd 窗口先执行set NLS_LANGSIMPLIFIED CHINESE_CHINA.ZHS16GBK再跑imp。Linux 下用export NLS_LANG...。查数据库字符集select * from nls_database_parameters where parameterNLS_CHARACTERSET;。4.5 现象大表导出到一半报 EXP-00056 或快照过旧 → 原因回滚段不足或一致性读 → 解决加 consistentn 或分批导出大表时如果报ORA-01555: 快照过旧是因为exp默认开一致性读consistenty需要回滚段保留导出开始时的镜像。表越大、导出越久回滚段越容易撑不住。解决加consistentn关掉一致性读代价是导出期间的数据可能不一致或者用query参数分批导比如querywhere rownum100000。生产库导出建议在业务低峰期做。5. 进阶把 bin 目录的 exp/imp 封装成可复用的备份脚本命令行跑通之后真正省事的是把它脚本化。我一般会在bin目录旁边放一个backup.bat把常用参数固化下来echo off REM Oracle11g 64bit 逻辑备份脚本调用 bin 目录下的 exp.exe set ORACLE_BINC:\oracle\product\11.2.0\client_1\bin set NLS_LANGSIMPLIFIED CHINESE_CHINA.ZHS16GBK set BACKUP_DIRD:\backup\%date:~0,4%%date:~5,2%%date:~8,2% if not exist %BACKUP_DIR% mkdir %BACKUP_DIR% %ORACLE_BIN%\exp.exe scott/tigerorcl ^ file%BACKUP_DIR%\scott_full.dmp ^ log%BACKUP_DIR%\scott_full.log ^ ownerscott ^ consistentn ^ directy REM 参数说明 REM ownerscott —— 按用户导出比 tables 更适合整库备份 REM consistentn —— 关一致性读避免大库快照过旧 REM directy —— 直接路径导出绕过 SQL 层速度快但需权限这个脚本每天跑一次按日期建目录dmp 和 log 放一起。directy是提速关键它绕过 SQL 引擎直接读数据文件大表导出能快 2 到 3 倍但要求用户有EXP_FULL_DATABASE权限且导出期间不能有 DDL 操作。如果权限不够去掉directy即可。验证备份是否可用别只看文件大小。我习惯每周抽一个 dmp 做恢复演练建一个临时用户用imp导进去select count(*)对一下行数。这一步是后悔药等真出事再发现 dmp 是坏的就来不及了。另外bin目录里的exp.exe和imp.exe是客户端工具它们导出的 dmp 只能被同版本或更高版本的imp.exe读取11g 导出的 dmp 拿到 10g 客户端上导会报版本不兼容跨版本迁移时务必确认目标端客户端版本不低于源端。最后说个习惯每次配完 PL/SQL 的bin路径我会在 cmd 里手动跑一遍exp和imp的最小命令确认两个 exe 都能独立工作再回 PL/SQL 点图形界面。这样一旦图形界面报错就能立刻判断是 PL/SQL 配置问题还是 Oracle 客户端本身问题省去来回猜的时间。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站