
简介这份资源是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等常用管理程序便于在升级、换机或搭建测试环境时快速复用。目前已有4158人学习下载读者可直接获得一套可落地的Oracle客户端工具集省去逐一下载安装的麻烦并借助批处理脚本与配套文件理解各工具间的调用关系提升数据迁移与日常维护效率。1. Oracle 11g 64 位下 bin 目录里的 imp.exe 与 exp.exe为什么老 DBA 还在用它接手一套跑了七八年的老业务库时你大概率会遇到这种场面对方丢过来一个.dmp文件说“用 PL/SQL 导一下就行”而你打开 PL/SQL Developer 的工具菜单发现导入导出走的还是imp.exe和exp.exe这两个命令行程序。它们就躺在 Oracle 11g 64 位安装目录的bin文件夹里和sqlplus.exe、tnsping.exe挤在一起。这套 exp/imp 属于 Oracle 早期的逻辑备份工具官方后来主推的是数据泵 expdp/impdp但在大量存量环境里exp/imp 依然是默认选项——PL/SQL Developer 的 Tools 菜单里那两项 Import Tables 和 Export Tables底层调的就是它们。这篇文章面向的是需要维护老库、做跨库迁移、或者被要求“导出一个 schema 给测试环境”的从业者。我会把 bin 目录里这两个 exe 的定位、PL/SQL 怎么调用它们、参数怎么配、以及那些让人半夜爬起来重跑的坑一条条讲清楚。不吹数据泵多先进只讲这套老工具在 11g 64 位环境下怎么用稳。2. 先搞懂 exp.exe 和 imp.exe 在 11g 64 位里到底是什么2.1 客户端工具还是服务端工具这个区别决定你能不能连上库很多人第一次翻车就翻在这里。exp.exe和imp.exe是 Oracle 客户端组件不是数据库服务端独有的东西。你装完整版 Oracle 11g 数据库%ORACLE_HOME%\bin下自然有它们你只装了一个 Instant Client那多半没有因为 Instant Client 默认不带 exp/imp。这就解释了一个高频现象本机 PL/SQL 能连上库但一点导出就报“找不到 exp.exe”。判断方法很直接打开命令行敲where exp where imp如果两条都返回路径且路径指向你的 11g 安装目录下的bin说明客户端工具齐全。如果返回空或者指向一个版本混杂的目录那就要小心了——exp/imp 的版本兼容性有硬规矩后面避坑章节会细说。还有一个容易忽略的点64 位的 exp.exe 只能配合 64 位的 Oracle 客户端库运行32 位的 PL/SQL Developer 去调用 64 位的 exp.exe中间要靠一层适配配置不对就是各种 OCI 报错。所以“64bit 下的 bin 目录”这个前提本身就意味着你在客户端位数上要做一次对齐。2.2 exp/imp 与 expdp/impdp 的边界什么时候必须用老的数据泵 expdp/impdp 是服务端工具导出文件只能落在数据库服务器目录上需要建 DIRECTORY 对象、要有相应权限。而 exp/imp 是客户端工具导出文件直接落在你执行命令的这台机器上不需要在服务器上开目录。这个差异决定了使用场景对比项exp/impexpdp/impdp运行位置客户端服务端文件落点执行命令的机器数据库 DIRECTORY 指向的服务器路径权限要求一般只需 exp_full_database 或普通用户权限需要 DIRECTORY 读写权限跨版本兼容高版本 exp 可导低版本低版本 exp 不能导高版本版本匹配要求更严大表性能一般并行明显更快所以当你没有服务器登录权限、只能从自己电脑连库导数据时exp/imp 往往是唯一顺手的选择。PL/SQL Developer 把它做成图形入口本质就是替你拼了一条 exp/imp 命令。2.3 PL/SQL Developer 是怎么调用这两个 exe 的PL/SQL 的 Tools → Export Tables 里选择 Oracle Export 方式时它会在后台拼一条类似这样的命令exp user/pwdtnsname fileexport.dmp logexport.log tablesemp,dept选择 SQL Inserts 方式时它走的是另一条路生成 INSERT 语句不调用 exp.exe。所以你在界面上选错导出方式得到的产物完全不同一个是二进制 dmp一个是文本 sql。导入时同理Import Tables 里选 Oracle Import 才会调 imp.exe。理解这一层你就能明白为什么有时候界面上参数填得好好的执行却失败——PL/SQL 只是拼命令真正的报错来自 exp.exe/imp.exe 本身得去看它生成的 log 文件。3. 用 exp.exe 做一次可复现的导出命令、参数与日志3.1 最小可用导出命令与各参数含义先从一个能跑通的例子开始。假设要导出 scott 用户下的 emp、dept 两张表exp scott/tigerorcl fileD:\backup\scott_tables.dmp logD:\backup\scott_tables.log tables(emp,dept) directy逐项说明scott/tigerorcl用户名/密码网络服务名。网络服务名来自tnsnames.ora不是 SID 也不是服务名随便写写错就是 ORA-12154。file导出文件路径。Windows 下路径含空格要用引号包住反斜杠建议用双反斜杠或正斜杠。log日志文件排错全靠它务必每次都加。tables(emp,dept)按表导出。多张表用逗号分隔括号不能省。directy走直接路径绕过 SQL 引擎速度更快。但注意它和某些参数互斥。如果整库或整个用户导出把tables换成ownerscott或fully。owner导出该用户所有对象full需要 exp_full_database 权限。3.2 几个真正影响结果的参数consistent、grants、indexes默认参数导出来的东西经常和预期有偏差下面三个必须心里有数。consistenty保证导出数据在一个时间点一致。不加这个导出过程中别人提交的事务可能让不同表数据对不上。生产库导出强烈建议加代价是需要回滚段空间。grantsy默认就是 y导出对象权限。如果你只想导数据不要权限设grantsn。跨库迁移时权限带过去可能报“用户不存在”这时就得关掉。indexesy默认 y导出索引定义。只想要数据、准备自己重建索引的场景设indexesn能省不少导入时间。一条更贴近生产的命令exp scott/tigerorcl fileD:\backup\scott_full.dmp logD:\backup\scott_full.log ownerscott consistenty grantsn indexesy buffer10485760buffer控制数组提取大小大表导出时调大能减少网络往返但别超过系统内存承受范围。3.3 导出日志怎么读三个关键行exp 执行完log 文件里最该看的是这三处第一处是开头几行确认Export: Release 11.2.0.x版本号以及Connected to: Oracle Database 11g版本对不上后面可能出问题。第二处是中间的对象统计. exporting table EMP后面跟x rows exported行数为 0 要警惕可能是表本身空也可能是权限或过滤条件问题。第三处是结尾正常是Export terminated successfully without warnings.。如果出现with warnings或terminated with error往上翻找EXP-开头的错误码。常见的有 EXP-00008遇到 Oracle 错误、EXP-00091统计信息问题通常可忽略。养成每次导出后grep一下 log 的习惯比事后发现 dmp 不完整要省事得多。4. 用 imp.exe 把 dmp 导回去顺序、权限与常见报错4.1 导入前必须确认的三件事导入比导出更容易出乱子动手前先确认第一目标库的字符集和源库是否一致。不一致会导致中文乱码而且导入后再改很麻烦。查字符集SELECT parameter, value FROM nls_database_parameters WHERE parameter IN (NLS_CHARACTERSET,NLS_NCHAR_CHARACTERSET);第二目标用户是否存在、是否有配额。imp不会自动建用户除非 dmp 里带了用户定义且你有权限表空间配额不够会报 ORA-01950。第三dmp 文件是用哪个版本的 exp 导出的。低版本 exp 导出的文件高版本 imp 能读反过来高版本 exp 导出的低版本 imp 读不了会报 IMP-00010。4.2 一条完整的导入命令与参数拆解imp scott/tigerorcl fileD:\backup\scott_full.dmp logD:\backup\imp_scott.log fromuserscott touserscott_imp commity ignoreyfromuser/touser把源 schema 的对象导到目标 schema。跨用户迁移时必用只写一个就是原样导入。commity每导入一批就提交。大表导入时避免回滚段爆掉但会慢一些。ignorey忽略建表时的“对象已存在”错误常用于往已有表里追加数据。rowsy默认导入数据行。只想导结构设rowsn。如果只想导部分表imp scott/tigerorcl fileD:\backup\scott_full.dmp logD:\backup\imp_part.log tables(emp) ignorey4.3 导入报错对照ORA-01950、IMP-00010、ORA-00959ORA-01950: no privileges on tablespace目标用户在目标表空间没有配额。解决是ALTER USER scott_imp QUOTA UNLIMITED ON users;。IMP-00010: not a valid export file, header failed verification版本不匹配或者文件在传输中被损坏。先确认 exp 版本再确认文件大小是否和源端一致。ORA-00959: tablespace XXX does not existdmp 里记录的表空间在目标库不存在。要么建同名表空间要么用imp时配合tablespaces重映射11g 的 imp 对表空间重映射支持有限复杂场景还是得上 impdp。导入过程中 log 会实时写别等命令跑完才看。发现大量同类错误时及时中断改参数重来比跑完再回滚省时间。5. 避坑与排查exp/imp 在 11g 64 位下的五个血泪经验5.1 现象PL/SQL 点导出没反应或一闪而过原因PL/SQL 调用的 exp.exe 路径不对或者位数不匹配。32 位 PL/SQL 配 64 位 exp 时中间层没配好就会静默失败。解决在 PL/SQL 的 Tools → Preferences → Options 里确认 Oracle Home 指向正确的 11g 目录命令行单独跑一次 exp 确认能通位数不一致时要么换 64 位 PL/SQL要么单独装一套 32 位客户端专门给 PL/SQL 用。5.2 现象导出成功但 dmp 只有几 KB表数据没进去原因多半是tables或owner写错或者当前用户没有那些表的 SELECT 权限。exp 对没权限的对象是跳过而不是报错。解决看 log 里. exporting table的行数为 0 就回头查对象名拼写和权限。用SELECT table_name FROM user_tables;确认对象确实存在。5.3 现象导入中文变问号或乱码原因源库和目标库字符集不一致且 dmp 里的字符集信息在导入时被错误转换。解决导入前用SELECT * FROM nls_database_parameters对比两边字符集。不一致时尽量让目标库字符集是源库的超集实在不行导出时加charset相关处理或者改用 SQL Inserts 方式导出文本再处理。5.4 现象大表导入到一半报 ORA-01555 快照过旧原因导入时回滚段不足或者commity没加长事务把 undo 撑爆。解决加commity并适当调大回滚段或 undo 表空间。导入大表前先评估数据量必要时分批导。5.5 现象exp 报 EXP-00091 统计信息警告原因导出时数据库统计信息收集时间戳和当前不一致属于提示性警告不影响数据完整性。解决可以忽略。如果强迫症要消除导出前对相关表执行一次统计信息收集或者接受这个警告继续用。6. 把 exp/imp 用得更稳几个我常用的进阶习惯第一个习惯是永远带 log并且导出后立刻检查结尾那行。我见过太多次“以为导成功了”结果 dmp 是半截的等到要恢复时才发现。log 是这套工具唯一的黑匣子不看等于裸奔。第二个习惯是导出前先估大小。用SELECT SUM(bytes)/1024/1024 FROM user_segments WHERE segment_name IN (...)大致算一下心里有数避免导出到一半磁盘满。exp 不会帮你检查磁盘空间。第三个习惯是跨版本迁移时用低版本 exp 导、高版本 imp 导。比如从 10g 迁到 11g就在 10g 的客户端上跑 exp在 11g 上跑 imp。反过来大概率报 IMP-00010这个后悔药不好吃。第四个习惯是重要导出做两次一次consistenty走一致性一次directy走速度对比行数。两者行数一致才放心。direct 路径在某些特殊表比如含 LOB 的上行为有差异多一次校验不亏。最后一个习惯是把常用导出命令写成批处理脚本参数抽出来当变量。老库维护往往要反复导同样的几张表脚本化之后少敲很多字也少犯拼写错误。下面这个模板我用了很多年echo off set USERscott set PWDtiger set TNSorcl set OUTDIRD:\backup set TABLES(emp,dept,salgrade) exp %USER%/%PWD%%TNS% file%OUTDIR%\exp_%date:~0,4%%date:~5,2%%date:~8,2%.dmp log%OUTDIR%\exp_%date:~0,4%%date:~5,2%%date:~8,2%.log tables%TABLES% consistenty日期做文件名后缀避免覆盖参数集中在上方换库只改几行。这套东西不高级但在 11g 64 位的老环境里稳定压倒一切。希望帮到你。本文还有配套的精品资源点击获取