SQL Server 沙盒

Kit*_*124 9 sql-server-2008 sql-server

我正在尝试为我们的报告开发人员设置一个沙箱以进行他们的工作。我目前的计划是每天晚上“重置”数据库,但我不确定如何去做。我所说的重置是指我想从服务器上的一个数据库之外的所有数据库中删除任何用户表、视图、存储过程等。我想另一种选择是删除并重新创建数据库,但我很确定这也意味着重新授予对所有适当 AD 组/人员的访问权限。

我真的不知道这样做的最佳方法是什么,所以我希望你们中的一些人能够提供一些好的想法/建议。谢谢。

为清楚起见,我们基本上想用我们的数据库来做这个:http : //try.discourse.org/t/this-site-is-a-sandbox-it-is-reset-every-day/57。唯一的区别是我们不想每天都重新创建我们的用户。

版本: SQL Server 2008
版:开发人员和企业

Aar*_*and 8

另一个想法是简单地设置一个夜间作业,执行 copy_only 备份并在开发服务器上恢复它(或者在同一台服务器上,如果你只有一个,但这可能不是一个好主意)。这样做的好处是还原可以转到任何服务器(或多个服务器),并且可以与主数据库上的任何活动完全分离。

在服务器 1 上:

BACKUP DATABASE db TO DISK = '\\someshare\file.bak' 
  WITH COPY_ONLY, INIT, COMPRESSION;
Run Code Online (Sandbox Code Playgroud)

在服务器 2 上:

RESTORE DATABASE db_dev FROM DISK = '\\someshare\file.bak'
  WITH REPLACE, RECOVERY;
Run Code Online (Sandbox Code Playgroud)

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';
Run Code Online (Sandbox Code Playgroud)

如果您在同一台服务器上进行恢复,则用户应该不会有任何问题。如果您恢复到不同的服务器,您的用户将存在,但服务器级登录可能不存在。有一些脚本可以解决这个问题,而 SQL Server 2012(包含的数据库)中的一个新功能完全消除了这个问题。


Jon*_*gel 5

由于您有一个带有企业版引擎的实例,我将使用数据库快照

这将使您能够快速轻松地回滚白天所做的任何更改,而无需恢复整个数据库。

请注意,如果开发人员计划进行大数据加载(听起来他们不是?),那么这可能不合适。

  • @Kittoes 因为在源数据更改时必须维护快照。如果源发生变化,它需要从源中提取现有页面,以便它保持“之前”视图。在源数据更改之前它不会这样做(快照使用除增量外为空的稀疏文件)。这种维护可能会变得非常昂贵。请参阅 [数据库快照的工作原理](http://msdn.microsoft.com/en-us/library/ms187054(v=sql.105).aspx)。 (2认同)