我正在尝试恢复存储在Firebird数据库中的BLOB字段,我唯一的信息是BLOB字段的内容是文档。
我尝试使用IBManager右键单击单元格并单击“将BLOB保存到文件”,但保存的文件不可读(就好像它已加密)。我尝试用Microsoft Word,记事本,adobe等打开它,但没有成功。我也尝试用WinRAR打开它(我认为它可能在被存储到数据库之前已被压缩)但仍然没有。
有没有办法找出BLOB文件是否以及如何被压缩,以及如何恢复它?
提前致谢!
更新
我已将firebird数据库转换为SQL,并使用以下代码提取未编码的BLOB文档:
conn.Open();
dr = comm.ExecuteReader();
while (dr.Read())
{
byte[] document_byte = null;
if (dr[1] != System.DBNull.Value)
{
document_byte = (byte[])dr[1];
}
string subPath = "C:\\Documents\\" + dr[0] + "\\";
System.IO.Directory.CreateDirectory(subPath);
if (document_byte != null)
{
System.IO.File.WriteAllBytes(subPath + "Document", document_byte);
}
}
我如何调整代码以解码Base64中的BLOB文件,因为我知道是Base64编码的?
答案 0 :(得分:1)
除非字段使用BLOB过滤器,否则数据将按原样存储到数据库中,即Firebird不会以任何方式更改它。检查字段的定义,如果它有SUB_TYPE 0
(或binary
)则它是“普通”二进制数据,即Firebird不对其应用任何过滤器。即使在该字段使用某些过滤器的情况下,除非过滤器代码中存在错误,否则在读取BLOB的内容时应该返回原始数据。
因此,归结为将文档存储到DB中的程序,它很可能是压缩或加密文件,但Firebird无法帮助您找出使用的算法...一个选项将BLOB的内容保存到文件中,然后尝试* nix file
命令,也许它能够检测使用的文件格式。
我还会检查数据库是否存在损坏,仅用于案例(Firebird的gfix
命令行工具)。