我试图为我们的报表开发人员设置一个沙箱。我目前的计划是每天晚上“重置”数据库,但我不知道该如何做。我所说的重置的意思是,我想从服务器上的所有数据库中删除任何用户表、视图、存储过程等等。我想另一种选择也是删除和重新创建数据库,但我非常肯定这意味着重新授予对所有适当的AD组/人员的访问权。
我真的不知道做这件事最好的方法是什么,所以我希望你们中的一些人能够提供一些好的想法/建议。谢谢。
为了清晰起见,我们基本上希望用我们的数据库:http://try.discourse.org/t/this-site-is-a-sandbox-it-is-reset-every-day/57来完成这个任务。唯一不同的是,我们不想每天重新创建我们的用户。
版本: Server 2008
版本:开发者与企业
发布于 2013-03-22 16:57:35
另一个想法是简单地设置一个夜间工作,执行copy_only备份并在dev服务器(或者同一台服务器上,如果只有一个服务器)上还原它,但这可能不是一个好主意)。这样做的好处是,还原可以转到任何服务器(或多个服务器),并且可以与主数据库上的任何活动完全解耦。
在服务器1上:
BACKUP DATABASE db TO DISK = '\\someshare\file.bak'
WITH COPY_ONLY, INIT, COMPRESSION;在服务器2上:
RESTORE DATABASE db_dev FROM DISK = '\\someshare\file.bak'
WITH REPLACE, RECOVERY;如果服务器之间的磁盘布局不同(或者将副本放在同一台服务器上),则还需要添加MOVE命令。
RESTORE DATABASE db_dev FROM DISK = '\\someshare\file.bak'
WITH REPLACE, RECOVERY,
MOVE 'data_file_name' TO 'D:\somepath\somefile.mdf',
MOVE 'log_file_name' TO 'E:\somepath\somefile.ldf';如果您是在同一台服务器上进行还原,那么您不应该对用户有任何问题。如果您还原到另一个服务器,您的用户将存在,但服务器级别的登录可能不存在。有一些脚本可以解决这个问题,以及Server 2012 (包含数据库)中的一个新特性,它完全消除了这个问题。
发布于 2013-03-22 16:53:00
由于您有一个带有Enterprise引擎的实例,所以我将使用数据库快照。
这将允许您快速、轻松地回滚白天所做的任何更改,而不必还原整个数据库。
请注意,如果开发人员计划进行大数据加载(听起来不像?),那么这可能是不合适的。
发布于 2013-03-22 21:34:14
让我再加几分钱,看看它是否对你有帮助:
在我的公司里,我们遇到的情况是,开发人员每晚都想刷新他们一整天使用的数据库。这意味着我们有一套开发人员不接触的数据库--比如A和另一组数据库,它们都是精确复制的A,但是他们做自己的工作,但希望每天晚上都能得到刷新--让我们说B。这种情况发生在一个服务器实例上。
我实现的是一个夜间恢复过程来实现这一点。以下是它的工作方式:
创建一个包含每天晚上需要恢复的数据库列表的驱动程序表(正如您已经提到的)。
表: nightly_restore (OriginalDB,RestoreDB,Results,enabled_YN,Results,PASS_FAIL)
然后,您可以编写一些TSQL,它将循环遍历上述表中的数据库列表,然后执行还原,并记录结果中的任何成功或失败,以及位1=Pass或0= Fail。Enabled_YN将确定是否需要还原该数据库。
如果将来会添加更多的数据库,那么您只能在表中插入这些数据库,并将enabled_YN位设置为Y(已启用)。
这样,这一过程将更加灵活和易于管理。
如果您想要我编写的SQL (我确信,您将能够编写它:-),只需为我添加一个注释,我就会分享它。
HTH
https://dba.stackexchange.com/questions/37354
复制相似问题