Oracle 11g 64位 exp/imp 导入导出工具配置与避坑指南

发布时间:2026/10/9 17:41:11
Oracle 11g 64位 exp/imp 导入导出工具配置与避坑指南 简介针对Oracle11g 64位环境提供其bin目录的核心文件包重点包含imp.exe与exp.exe导入导出工具面向需要完成数据迁移、备份恢复或环境同步的数据库管理员和开发者。包内共691个文件压缩包126.04MB以dll动态库、exe可执行程序、bat批处理脚本、pm脚本等类型为主可在PL/SQL Developer中直接调用免去完整安装Oracle客户端的繁琐配置。已有4158人学习。借助这些工具用户能灵活完成表、模式或全库的导出与导入支持过滤条件、压缩存储和一致性检查配合图形界面操作可显著提高大批量数据的迁移效率减少命令行手工操作可能带来的失误适合日常运维、测试库搭建及跨平台数据同步等场景。1. 为什么一个 bin 目录能卡住一整条导入导出链路你在一台 64 位 Oracle 11g 服务器上装了数据库本地用 PL/SQL 图形化客户端连得挺顺畅一到“导入/导出”就报错找不到 exp.exe或者找到了但双击毫无反应。更常见的是你从某台机器上拷了一个“Oracle 客户端工具包”里面只有 imp.exe 和 exp.exe拿到新机器却怎么都用不了。这个标题讲的就是这件事Oracle 11g 64 位安装目录 bin 下的 imp.exe 和 exp.exe 是传统导入导出工具的核心文件它们能跑通取决于文件是否完整、环境变量是否就位、字符集是否匹配缺一项就翻车。大多数时候问题不在文件缺失而在 DLL 依赖和 NLS_LANG 设置上。这篇笔记会把它讲透让图形客户端里的导入导出按钮真正能用起来。2. 先把工具搞清exp/imp 在 11g 64 位环境里的真实地位Oracle 11g 的 ORACLE_HOME\bin 目录里同时躺着两套导入导出工具一套是标题里说的传统 exp.exe/imp.exe另一套是以 expdp.exe/impdp.exe 为代表的数据泵。很多从业者分不清这两者结果按数据泵的参数去写传统命令或者反过来在图形化客户端里配了 expdp 的路径折腾半天还是失败。这里先把两套工具的定位讲清楚后面所有命令和参数才有讨论基础。2.1 两种工具一句话分辨exp 和 expdp 差的不只是一个字母传统 exp/imp 是 Oracle 早期就有的导入导出实现数据泵 expdp/impdp 是 10g 开始推出的重写版本。功能上数据泵更强但运行模型完全不同。对比维度exp / imp传统版expdp / impdp数据泵运行位置客户端、服务器均可只能在数据库服务端执行dump 文件位置客户端本地磁盘服务器磁盘上的 directory 路径连接方式通过 SQL*Net 连库必须能访问服务器文件系统并行能力不支持DIRECTY 只是路径优化支持 PARALLEL 多进程图形客户端支持默认调用这套一般不直接调用跨版本方向高版本 imp 可读低版本 dmp导出可用 VERSION 降级导出和导入端版本需接近否则限制多日常工作中你只需要记住一条PL/SQL 图形化客户端的“导入/导出”按钮底层调用的就是传统 exp/imp。图形工具没有跑数据泵的条件数据泵需要你登录服务器用命令行操作还要先建 DIRECTORY 对象。所以这个标题里 bin 目录的 imp.exe/exp.exe是图形化导入导出链路里绕不开的一环。2.2 bin 目录里哪些文件和你导入导出真正相关只看到 imp.exe 和 exp.exe 两个文件会让你误以为工具包就这两样。Oracle 的 exe 都是动态链接的exp.exe 启动后要加载同目录下的一批 DLL比如核心的 oci.dll、网络层相关的库文件。我见过有人图省事从服务器上只拷贝这两个 exe 到 U 盘拿到别的机器上双击直接报 0xc000007b 或“缺少 DLL”这就是典型的文件不完整。正确做法是保留整个 bin 目录的相对结构。你不需要把 bin 里所有文件都拷走但要保证 exe 所在目录的 DLL 文件集是完整的。最简单的判断标准在命令行里进入 bin 目录输入 exp helpy如果能正常输出版本信息和参数列表说明 DLL 依赖没问题如果报错缺文件。另外注意一个常见误区Oracle Instant Client 里通常没有 exp/imp。很多人下载了所谓的轻量客户端配好之后图形工具能连库但导入导出还是失败因为 Instant Client 的 bin 下根本没有这两个 exe。标题里说的这个 bin 目录是完整版 Oracle 安装或完整版客户端安装的产物不是 Instant Client。2.3 哪些场景必须用传统 exp/imp传统工具虽然老但在几类场景下是最可靠的选择要给低版本数据库交接数据。比如 11g 库导出的数据要导入一个 9i 或 10g 库传统 exp 可以加 VERSION 参数降级数据泵的限制更多。图形化客户端做导入导出。这是默认链路客户端工具只认传统 exp/imp。临时导出几张配置表。几十 MB 的小表开数据泵还要建 directory、给权限传统 exp 一条命令就完了。没有服务器 shell 权限。数据泵必须登录服务器跑传统 exp/imp 只要网络通、有数据库账号就行。边界也要说清楚11g 里新增的部分对象类型比如 SecureFile LOB传统 exp 支持得不好导出时可能报 EXP-00106 这类错误遇到这种对象模型老老实实用 expdp/impdp 在服务器端处理。3. 把 64 位 bin 目录配成可用工具包环境变量和调用链文件在工具还在但图形客户端还是提示找不到 imp.exe或者命令行里敲 exp 提示“不是内部或外部命令”。这一步要处理的是环境变量和工具调用链。Oracle 的命令行工具定位 ORACLE_HOME 依赖环境变量图形客户端定位 exe 依赖它自己的配置项。这两条线都要打通导入导出才算真正配好。3.1 三条环境变量一次设对ORACLE_HOME、PATH、NLS_LANG在 Linux 或 Unix 服务器上经验做法是在当前用户的配置里导出这三个变量。以 11g R2 为例export ORACLE_HOME/u01/app/oracle/product/11.2.0/dbhome_1 export PATH$ORACLE_HOME/bin:$PATH export NLS_LANGAMERICAN_AMERICA.ZHS16GBK在 Windows 上对应的写法是set ORACLE_HOMEC:\oracle\product\11.2.0\dbhome_1 set PATH%ORACLE_HOME%\bin;%PATH% set NLS_LANGAMERICAN_AMERICA.ZHS16GBKORACLE_HOME 的作用是让 exe 找到它依赖的 DLL 和配置文件。PATH 的作用是让命令行在任何目录下都能直接敲 exp 或 imp不用每次 cd 到 bin 目录。NLS_LANG 的格式是“语言_地区.字符集”它告诉 exp/imp 当前客户端用什么字符集解释数据。NLS_LANG 是最容易埋雷的变量。它不一定要和数据库字符集完全一致但最稳的做法是和数据库一致。查询数据库端视角的推荐值可以执行SELECT userenv(language) FROM dual;这个查询返回的就是一个标准的 NLS_LANG 格式字符串直接抄下来用。设置完记得重新打开命令行窗口环境变量才生效。3.2 图形客户端是怎么找到 imp.exe 的两种调用方式图形化工具调用 imp/exp 的方式有两种。第一种是外部进程方式工具配置里有一个“导入导出可执行文件路径”之类的选项你填了 C:\oracle...\bin\imp.exe工具就通过系统接口启动这个外部进程。第二种是工具内置了 OCI 驱动直连数据库但导入导出动作仍然会拉起外部 exe。这里有个 32 位/64 位纠缠的问题。如果图形客户端本身是 32 位进程它启动一个 64 位的 exp.exe 是没问题的因为这只是普通的进程创建不是 DLL 注入。真正的冲突发生在 exp.exe 加载 DLL 时64 位的 exe 必须加载 64 位的 DLL。如果你把 32 位客户端装的 DLL 路径放在了 PATH 前面64 位的 exp.exe 就可能加载到 32 位 DLL然后报 0xc000007b。所以 PATH 里哪个 bin 在前决定了 exe 加载哪套 DLL。配置图形工具时注意区分两个概念工具连接数据库用的 OCI 路径和工具调用 imp/exp 的路径。前者决定你能不能连上库后者决定导入导出按钮能不能用。很多人只配了前者后者留空或者指向了 Instant Client按钮自然是灰的。3.3 验证链路一条命令确定 exp 能连上库环境变量配好之后不要急着打开图形工具点按钮先在命令行里验证整条链路。分三步走# 第一步确认 exe 能被找到且 DLL 依赖完整 exp helpy # 第二步确认数据库网络别名能解析 tnsping orcl # 第三步用最小命令实际导出一张表 exp useridsystem/口令orcl file/tmp/test.dmp log/tmp/test.log tablesEMP rowsnexp helpy 如果正常输出一大版参数说明说明 bin 目录和 PATH 没问题。tnsping orcl 确认 TNS 别名解析正常。最后那条最小导出命令tablesEMP 指定只导一张演示表rowsn 表示不导数据只要结构几十 KB 的 dmp 几秒就出来。跑通了图形客户端里大概率也能用。第三步里如果报 ORA-12154说明 TNS 别名找不到检查 tnsnames.ora 是否在 $ORACLE_HOME/network/admin 下。如果报口令错误注意用户和密码之间是斜杠Linux 下特殊字符要加引号。4. 用 imp.exe / exp.exe 干活高频命令与参数组合环境配通了接下来是实际干活。传统 exp/imp 的参数体系虽然老但只要几个关键参数理解了覆盖日常 80% 的导入导出需求没压力。这一章给的是可以直接抄走的命令写法每条命令后面的参数说明注意看一眼改错了不报错但结果不对的情况更坑。4.1 参数文件是命令行最长情的伙伴把口令写进 parfile命令行里直接写 useridsystem/口令orcl口令会出现在 shell 历史和进程列表里。我一般把参数写进一个 parfile 参数文件这样口令不进命令行参数还有注释团队交接也方便# exp.par useridsystem/口令orcl file/backup/scott.dmp log/backup/scott.log ownerSCOTT buffer10485760 statisticsnone grantsy rowsy执行方式exp parfileexp.parownerSCOTT 表示按用户 SCOTT 导出。buffer 是缓冲区字节数调大到 10MB 能减少取数往返对大表有帮助。statisticsnone 表示不导出统计信息这样导入端不会带着一套可能不适用的统计信息。grantsy 保留对象授权。rowsy 导出表数据。Windows 下注意路径写法建议用正斜杠 C:/backup/scott.dmp避免反斜杠在某些场景下的解析问题。parfile 文件本身的编码也要注意中文路径或中文口令在 Windows 记事本另存为 ANSI 编码最稳。4.2 按用户导出整个 schemaowner 与 BUFFER/STATISTICS 的取舍4.1 的参数文件就是按用户导出的标准写法。这里补充一个场景如果只要导出某一个用户又不想在命令行里写一长串参数parfile 是最优解。但如果你没有权限或不便建 parfile命令行写法是这样exp useridsystem/口令orcl \ file/backup/scott.dmp \ log/backup/scott.log \ ownerSCOTT buffer10485760 \ statisticsnone grantsy反斜杠是换行符在 Linux shell 下有效Windows cmd 下要写一行。BUFFER 这个参数我对超过 5GB 的表会调到 50MB 左右但注意它不是越大越好超过阈值后收益递减。统计信息那行建议保留 statisticsnone否则导入完成后统计信息可能还是旧库的优化器选错执行计划是后续性能问题的常见来源。4.3 只导结构或只导数据ROWS 和 INDEXES 怎么组合不同场景对数据的取舍需求不一样。初始化一个测试环境通常只要表结构迁移一个历史表可能只要数据。传统 exp/imp 里控制这个的核心参数是 ROWS 和 INDEXES# 只导结构建表语句和存储过程等对象不含行数据 exp useridsystem/口令orcl parfileexp_struct.par rowsn # 只导数据假设结构目标库已有 exp useridsystem/口令orcl parfileexp_data.par rowsy indexesn参数组合的意思是rowsn 时导出端不读取表数据dump 文件里只有 DDLrowsy 时数据照常导出indexesn 则跳过索引和约束相关的导入指令。常见的搭配下表需求exp 端imp 端完整迁移 包括结构数据索引rowsy indexesyindexesy只要结构rowsn无特殊只要数据rowsy indexesnindexesn大表先导数据再补索引rowsy indexesnindexesn之后手工建索引大表场景我建议用“先导数据再补索引”的组合。索引在数据导入时重建等于每插一行都要维护索引速度会差很多。先 indexesn 导完数据再用脚本批量建索引整体耗时往往能压缩一半以上。4.4 跨低版本数据库交付version 参数和它的副作用要把 11g 导出的数据交到一个 10g 或 9g 的库里直接导肯定不行低版本的 imp 不认高版本的 dmp 文件头。传统工具给了一条路用 VERSION 参数降级导出# 在 exp.par 里增加一行 version10.2.0.1.0这样导出的 dmp 文件头按照 10.2.0.1.0 的格式生成低版本 imp 就能识别。副作用是版本低于 11g 的对象类型会被静默跳过或写警告到 log 里比如 11g 才有的虚拟列、部分新的存储选项。我常用的做法是先看 log 文件里有没有 EXP-00106 或“skipping”字样有就说明丢东西了需要改用数据泵处理。4.5 常规导入 scott 到 hrfromuser、touser、ignore、commit导入端的高频命令是把一个 schema 的数据导入另一个 schemaimp useridsystem/口令orcl \ file/backup/scott.dmp \ log/backup/imp_scott.log \ fromuserSCOTT touserHR \ ignorey commity buffer10485760fromuserSCOTT 告诉 imp 这个 dmp 里的对象属于哪个用户touserHR 表示导入到目标用户。ignorey 表示导入过程中遇到目标端已存在的对象不报错跳过。commity 表示每批数据插入后立即提交避免一个大事务把回滚段撑爆。这里要注意一个边界传统 imp 没有 expdp 里那种 REMAP_TABLESPACE 参数。如果 dmp 里的对象属于某个表空间而目标库没有同名的表空间导入会报 ORA-00959。处理办法是预先在目标库创建同名表空间或者干脆换数据泵工具做表空间重映射。5. 避坑64 位 bin 里 exp/imp 的五个典型翻车点导入导出报错不怕怕的是报错信息看了不知道往哪查。这一章把我踩过和见别人踩过的坑集中拆开每条按现象、原因、解决三个层面写你遇到同类问题时直接对号入座。5.1 EXP-00091 和乱码NLS_LANG 才是幕后黑手现象exp 导出时日志里出现“EXP-00091: Exporting questionable statistics”导入后中文字段变成乱码或问号。原因EXP-00091 本身只是统计信息相关的警告但它背后往往是 NLS_LANG 没有设置或与数据库字符集不一致。exp 导出时用 NLS_LANG 指定的字符集去解释客户端数据两端不一致时中文字符在转换过程中被替换导入端自然乱码。解决先查数据库字符集设置一致的 NLS_LANG。查询用这段SELECT parameter, value FROM nls_database_parameters WHERE parameter IN (NLS_CHARACTERSET, NLS_NCHAR_CHARACTERSET);拿到字符集后比如结果是 ZHS16GBK就把 NLS_LANG 设成 SIMPLIFIED CHINESE_CHINA.ZHS16GBK重新打开命令行再导出。注意 Windows 下注册表里也可能有 NLS_LANG 项改了注册表要完全退出图形客户端再重进。5.2 64 位工具撞上 32 位进程0xc000007b 还是找不到文件现象图形客户端里点导入导出没反应或在命令行运行 exp 报错窗口一闪而过。控制台里手动运行报“0xc000007b”或“不是有效的 Win32 应用程序”。原因0xc000007b 是典型的位数不匹配错误64 位 exe 加载了 32 位 DLL或者反过来。另一种情况是 PATH 里排前面的 bin 目录里根本没有 exp.exe系统找到了别的 Oracle 客户端目录。把两个 exe 单独拷到别的目录也会触发类似问题。解决确认 PATH 里第一个 Oracle bin 目录是你要用的那个版本不要单独拷贝 exe保留整个 bin 目录结构如果图形工具自带的客户端是 32 位的而你想调 64 位 exp.exe确认工具配置里导入导出路径明确指向 64 位 bin并且在命令行先把 PATH 验证好。5.3 IMP-00010看着是 dmp其实早坏了现象imp 一执行就报“IMP-00010: not a valid export file, header failed verification”换了几台机器都一样。原因dmp 文件是二进制格式最常见的情况是文件在传输过程中被损坏。FTP 用了文本模式传输、下载中断但文件大小看起来正常、用压缩软件打开后另存为普通文件这三种情况我都见过。另一个可能是低版本 imp 读高版本 dmp但那个报错信息通常不同。解决先检查文件头。用十六进制查看器或直接 strings 命令提取可读字符strings suspect.dmp | head -20 # 或更精确一点 head -c 32 suspect.dmp | od -A d -t x1正常的 dmp 文件头能看到 “EXPORT:V11.02.00” 之类的版本标记。看不到标记基本可以断定文件已损坏。重新导出后用二进制模式传输传输完比对文件大小和源文件是否一致。5.4 导入半小时不动BUFFER、COMMIT 与回滚段的三角关系现象一个 200MB 的 dmp 导了两个小时还没完或者中途报 ORA-01555、ORA-01650 回滚段相关错误。表也不大速度就是上不去。原因默认情况下 imp 是在整个表导入完成后才提交一个大表就是一个超大事务。BUFFER 默认值偏小每批次取数量少加上回滚段不断增长整体性能自然拉胯。解决两条参数配合调。BUFFER 调大到 10485760 以上COMMITY 开启分批提交imp useridsystem/口令orcl \ file/backup/big.dmp \ log/backup/big_imp.log \ buffer10485760 commity代价也要说清楚commity 之后导入过程中途失败时已提交的部分不会自动回滚不能指望整个导入的原子性。生产环境做数据初始化时我一般先用 commitn 做小表验证逻辑确认无误后再对大表用 commity 提效。5.5 导完“成功”但少对象grants/indexes/triggers 开关没对齐现象imp 日志显示成功结束但对比源库发现缺索引、存储过程编译失效、部分表的授权没有了。原因导入导出的开关是一个体系exp 端没导出来的东西imp 端再怎么配也找不回来。最常见的情况是从别人那儿复制了一个 exp 参数模板里面 grantsn 或 triggersn导出时静默丢掉了授权和触发器。解决全量迁移场景下我固定用这组开关保证导出完整exp useridsystem/口令orcl \ ownerSCOTT \ grantsy triggersy indexesy \ constraintsy statisticsnone导入端对应保持全开。导出完成后在 log 文件里搜索“warning”和“skipping”字样有就要回头检查。存储过程编译失效不一定是导入问题导入顺序导致依赖对象还没建完是常态导入完再执行一次重新编译脚本即可。6. 花 10 秒给不熟悉的 dmp 做体检showy 的只读检查法接手别人给的 dmp 文件最忌讳直接 imp。你不知道里面是什么版本导出的、有哪些对象、原 schema 是谁贸然导入大概率中途报错。传统 imp 自带一个只读体检模式showy它只解析 dump 文件并输出内容清单不向数据库写入任何对象。imp useridsystem/口令orcl \ file/backup/unknown.dmp \ log/backup/preview.log \ showy跑完之后打开 preview.log能看到导出工具的版本、原用户、每张表的建表和插入语句。用几条命令快速提取关键信息# 看导出工具版本 grep Export /backup/preview.log | head -5 # 统计里面有多少张表 grep -c CREATE TABLE /backup/preview.log # 看原 schema 名 grep CREATE TABLE /backup/preview.log | head -3我接手陌生 dmp 的习惯是固定三查第一查版本确认是不是 11g 或更高版本导出的决定导入端用哪个版本的 imp第二查 show 输出里有没有格式警告有警告说明文件可能有瑕疵第三查原 schema 和表空间名和目标库对不上就提前准备同名表空间别等导入到一半才报 ORA-00959。这个体检还有个额外价值showy 不需要目标库有足够空间几百 MB 的 dmp 几秒钟就能完成检查比导入失败再排查快得多。也是因为吃过几次“直接导入才发现文件头不对”的亏现在任何 dmp 到我手上第一动作永远是 showy 而非 imp。希望这些经验帮你在导入导出这条路上少踩几个坑。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询