我正在尝试为我们的报表开发人员设置一个沙箱,以便他们在其中工作。我目前的计划是每天晚上“重置”数据库,但我不知道如何去做。重置的意思是,我想从服务器上除一个数据库之外的所有数据库中删除任何用户表、视图、存储过程等。我想另一种选择是删除并重新创建数据库,但我很确定这也意味着重新授予对所有适当的 AD 组/人员的访问权限。
我真的不知道这样做的最佳方法是什么,所以我希望你们中的一些人能够提供一些好的想法/建议。谢谢。
为了清楚起见,我们基本上想用我们的数据库来做到这一点:http: //try.discourse.org/t/this-site-is-a-sandbox-it-is-reset-every-day/57。唯一的区别是我们不想每天都重新创建我们的用户。
版本: SQL Server 2008
版本:开发人员和企业
另一个想法是简单地设置一个夜间作业,执行 copy_only 备份并在开发服务器上恢复它(或者在同一台服务器上,如果你只有一个,但这可能不是一个好主意)。这样做的好处是恢复可以转到任何服务器(或多台服务器),并且可以与主数据库上的任何活动完全分离。
在服务器 1 上:
在服务器 2 上:
MOVE
如果服务器之间的磁盘布局不同(或者如果您将副本放在同一台服务器上),您可能还需要添加命令。如果您在同一台服务器上进行恢复,那么用户应该不会有任何问题。如果您恢复到不同的服务器,您的用户将存在,但服务器级登录可能不存在。有解决这个问题的脚本,以及 SQL Server 2012(包含数据库)中的一个新功能,它完全消除了这个问题。
由于您有一个带有企业版引擎的实例,我会使用数据库快照。
这将允许您快速轻松地回滚白天所做的任何更改,而无需恢复整个数据库。
请注意,如果开发人员计划进行大数据加载(听起来好像不是?),那么这可能不合适。
让我加上我的几分钱,看看它是否对你有帮助:
在我的公司,我们遇到同样的情况,开发人员每天晚上都想刷新他们一整天都在使用的数据库。这意味着我们有一组开发人员不接触的数据库——比如说 A和另一组数据库,它们是精确的副本 A,但他们做他们的事情,但希望每晚都刷新——比如说B。这发生在 1 个单个服务器实例上。
我实施的是一个夜间恢复过程来实现这一点。以下是它的工作原理:
创建一个包含需要每天晚上恢复的数据库列表的驱动程序表(如您所提到的)。
表:nightly_restore(OriginalDB、RestoreDB、backuplocation、enabled_YN、Results、PASS_FAIL)
然后,您可以编写一些 TSQL,它将遍历上表中的数据库列表,然后执行恢复并在结果中记录任何成功或失败,并且位 1 = 通过或 0 = 失败。Enabled_YN 将确定该数据库是否需要恢复。
如果将来要添加更多数据库,那么您只需将它们插入表中并将 enabled_YN 位设置为 Y(启用)。
这样,该过程将更加灵活和易于管理。
如果您想要我编写的 SQL(我相信,您将能够编写它:-)),只需 ping 我或添加评论,我会分享它。
高温高压