Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 数据库保存、恢复和复制_Sql Server_Database - Fatal编程技术网

Sql server 数据库保存、恢复和复制

Sql server 数据库保存、恢复和复制,sql-server,database,Sql Server,Database,应用程序运行培训课程。每个会话(如游戏中的任务或关卡)的环境都存储在数据库中 在启动会话之前,用户可以从许多可用数据库中选择要使用的数据库。 在会话期间,可以修改数据库。 会话后,更改的数据库通常会被丢弃,但有时可能会以新的或相同的名称保存。 数据库通常在未连接的计算机之间通过闪存卡进行复制。 若环境存储在普通文件中,那个么它将很容易:复制、加载和保存。 我们目前使用类似的方法:将数据库存储为MS SQL备份,复制并保存为文件,并在会话启动时加载到实际的DBMS中。主要问题是修改:当数据库模式更

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

在启动会话之前,用户可以从许多可用数据库中选择要使用的数据库。 在会话期间,可以修改数据库。 会话后,更改的数据库通常会被丢弃,但有时可能会以新的或相同的名称保存。 数据库通常在未连接的计算机之间通过闪存卡进行复制。 若环境存储在普通文件中,那个么它将很容易:复制、加载和保存。 我们目前使用类似的方法:将数据库存储为MS SQL备份,复制并保存为文件,并在会话启动时加载到实际的DBMS中。主要问题是修改:当数据库模式更改时,必须更新所有备份,这很容易出错

使用附加的环境id关系将所有内容存储在单个数据库中,并提供用于加载、保存和复制环境的实用程序,对于这项任务来说似乎太复杂了


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

首先,我认为您需要放弃SQL备份的想法,转而使用记录数据更改的表。 然后,您有一个包含所有常规表的源数据库,以及另一个记录其保存版本列表的表

所以表X可能包含TestID、TestDesc、TestDesc2等列 然后您可能有一个包含SavedDBID、SavedDBTitle等的表

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

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

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

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

为什么更新备份容易出错?也许应该集中精力解决这个问题,而不是重新设计整个流程—许多脱机计算机上的许多单个文件—人为错误。考虑到任何计算机上的任何用户都可以编辑和保存自己的数据库,设计一个健壮的自动更新程序似乎太难了。为什么需要多个数据库?为什么不使用具有附加模式的单个数据库?您所说的具有附加模式的数据库是什么意思?我曾考虑将所有环境存储在一个数据库中,但找不到在计算机之间传输单个环境的优雅解决方案。最明显的解决方案是使用EnvironmentId关系,需要拷贝保存实用程序了解模式,处理不同PC上的冲突,很快就变得不必要了我希望这会使复杂化此设置中更改表的目的到底是什么?您已经为会话克隆了数据库,因此您可以在节省时间时找到所有更改,或者简单地用克隆覆盖源。克隆或更改都是有意义的,两者都是多余的。我又读了一遍,可能有误解。不同的数据库或环境不是版本,而是独立的。想象一下有100个关卡或地图的游戏:你可以在玩之前选择一个关卡,你可以编辑并保存它,你可以将新地图发送给某人。您回答的问题是回滚或保存其中一个地图的更改-这完全不是问题。我问的是关于存储、加载和分发这100个关卡的问题。我想我的解释不清楚。我的方法可以很好地用于一个源数据库和许多衍生工具,尽管需要大量的前期工作。如果您有多个具有不相关架构的源数据库,那么每个源数据库都应该遵循这种源/动态克隆模式。是架构更改导致了问题。对于levels或任何其他文件,对一个副本结构的更改不会自动传播到它的派生文件中。描述很清楚,推理却不清楚。更改表格的目的是什么?您可以将ID列添加到实际的表中,正如前面提到的环境ID关系。你是否建议使用原始表格作为亲属
代理视图的定义?为什么不定义实际视图呢?但考虑到工作集视图在克隆中,它会是什么视图呢?导入导出的解决方案给他们一份副本。。。仅包括这一点就不言而喻了。我甚至不想开始描述它在现实世界的实现中有多么复杂和明显的错误。与在一台服务器上有多个数据库相比,它有什么优势?例如,回滚任何更改更容易、更灵活,而不仅仅限于数据库中的更改,例如,他们可能决定安装SQL修补程序,或者在数据库中遇到损坏。恢复到snapshop比尝试恢复数据库容易得多,卸载补丁etcI不认为这与问题有关。为什么???当用户希望发现环境处于清洁状态时,您就可以启动会话。然后用户对环境进行一些更改。然后我们通常希望-根据作者的说法,放弃所有更改,这就是恢复到快照的目的。如果要保留这些更改,则可以克隆此VM,或者如果是全局更改,则提交更改并更新snapshop。作者询问了其他做他已经在做的事情的方法,我建议虚拟化。有什么问题吗???只是想澄清一下-我们业务的一部分运行培训课程,他们一直在用虚拟机做这些把戏。节省时间。