【发布时间】:2020-11-25 14:59:42
【问题描述】:
我需要分析一个大型 Oracle DMP 文件。到目前为止,我还没有使用 Oracle 的经验。
我知道数据库包含有关某些人的信息,例如姓名为 Smith 的人。 我不知道数据库的结构(哪个表包含哪些信息,是否有触发器,...)。
只要我不知道我必须搜索哪些表,我发现使用数据库文件的最佳方法是使用 grep。 这样,我至少可以验证数据库确实包含名称“Smith”。 最终,我想要一个可以在文本编辑器中查看、过滤和理解的 SQL 转储。
DMP 文件是用
创建的expdp system / [PW] directory = [expdp_dir] dumpfile = [dumpfile.dmp] full = yes logfile = [logfile.log] reuse_dumpfiles = y
我知道 Smith 这个名字经常出现在数据库中。运行 grep -ai smith dumpfile.dmp 会返回很多命中。
为了进一步分析数据库,我安装了 oracle-database 和 sqldeveloper-20.2.0.175.1842-x64。我用
导入了DMP文件impdp USERID = system / [PW] FULL = y FILE = [dumpfile.dmp]
文件夹C:\app\[user]\oradata\orcl 现在包含文件SYSAUX01.DBF 和SYSTEM01.DBF 等。
我怀疑这些是数据库文件。
命令grep -ai smith * .DBF 确实不返回任何命中。
文件 SYSAUX01.DBF 和 SYSTEM01.DBF 不是数据库,或者导入时出现问题。
使用 SQL 开发人员,我使用以下数据登录:
用户:系统
密码:[PW](=来自expdp 命令的密码)
SDI:orcl
在 SQL 开发人员中,我没有找到 Smith。 SQL 开发人员显示了许多表,其中大部分看起来 是空的,我不明白。我怀疑这些表不是我要找的表。也许我需要以不同的方式登录(不同的用户,不同的 SDI?)。
我尝试将数据库导出到 SQL 转储文件,尝试 SQL 开发人员提供的各种选项, 但结果不包含字符串“Smith”。
有些不对劲:
- 导入错误
- 错误的 SDI
- 导出错误
- 其他任何东西
在此过程中可能出了什么问题?
【问题讨论】:
-
impdp 命令的输出是什么?您使用的是什么版本的 Oracle,以及生成转储文件的 Oracle 版本是什么?
-
一路走来的问题是您对数据库如何工作的根本误解。是的,那些 .dbf 文件是数据库的一部分。但只是一部分。即使您确实通过 grepping 实际包含它的数据文件找到了“smith”,那又如何呢?您通过发出 sql 查询而不是通过 grepping 原始数据文件从数据库中获取数据。数据文件的关系和结构远比这复杂。
-
您认为
smith到底是什么?模式、模式对象(表、包、过程)还是带有表的数据?如果架构或架构对象尝试使用SQLFILE=选项来获取impdp来写出DDL 命令。如果是数据,则有CONTENT=,但您必须准确研究它的作用。如果失败,请尝试通过 bashstrings命令运行 dmp 文件,然后通过grep输出。 -
除了其他 cmets 之外,尝试读取
.DBF文件的另一个问题是,最近版本的 Oracle 允许各种压缩算法,因此无法获得任何匹配。此外,如果启用了加密选项,则文件中的数据将...加密。