我们在C#中使用.NET FW 4.0开发了一个文本处理应用程序,其中管理员可以定义各种设置。所有这些“设置”数据都存放在大约50张使用外键关系和主键身份的表格中(我认为这会让人感到棘手)。整个数据库不超过10万条记录,平均表约有6个短列。该系统基于MS SQL 2008 R2 Express数据库。创建应用程序数据的快照 - 最佳实践
我们需要创建所有这些数据的快照,以便系统管理员可以在任何时候回滚到其中一个快照。我们只需要保留最后5张快照。创建快照必须从应用程序GUI开始,因此必须根据需要回滚到任何快照(由于直接访问数据库被拒绝,因此不允许使用SSMS)。系统仍在开发中(我们是否真的完成了?),这意味着新的表格和列会多次添加。因此,我们需要一个可以自动处理更改的强大方法(在插入/更改列之后挖掘代码是我们想要避免的情况,除非没有其他方法)。最好的方法是告诉“我想创建名称以'Admin'开头的所有表的快照”。很显然,这是一项数据库密集型任务,但由于它只用于紧急情况,这是我不介意的。我也不介意是否发生表锁,因为在创建或回滚快照时,没有人会尝试使用这些表。
问题可分为两个部分:
- 创建快照
- 回滚到快照
关于问题#1。我们可以有两种选择:
- 的数据导出到XML(文件或数据库列)
- 复制SQL里面的数据到相同或不同的表(如使用相同的名称重新创建相同的表结构原始表以“备份”为前缀)。
关于问题#2。我看到的最大问题是如何将所有数据重新导入到使用IDENTITY列进行PK生成的外键相关表中。我需要从所有受影响的表中删除所有数据,然后重新导入所有内容,同时暂时放宽FK限制并关闭身份生成。一旦数据加载,我应该检查FK约束是否仍然可以。
或者我应该找到一个加载表的逻辑方法,以便在加载时可以保持约束检查(因为我们没有难以管理的表的数量,这可能是一个可行的解决方案)。当然,我需要在一次交易中完成所有删除和重新加载,原因很明显。
我怀疑可能没有纯粹的基于SQL的解决方案,尽管SQL CLR可能有助于避免将数据移出SQL Server。
有没有人有我们面临的同样的问题?也许有人成功解决了这个问题?
我不期望一步一步的指示。从哪里开始,获取哪些路线(导出为RAW XML或在数据库中保存快照,或者两者兼而有之),优点/缺点的任何帮助都将非常有帮助。
谢谢你的帮助和你的时间。
Daniel
这是一个伟大的想法,类似于我正在寻找的。谢谢。 – Daniel
永远是快乐 – 2011-12-12 14:16:05