在二进制 firebird 数据库文件的末尾附加一些数据是否安全?
Is it safe to append some data at end of the binary firebird database file?
我的主要目的是将一些版本信息添加到 Firebird 数据库文件中,因为我将使用 Firebird 作为嵌入式数据库并且 installers/update 机制将需要此信息。
信息应该独立于平台可用,我更喜欢不需要任何数据库访问的解决方案。
我发现可以简单地在 db 文件的末尾手动附加一些 ascii 数据(见下图)。这将是我的首选解决方案。它似乎有效(我仍然可以读写数据库,甚至可以操作数据库结构)。但也许这只是运气?所以我的问题是:
- 这样做安全吗?
- 您是否建议使用其他方法代替我的解决方案? *
* 当然,将数据库内部的版本信息存储在一个特殊的table中是合理的,我认为。但是一种发布脚本可以读取此信息,将其附加到二进制 db 文件,任何 installer/updater 不需要在数据库中搜索。
你不应该这样做。 Firebird 数据库由页面组成,引擎会跟踪哪些页面已使用和未使用、页面类型等。任意将数据附加到 Firebird 数据库的末尾是一种损坏形式,可能 "break" 数据库,或者 Firebird 可能只是在需要分配更多 space.
时需要扩展数据库时默默地覆盖它
正如 Val Marinov 在他的评论中指出的那样,对数据库进行备份和恢复会删除此版本信息(假设甚至可以创建备份)。
您要么需要将额外数据存储在 Firebird 数据库中的正常 table 中,要么将其与 Firebird 数据库文件本身分开。
我的主要目的是将一些版本信息添加到 Firebird 数据库文件中,因为我将使用 Firebird 作为嵌入式数据库并且 installers/update 机制将需要此信息。
信息应该独立于平台可用,我更喜欢不需要任何数据库访问的解决方案。
我发现可以简单地在 db 文件的末尾手动附加一些 ascii 数据(见下图)。这将是我的首选解决方案。它似乎有效(我仍然可以读写数据库,甚至可以操作数据库结构)。但也许这只是运气?所以我的问题是:
- 这样做安全吗?
- 您是否建议使用其他方法代替我的解决方案? *
* 当然,将数据库内部的版本信息存储在一个特殊的table中是合理的,我认为。但是一种发布脚本可以读取此信息,将其附加到二进制 db 文件,任何 installer/updater 不需要在数据库中搜索。
你不应该这样做。 Firebird 数据库由页面组成,引擎会跟踪哪些页面已使用和未使用、页面类型等。任意将数据附加到 Firebird 数据库的末尾是一种损坏形式,可能 "break" 数据库,或者 Firebird 可能只是在需要分配更多 space.
时需要扩展数据库时默默地覆盖它正如 Val Marinov 在他的评论中指出的那样,对数据库进行备份和恢复会删除此版本信息(假设甚至可以创建备份)。
您要么需要将额外数据存储在 Firebird 数据库中的正常 table 中,要么将其与 Firebird 数据库文件本身分开。