-1

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

但是,最终用户(使用 ASP.Net 应用程序)希望在内容准备好时自己将暂存 SQL Server 2008 数据库克隆到生产 SQL Azure 数据库。

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

感谢您的帮助!

4

3 回答 3

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 应用程序的请求。

于 2012-05-03T15:15:06.137 回答
1

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

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

本质上,如果你可以在SSMS中做到这一点,你可以使用这些类来做同样的事情。

我过去曾用它做一些接近你所描述的事情。

于 2012-05-03T15:17:54.060 回答
-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 的信息。

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

于 2012-05-04T00:16:39.327 回答