【问题标题】:Local vs. network database - maintenace本地与网络数据库 - 维护
【发布时间】:2010-12-15 12:13:40
【问题描述】:

到目前为止,我一直在使用本地数据库 SQLite,而我的 Winforms 应用程序自行管理所有维护:

  • 安装并首次运行后,应用程序会创建数据库文件
  • 每次启动后,应用都会检查数据库的完整性,并自动将数据库定期备份到临时目录中
  • 当应用升级到较新版本时,应用本身会检查数据库版本并在再次启动后进行升级(即添加新列等)。
  • 该应用还可以备份数据库或从备份中恢复它
  • 很简单,一个用户一个数据库

现在,如果我想开始使用具有更多用户的标准数据库服务器而不是本地数据库,那么谁负责所有这些维护任务?例如,如果一个用户正在运行客户端应用程序,则另一个用户无法从他的备份中恢复数据库。有什么我应该遵守的一般规则吗?

谢谢, 彼得

【问题讨论】:

    标签: database maintenance


    【解决方案1】:

    如果有多个用户连接到数据库(可能使用不同版本的应用程序),当架构更改时,您将让管理员“升级”数据库。备份和恢复也将成为中心。您的应用程序中没有任何可能妨碍其他用户访问数据库的功能 - 全部集中在数据库服务器上。

    【讨论】:

    • 谢谢,这一切都说得通。我是制作一些将在服务器上运行并进行维护的特殊应用程序,还是只是告诉用户使用数据库服务器中内置的工具?就我而言,我将使用 Firbird。
    • @user20353:这取决于任务的复杂性。如果他们只是“在升级到新版本时将这些字段添加到数据库中”,您通常只需分发修改命令。如果它更复杂,您可以构建一个服务器端管理程序(或将管理功能构建到客户端的特殊模式中)。
    【解决方案2】:

    您描述的多用户场景通常由真正的客户端-服务器数据库引擎处理,该引擎作为服务器上的进程运行并通过消息传递协议与客户端通信;消息告诉服务器它应该做什么并且服务器进程完成任务;但客户端无法直接控制服务器上的操作,也无法直接访问驻留在数据库服务器分配的磁盘空间上的数据。这样的引擎不仅提供强大的并发性,还提供维护实用程序,以优雅地关闭数据库,就像可以在车库中举起汽车以便机械师可以进入下面一样。您不想要司机或乘客,也不想要处于这种情况下的用户。 SQLite 不是这样的数据库引擎:客户端能够通过 O/S 机制直接在磁盘驱动器上的数据上加锁。 SQLite 做得非常好。但它并没有做你想做的事。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      • 1970-01-01
      相关资源
      最近更新 更多