是否可以有效地从ASP.Net应用程序克隆SQL数据库?

时间:2012-05-03 15:12:21

标签: asp.net sql sql-server-2008 azure-sql-database database-cloning

有很多数据库克隆工具,例如SQL Data Compare。

但是,最终用户(使用ASP.Net Application)希望在内容准备就绪时将登台SQL Server 2008数据库克隆到生产SQL Azure数据库。

我确信我可以使用Entity Framework比较每个表,并插入/更新/删除每一行。有没有更好的方法?

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

为什么不备份数据库并将其恢复?

您可以毫无困难地从Web应用程序运行备份和还原。您应该编写代码来处理存储过程中的备份,而不是尝试在应用程序代码中编写逻辑。类似的东西:

CREATE PROCEDURE dbo.InitiateClone
  @DBName     SYSNAME
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @sql NVARCHAR(MAX);

  SET @sql = N'BACKUP DATABASE ' + QUOTENAME(@DBName)
     + ' TO DISK = ''\\Common_network_path\wherever\' + @DBName + '.BAK''
     + WITH INIT;';

  EXEC sp_executesql @sql;

  SET @sql = N'SELECT name, type_desc FROM sys.
END
GO

现在请求备份的应用程序可以使用数据和日志文件名传递给另一台服务器上的程序:

CREATE PROCEDURE dbo.FinishClone
  @NewDBName    SYSNAME,
  @OldDBName    SYSNAME,
  @DataFileName VARCHAR(255),
  @LogFileName  VARCHAR(255)
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @sql NVARCHAR(MAX);

  SET @sql = N'RESTORE DATABASE ' + QUOTENAME(@NewDBName)
     + ' FROM DISK = ''\\Common_network_path\wherever\' + @OldDBName + '.BAK''
     + ' WITH MOVE ''' + @DataFileName + ''' TO ''D:\datapath\' 
     + @NewDBName + '_data.mdf'','
     + ' MOVE ''' + @LogFileName + ''' TO ''D:\logpath\'
     + @NewDBName + '_log.ldf'';';

  EXEC sp_executesql @sql;
END
GO

您唯一需要担心的是,如果两个用户同时尝试克隆同一个源数据库,那么您可能希望在其中放置某种排队或信号量控制。为简洁起见,我也省略了错误处理(例如,确保新名称尚不存在)。它还假设您有简单的数据库(一个数据文件和一个日志文件)。但这是一个开始。

编辑,因为我们知道目的地是Azure:

使用Azure,我认为您的选择有限。我认为你不能以这种方式执行恢复。您如何在Azure上启动新数据库的创建?完成后,您仍然可以考虑一些用于比较和同步的第三方工具。例如,Red Gate的工具具有命令行界面,这意味着您可以根据Web应用程序的请求调用它们。

答案 1 :(得分:1)

您可以使用Microsoft.SqlServer.Management命名空间中的不同类来管理SQL Server的所有方面。

这包括从一台服务器进行备份并恢复到另一台服务器(包括更改日志文件名称和其他所需的名称)。

从本质上讲,如果你可以在SSMS中进行,你可以使用这些类来做同样的事情。

我过去曾经使用过这种方法,做一些接近你所描述的事情。

答案 2 :(得分:-1)

备份数据库比读取表和记录困难得多。恢复的顺序至关重要,恢复操作的性能方面也是如此,以尽可能避免限制。

您可以编写DACPAC操作的脚本;我不知道该怎么做,但也许有可能。 DACPAC是用于备份和恢复数据库的官方Microsoft解决方案。以下是DACPAC概述的链接;您可以找到一种以编程方式使用此方法的方法:http://msdn.microsoft.com/en-us/library/dd193245.aspx

使用第三方工具,Enzo备份工具将很快提供API,以编程方式备份​​/恢复数据库。 API将允许开发人员在完成针对SQL Azure数据库的数据库备份和还原操作(对SQL Server的有限支持)时启动/停止/发送警报。此时私人请求可以使用API​​;如果您决定试一试,请联系info@bluesyntax.net获取有关API的信息。

[免责声明:我是备份工具的作者]