数据库保存,恢复和复制

时间:2009-08-16 10:38:10

标签: sql-server database

应用程序运行培训课程。每个会话的环境(如游戏中的“任务”或“级别”)存储在数据库中。

  • 在开始会话之前,用户可以选择使用多个可用数据库中的哪一个。
  • 会话期间可能会修改数据库。
  • 会话更改后,数据库通常会被丢弃,但有时可能会以新名称或同名保存。
  • 数据库通常在未连接的计算机(闪存卡)之间复制。

如果环境存储在普通文件中,那将很容易:复制,加载,保存。 我们目前使用类似的方法:将数据库存储为MS SQL备份,将它们复制并保存为文件,并在会话启动时加载到实际的DBMS中。主要问题是修改:当数据库架构发生变化时,必须更新所有备份,这很容易出错。

将所有内容存储在具有其他“环境ID”关系的单个数据库中,并提供加载,保存和复制环境的实用程序,对于该任务而言似乎过于复杂。

为该功能设计的其他可能方法有哪些?这个问题可能不是唯一的,必须有一些解决方案。

2 个答案:

答案 0 :(得分:1)

首先,我认为您需要省略SQL备份的想法并转移到记录数据更改的表。 然后你有一个包含所有常规表的源数据库,以及另一个记录已保存版本列表的表。

因此表X可能包含TestID,TestDesc,TestDesc2等列 然后你可能有一个包含SavedDBID,SavedDBTitle等的表

接下来,对于每个表X,您有一个表X_Changes。它与表X具有相同的列,但还包括SavedDBID列。这将用于记录源数据库和给定SavedDBID的已保存行之间的任何更改行。

当用户登录时,您将创建源数据库的克隆。然后使用Changes表使克隆表反映保存的版本。当用户更新克隆中的主表时,还应在克隆的更改表中更新更改的行。 如果用户决定保存其副本,请使用克隆的更改表记录原始数据库中的源和克隆之间的差异,然后丢弃克隆。

我希望这是可以理解的。它肯定会使任何架构更改更容易立即反映在“备份”中,因为您只需要更改一个数据库架构。我认为这比使用SQL备份要简单得多。 至于使用闪存卡复制数据库,你可以给他们一份源数据库的副本,但只包括他们想要的会话的信息。

答案 1 :(得分:-1)

作为一种可能的解决方案 - 虚拟化您的SQL服务器。如果需要,您可以拥有多个SQL服务器,并且可以单独克隆和回滚它们。