复制一个实时的Firebird .fdb数据库

时间:2014-07-29 07:37:54

标签: firebird

我想制作一个实时Firebird .fdb数据库的副本。 我知道简单地复制它可能会导致数据库损坏,我使用gbak命令,因为它能够在数据库运行时执行备份。

所以这将给我一个数据库备份,但我需要恢复它才能使用它。我的数据库接近1GB,需要10分钟才能恢复太长时间。有没有其他方法可以安全地将Firebird实时数据库从一个位置复制到另一个位置?

到目前为止,我已使用以下内容进行备份(有效):

gbak -v -t -user SYSDBA -password "masterkey" 127.0.0.1:"C:/Files/Live/Database.fdb" "C:\Test\Test.fbk"

我还尝试使用以下内容同时备份和恢复:

gbak -c [options] <source database> stdout | gbak -r [options] stdin <target database>

但这仍然给出了错误:

Done with volume #1, "new.gbak"
Press return to reopen that file, or type a new
name followed by return to open a different file. 

2 个答案:

答案 0 :(得分:6)

腐败的风险是由Firebird写入文件的方式造成的。在Firebird(重新)写入数据页的同时复制时,您的副本可能包含不一致的数据。据我所知,腐败的唯一真正风险是在索引页面的写入期间(然后仅用于索引页面拆分),否则它只会导致不一致的数据和悬空交易(无论如何交易都不会显示提交)。

如果您确实不想使用备份,可以将Firebird数据库设置为备份状态。这会冻结数据库并将更改写入增量文件。您可以使用ALTER DATABASE BEGIN BACKUP启用此状态,并使用ALTER DATABASE END BACKUP结束此状态。请参阅ALTER DATABASE的文档。此命令已在Firebird 2.0中添加。

对于问题的第二部分(实际上应该作为一个单独的问题发布):

命令gbak -c不创建备份,它从备份创建数据库(它是-r(替换)的兄弟,但不覆盖现有数据库。请参阅Restore Switches了解更多信息。

有关如何进行备份的示例,请参阅Create a Database Clone Without a Dump File

gbak -backup emptest stdout | gbak -replace stdin emptest_2

答案 1 :(得分:4)

你可以做到

alter database begin backup;

然后使用操作系统的标准文件副本和

复制文件
alter database end backup;

另外,我强烈建议您阅读[1] [2]这些页面nbackup