复制实时 Firebird .fdb 数据库

问题描述 投票:0回答:2

我想制作实时 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. 
firebird
2个回答
6
投票

损坏的风险是由于 Firebird 写入文件的方式造成的。当 Firebird(重新)写入数据页的同时复制时,您的副本可能包含不一致的数据。据我所知,唯一真正的损坏风险是在写入索引页期间(然后仅适用于索引页拆分),否则它只会导致不一致的数据和悬空事务(无论如何都不可见,因为事务不存在)承诺)。

如果实在不想使用备份,可以将Firebird数据库设置为备份状态。这会冻结数据库并将更改写入增量文件。您可以使用

ALTER DATABASE BEGIN BACKUP
启用此状态,并使用
ALTER DATABASE END BACKUP
结束此状态。请参阅
ALTER DATABASE
的文档。该命令是在 Firebird 2.0 中添加的。您将需要“修复”数据库的副本以使其可用。这可以通过
nbackup -fixup
(或
-f
选项

来完成

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

命令

gbak -c
不会创建备份,它 c 从备份中创建数据库(它是
-r o
/
-recreate_database overwrite
-rep
/
-replace_database
的兄弟,但不会覆盖)现有数据库)。请参阅恢复开关了解更多信息。

请参阅创建不带转储文件的数据库克隆,了解如何进行如下备份的示例:

gbak -backup emptest stdout | gbak -replace stdin emptest_2

4
投票

你可以做

alter database begin backup;

然后使用操作系统的标准文件副本复制文件并

alter database end backup;

我还强烈建议阅读这些页面 [1] [2] 关于

nbackup

© www.soinside.com 2019 - 2024. All rights reserved.