首页 文章

如何备份Firebird数据库?

提问于
浏览
4

我正在使用通过网络共享的Firebird数据库开发我的第一个WinForms应用程序 . 现在我想知道如何确保数据库备份和恢复?

到目前为止,我的应用程序使用嵌入式数据库(SQLite),所以我确信只有我的应用程序访问了数据库 . 应用程序本身负责备份和还原 . 我可以简单地复制数据库文件,就是这样 .

备份是:

  • 每个应用程序启动时自动执行

  • 每周自动

  • 由用户手动

当用户想要从备份恢复时,他可以随时执行此操作,并且可以从任何类型的备份中进行选择 . 全部直接来自我的申请 .

对于新的应用程序,我已经从SQLite迁移到Firebird . 我选择了Firebird,因为默认情况下应用程序将使用embeded数据库运行,但也可以与经典服务器一起使用 . 使用Firebird,我可以使用嵌入式服务器和具有相同数据库文件的服务器 .

问题是当数据库在服务器上运行时,可能有许多用户同时使用数据库,所以我不知道如何进行备份和恢复 . 我应该省略我的应用程序中的备份/还原功能,让管理员在服务器上进行备份吗?或者我的应用程序应该包括备份和还原?

共享数据库对我来说简直太新了,所以我不知道最佳实践 . 无论如何,数据库将非常小,并且只有几个用户同时工作 .

谢谢,彼得

4 回答

  • 2

    不要复制数据库文件,否则会破坏数据库 .
    Firebird是一个关系数据库服务器 . gbak是运行热备份的官方应用程序 .
    看看这个:http://firebirdfaq.org/cat5/

  • 0

    在共享服务器上,您有多个备份选项:

    • 使用支持Microsoft卷影复制的文件备份工具 . 这将拍摄数据库的快照 . Firebird旨在“幸存”这样的备份 . 但是,恢复这样的备份就像断电一样,但另一方面,如果您需要指示IT部门如何进行并进行监控,这是一个严肃的选择 .

    • 使用gbak.exe将数据库在使用时复制到备份文件中 . 然后,备份它 . 这是推荐的方法,但为了使其正常工作,您需要检查gbak.exe的退出代码以检查是否没有发生错误 . 并非所有IT部门都能够做到这一点 .

    但是,在共享服务器上,您必须始终是偏执狂:大型组织中的大多数备份都无法恢复,通常问题是人类会犯错误 . 因此,我可以推荐第三个选项,它基本上是前两个的组合:

    • 使用gbak.exe将数据库副本复制到备份文件中 . 如果可能,请对gbak的退出代码进行监视 .

    • 使用启用Microsoft卷影复制的备份程序备份主数据库和备份文件 .

    这应该为您提供一个很好的备份文件来恢复,如果gbak失败并且没有人注意到,您可以回退到正在运行的数据库文件的原始快照 . 有几个人必须犯这样的错误才能失败 .

  • 0

    如果您使用的是共享数据库,那么您应该从应用程序中取出备份/恢复过程,否则一个用户可能会损坏或消除其他用户的工作 .

  • 4

    您可以在C#中使用nbackup,如下所示:

    const String Usuario = "SYSDBA";
         const String Contrasena = "masterkey";
         String argumentos = String.Format(@"/C nbackup -U {0} -P {1} -B {2} BD.FDB"
            , Usuario, Contrasena, (Int32) nivelRespaldo);
         Process process = new Process();
         process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
         process.StartInfo.FileName = "cmd.exe";
         process.StartInfo.Arguments = argumentos;
         process.Start();
         process.Close();
    

    如果您想在进行备份时阻止数据库

    String argumentos = String.Format(@"/C nbackup -U {0} -P {1} -L {2}"
            , NombreArchivoRespaldo.Usuario, NombreArchivoRespaldo.Contrasena, Glo.NombreBaseDatos);
    

    别忘了解锁

    String argumentos = String.Format(@"/C nbackup -U {0} -P {1} -N {2}"
            , NombreArchivoRespaldo.Usuario, NombreArchivoRespaldo.Contrasena, Glo.NombreBaseDatos);
    

    如果要关闭所有连接,请尝试:

    FbConnection.ClearAllPools();

相关问题