每小时SQL Server数据库还原

时间:2009-09-28 17:42:56

标签: .net sql sql-server

我运行一个软件平台,正在考虑建立一个演示网站,以便人们可以登录假装网站并编辑数据等......

但是我希望数据库能够'重置'每'x小时/天'有没有办法sql server可以自己做?否则,我将不得不编写应用程序来恢复所有表数据,这将需要大量的工作。

由于

4 个答案:

答案 0 :(得分:5)

是的,您创建了一个“干净”状态的数据库快照,然后每小时从干净快照恢复“脏”数据库。参见:

虽然还存在其他方法(备份/恢复,分离/附加和复制文件等),但基于快照的方法可能是最快的,因为快照在文件系统上是不同的(它们使用Sparse Files)。如果处于“干净”状态的数据库非常小(表中没有数据),但在一小时内它变得更大,那么依赖普通备份/恢复可能更简单或更快。

此外,数据库快照仅在SQL Server企业版中可用,因此,如果您的演示使用较低版本(标准版,Web版,快速版),则必须使用备份/恢复或基于附件/分离和文件副本的解决方案。 / p>

基于附加/分离文件副本的解决方案示例:

  1. 您已保存了干净的数据库,其文件为clean_db.mdfclean_db_log.ldf
  2. 当前脏数据库处于联机状态,其文件为dirty1_db.mdfdirty1_db_log.ldf
  3. 您将clean_db.mdf复制到dirty2_db.mdfclean_db_log.ldf复制到dirty2_db_log.ldf
  4. 您通过运行sp_detach_db '<dbname>';
  5. 来分离数据库
  6. 您附加了新文件:sp_attach_db '<dbname>', 'dirty2_db.mdf', 'dirty2_db_log.ldf';
  7. 您删除旧文件dirty1_db.mdfdirty1_db_log.ldf
  8. 此过程通过在分离/附加操作之前复制干净文件来减少分离和附加之间的停机时间。

答案 1 :(得分:1)

SQL Server代理作业可以执行此操作。在Management Studio中,创建一个新作业,然后粘贴到还原查询中,例如:

RESTORE DATABASE [test] FROM  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\test.bak' WITH  FILE = 1,  NOUNLOAD,  STATS = 10
GO

答案 2 :(得分:0)

答案 3 :(得分:0)

自从我使用SQL服务器已经有一段时间了,但是如果内存服务正确,你可以在SQL 2005/2008(或DTS,如果你仍然在2000)中使用SSIS来删除数据并从中导入每小时或您想要的任何计划将text / csv / xml文件放入数据库。

http://www.codeproject.com/KB/aspnet/Schedule__Run__SSIS__DTS.aspx

这将为您提供设置工作的一步一步。您需要确定在此过程中发生的操作。

这也比编写应用程序容易得多,因为它已经为你编码了。