浅析 Oracle Exp/Expdp 实用工具导出的 DMP 文件格式的不同之处
近日,因实际工作需要,笔者对 Exp/Expdp 导出的 DMP 文件进行了初步研究,现记录
如下,一防遗忘,二来或可供 DBA 同行们参阅与指正。
Oracle 从 10g 以来,在原有 Exp 数据导出工具之外,新增加了 Expdp(Oracle 称其为
DataPump 数据泵)工具,效率号称提升了好几个数量级。或许是为了便于 DBA 的了解,这
两个工具导出的文件名后缀默认都是 DMP。这样一来,无形中造成了不必要的误解与麻烦:
一是“粗心”的 DBA 误以为这两个 DMP 文件格式兼容(Oracle 或许在某个 Concept 中
有专门介绍);
二是这两个“美猴王”单从外观上看实在有点“傻傻分不清楚”,除非用 Hex 编辑器
打开它;
三是作为 DMP 文件核心信息的、Oracle 数据库“最复杂而犯晕”的数据库字符集信息
的记录方式很让人挠头。
下面是本人的浅见,错误之处,恳请各位不吝赐教!
(一) Exp 导出格式的 DMP 文件
该格式的 DMP 文件在文件头区记录了两个重要信息:一是数据库版本、一是数据库字
符集;数据库版本格式为 Vxx.xx.xx,下图为 08.01.07 即 Oracle8.1.7 版,数据库字符集为该
文件的第 2、3 字节(注意:偏移从 0 位起算,第 2、3 字节即是 00000000h 的 1、2 号位),
本例为 00 01,即 US7ASCII,03 54 即为 CHS16GBK,修改此 2 字节可手工修改 Exp 导出文
件的字符集。需要特别提醒注意的是:修改 DMP 文件推荐使用 WinHEX、UltraEdit 等编辑
工具,确保在 HEX(16 进制,下同)修改模式下进行,误修改可能会导致文件永久损坏!!!
此外,Exp 工具的导出日志文件中详细记录了数据库字符集信息,如需查询字符集,只
需查看该日志即可。以下是 Exp 工具的 LOG 日志文件格式示例:
可见,数据库版本、数据库字符集、国家字符集已经在日志中有记录了。
(二) Expdp 格式的 DMP 文件
该工具导出的 DMP 文件在文件头区记录的信息更多,有平台版本,见下图标记 1,
为 IBMPC/WINNT64-9.1.0,有数据库实例名,下图标记 2,为 oracle980zd,数据库字
符集,下图标记 3,为 CHS16GBK,数据库版本,下图标记 4,格式为 xx.xx.xx.xx.xx,本
例为 11.02.00. 04.00,即为版本 11.2.0.4.0。
打算手工修改 Expdp 导出的 DMP 文件字符集的朋友们要当心,笔者不能冒猜是否
评论