firebird - 复制实时 Firebird .fdb 数据库

标签 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. 

最佳答案

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

如果你真的不想使用备份,你可以将 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

关于firebird - 复制实时 Firebird .fdb 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25010341/

相关文章:

sql - 如何将数字格式化为带有千位分隔符的varchar?像oracle to_char()

mysql - 如何使用 Microsoft Access 将旧数据库迁移到新数据库

node.js - 未定义 Firebird 字符集 UTF8

sql - Firebird 外部表

database - 简单的多用户数据库解决方案

asp.net-mvc - EntityFramework SaveChanges() 抛出并发事务错误

c# - 事务中的 Firebird DDL + DML 语句

Firebird:iSQL 中的查询执行时间

database - Firebird 1.5.3 : How to add FK with connected users to the DB?

delphi - 如何在同一台计算机上部署两个或多个使用 Firebird 嵌入式数据库的应用程序?