2011-11-17 108 views
2

我正在开发一个用于在SQL Server之间复制数据的Web应用程序。该工具将允许您指定要从哪个服务器进行复制,然后将特定数据库(始终具有相同名称)从源服务器复制到目标服务器。在SQL服务器之间复制数据库

这样做的最佳方法是什么?数据可能相当大,因此速度也需要考虑。


我的尝试是尝试运行使用SQL Server Management Studio创建的SSIS包。该软件包存储在本地。

该计划是修改源和目标连接字符串并启动包。

这是我这样做代码:

public void DataTransfer(String sourceConnection, String destConnection, String pkgLocation) 
{ 
     Package pkg; 
     Application app; 
     DTSExecResult pkgResults; 

     try 
     { 
      app = new Application(); 
      pkg = app.LoadPackage(pkgLocation, null); 

      foreach (ConnectionManager connectionManager in pkg.Connections) 
      { 
       SqlConnectionStringBuilder builder; 
       switch (connectionManager.Name) 
       { 
        case "SourceConnection": 
         builder = new SqlConnectionStringBuilder(sourceConnection); 
         builder.Remove("Initial Catalog"); 
         builder.Add("Initial Catalog", "StagingArea"); 
         var sourceCon = builder.ConnectionString + ";Provider=SQLNCLI;Auto Translate=false;"; 
         //Added spaces to retain password!!! 
         sourceCon = sourceCon.Replace(";", "; "); 
         connectionManager.ConnectionString = sourceCon; 
         Debug.WriteLine(connectionManager.ConnectionString.ToString()); 
         break; 
        case "DestinationConnection": 
         builder = new SqlConnectionStringBuilder(destConnection); 
         builder.Remove("Initial Catalog"); 
         builder.Add("Initial Catalog", "StagingArea"); 
         var destCon = builder.ConnectionString + ";Provider=SQLNCLI;Auto Translate=false;"; 
         //Added spaces to retain password!!! 
         destCon = destCon.Replace(";", "; "); 
         connectionManager.ConnectionString = destCon; 
         Debug.WriteLine(connectionManager.ConnectionString.ToString()); 
         break; 
       } 
      } 
      pkgResults = pkg.Execute(); 
     } 
     catch (Exception e) 
     { 

      throw; 
     } 

     Debug.WriteLine(pkgResults.ToString()); 
} 

pkg执行我得到以下异常:

A first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in Microsoft.SqlServer.ManagedDTS.dll 
A first chance exception of type 'Microsoft.SqlServer.Dts.Runtime.DtsComponentException' occurred in Microsoft.SqlServer.ManagedDTS.dll 

我真的不知道从哪里何去何从,任何想法?

+3

到目前为止您尝试了什么?你遇到了什么问题?你有没有考虑过像SSIS这样的预先存在的选项? –

+0

看看http://www.sqlservercentral.com/articles/Database+Mirroring/66357/ –

+0

我想尽可能使用SSIS。我猜服务器需要安装Integration Services?我已经看过SSIS和bcp实用程序到目前为止... –

回答

1

我会编写一个SSIS包来完成数据复制/转换,网站只需配置连接字符串并启动包。

+0

这可以使用一个SSIS包吗?我只需要更改连接字符串,或者包本身需要修改? –

+0

是的,你可以为此写一个包。您的网络应用程序可以简单地在外部配置连接字符串。因此,使您的软件包从数据库或文件读取其连接,并且Web应用程序只需写入配置源 – Sheff

+0

使用SQL Management Studio创建的SSIS软件包可以实现同样的功能吗?我上次保存了一次导出,如果将它包含在我的解决方案中,我可以修改连接字符串并运行它吗? –

相关问题