注册
windows平台上使用16进制编辑器浅读Oracle的dmp备份文件
专栏/技术分享/ 文章详情 /

windows平台上使用16进制编辑器浅读Oracle的dmp备份文件

LyC_Dd 2025/08/01 101 0 0
摘要

概述

本文在windows系统从十六进制文件查看器初步解析Oracle的dmp文件。

背景

你是一个Oracle的dba,手上有一个Oracle的dmp文件,或者你甚至不知道它是Oracle的备份文件。同时你手边没有linux环境,无法用string的方式解析,于是你希望通过阅读十六进制文件最大程度的获取该文件的相关信息。

场景搭建

我们先在Oracle中新建一个数据库并备份,再尝试用文本编辑器打开它。

编辑 /data/database/response/dbca.rsp

RESPONSEFILE_VERSION =\"11.2.0\" #不能更改

OPERATION_TYPE =\"createDatabase\"

GDBNAME =\"TEST\" #数据库的名字

SID =\"TEST\" #对应的实例名字

TEMPLATENAME =\"General_Purpose.dbc\" #建库用的模板文件

CHARACTERSET =\"ZHS16GBK\"
#字符集,重要!!!建库后一般不能更改,所以建库前要确定清楚。

TOTALMEMORY =\"800\" #800MB,物理内存\*80%

使用dbca命令行新建数据库

dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbName TEST -sysPassword test -systemPassword test -responseFile /data/database/response/dbca.rsp

image.png

验证数据库创建状态

sqlplus / as sysdba \<\<EOF SELECT name, open_mode FROM v\\\$database; SELECT instance_name, status FROM v\\\$instance; EXIT; EOF

image.png

使用expdp导出系统表

expdp system/test DIRECTORY=dmp_dir DUMPFILE=test_demo_export.dmp
LOGFILE=expdp.log SCHEMAS=system

image.png

查看dmp文件

我们在win系统上可以使用HexEd.it —
免费基于浏览器的十六进制编辑器
打开dmp文件。
image.png

我们看看能获取到什么信息。

基础元数据(最易获取)​

​导出工具与版本​

DMP文件开头通常包含ASCII可读的头部信息,如:

EXPORT:V11.02.00(传统exp工具)或 Dump
file(数据泵expdp)等标识。通过搜索数据泵标识,我们可以确定该dmp由expdp的方式导出。
image.png

​查找 CHARACTER_SET 字段(如
ZHS16GBK/AL32UTF8),位于文件前2KB内的可读字符串中。查找相关字符集​,确定是ZHS16GBK
image.png

​导出时间戳​

EXPORT:YYYY-MM-DD HH:MI:SS 格式的日期时间信息。

image.png

​导出用户​

USERNAME 字段(如 USERNAME=“SCOTT”)。

数据库对象结构​

表名/视图名/存储过程名

所有对象名称均以明文存储。搜索关键词:

CREATE TABLE “表名”、 CREATE VIEW “视图名”。

image.png

列名与数据类型

在 CREATE TABLE 语句中可解析列定义(需熟悉Oracle语法),例如:

“EMPLOYEE_ID” NUMBER(6), “NAME” VARCHAR2(50)。

image.png

​约束与索引

可发现 ALTER TABLE … ADD CONSTRAINT 或 CREATE INDEX 语句片段。

image.png

数据内容

​字符串类型数据(VARCHAR2/CHAR/CLOB)​​

在二进制流中可直接识别ASCII或UTF8编码的可读字符串(如姓名/地址)。

​当我们有linux环境时,使用 strings 命令提取所有可读文本(Linux:strings
-e l file.dmp > out.txt)。本文中假定只能使用windows。

image.png

​数字与日期​​

数字类型(NUMBER)通常为二进制存储,难以直接解读;日期(DATE)可能以YYYYMMDDHH24MISS格式存储为16进制值。

​LOB数据​

BLOB/CLOB可能被分段存储,部分文本内容可识别,但二进制内容无法解读。

高级信息​

表空间名称

查找 TABLESPACE “表空间名” 片段。

image.png

SQL语句片段

如触发器的 CREATE TRIGGER
代码、存储过程的PL/SQL逻辑(可能包含部分可读SQL)。
image.png

小结

通过上述方法,我们至少可提取dmp文件中​元数据、对象名、部分字符数据,而无需linux环境。这对于突发情况有一定程度的帮助。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服