拆分火鸟数据库文件

Posted

技术标签:

【中文标题】拆分火鸟数据库文件【英文标题】:Splitting firebird database files 【发布时间】:2012-07-12 12:01:15 【问题描述】:

我有一个接近 4GB 文件系统限制大小的 firebird 数据库。 如何将单个数据库文件拆分为多个文件?

【问题讨论】:

【参考方案1】:

对于单个文件数据库,Firebird 数据库可以跨越数 TB。 InterBase 6.0 手册中提到了 4GB 的限制,但该限制仅适用于不支持更大文件的文件系统。据我所知,几乎所有文件系统都支持比这更大的文件(一个值得注意的例外当然是 FAT(32))。另见Firebird Database Limits。

如果您确实需要拆分文件,则需要添加辅助文件。有两种方法可以解决这个问题:

1) 使用ALTER DATABASE 添加附加文件:

ALTER DATABASE ADD FILE '<path-to-file>' LENGTH <number> PAGES 
   STARTING AT PAGE <number>

请注意,指定已创建的STARTING AT PAGE 编号只会在分配下一页时创建文件。所以它不会从指定的页面开始,而是从&lt;current page count&gt; + 1 开始。另请参阅InterBase 6.0 语言参考中的第 22 页(可从http://www.firebirdsql.org/en/reference-manuals/ 获得)或第 238 - 240 页Helen Borrie 的火鸟书

2)(如果需要拆分现有数据库):备份数据库并恢复,同时指定多个文件和每个文件的大小:

gbak -C <backupfile> <file1> <maxsize of file1> 
    <file2> <maxsize of file2> .... <fileN>

对于您未指定大小的最后一个文件,它会增长直到达到文件系统限制(如果有),在这种情况下,您将需要添加额外的辅助文件,如上所述。另请参阅 Interbase 6.0 操作指南 的第 162 页(也可从 http://www.firebirdsql.org/en/reference-manuals/ 获得)或 The Firebird Book 的第 825 - 827 页

但正如我所说:在几乎任何(现代)文件系统上,4 GB 限制都不适用。

【讨论】:

马克,你并不完全正确。文件系统只是其中之一。事实上,Interbase 6 和之前使用的 32-bt 文件 I/O API - 毕竟 Groton DBS 是在计算机很大的时候构想出来的,但是内存稀缺并且 4GB 看起来就像地平线一样可以访问。因此,当 HDD 变大时,在 IB5/6 时间范围内,数据库增长到 4GB,这是一个真正常见的问题——然后 Interbase 出现 in32 溢出并开始在 db 文件头分配新页面,从而破坏数据库。这个错误虽然是最重要的问题之一,但已在 FB 1.5 甚至可能在 FB 1.0 中修复 @Arioch'我认为这里的历史准确性并不重要,我的回答更侧重于它现在的工作方式。 我认为这种历史准确性是产生“共同智慧”的原因,因此即使只是顺便提及也应该提及。许多用户也可以使用 ***,包括那些使用 FB 1.0 甚至 0.9 维护旧系统的用户 - 所以虽然这个问题绝对不会困扰所述 FB 2.1 版本,但提及它仍然很重要。那就是我当时所做的:-)

以上是关于拆分火鸟数据库文件的主要内容,如果未能解决你的问题,请参考以下文章

C# 操作FireBird(火鸟)数据库

C# 操作FireBird(火鸟)数据库

紧凑型火鸟 2.1 数据库

火鸟默认字符集

转换为 ActiveRecord 查询(火鸟数据库)时导致错误的原始 SQL 查询

德尔福火鸟汽车