繁体   English   中英

SQL 2014-SSIS或存储过程可将数据从SQL Server复制到具有相同表结构的SQL Server

[英]SQL 2014 - SSIS or Stored procedures to copy data from SQL Server to SQL Server with same table structure

我们有一个SSIS项目,用于将数据从CSV加载到SQL Server的登台区域(DB_Stage)。

暂存的主要目的是准备准备移至生产数据库(DB_Prod)的数据,并在过程中标记数据或文件中的任何错误。

通过从DB_Prod获取创建表脚本来创建DB_Stage,因此两个数据库中的表结构是相同的。 一旦成功加载到DB_Stage,则需要将数据移至DB_Prod。

我正在考虑为DB_Stage中的每个表创建一个存储过程,以将数据推送到DB_Prod,因为不需要进行转换,并且还认为从SQL到SQL的速度更快。 但是,我读了一些文章,说SSIS具有并行处理的能力,并且加载速度会快得多。 但是我不完全理解。

我可以创建另一组SSIS包,以立即使用Biml将数据从舞台转移到产品。 但是我需要一些建议,哪种才是最好的方法。 在我的方案中存储过程或SSIS包。

如果我使用SSIS包,则一个优点是可以配置目标数据库,因此可以将Stage数据加载到任何服务器/数据库中(这是我们的要求)。

如果使用存储过程,则找不到找到目标数据库参数的方法。 看来我必须这样硬编码...

插入Prod_DB.dbo.Table1(列列表),从DB_Stage.dbo.table1中选择(列列表)。

任何帮助将不胜感激。

如前所述,在开发环境和生产环境之间没有任何转换可使用。 我建议您使用SSIS而不是存储过程。 SSIS会将其视为同步任务,并将尽快开始传输记录。 SSIS可以利用缓冲管线来控制和实现并行性。

在这种情况下,我建议在使用SSIS时要进行的设置很少:

  • 避免在目标上锁定表
  • 调整最大 行数和最大 行提交大小
  • 如果您打算一次传输多个表的数据,请设置最大值。 线程和相应的缓冲区。

我很确定您将在这里使用SSIS而不是TSQL看到性能提高。

如前所述,有两种方法可以将数据从一台服务器复制到另一台服务器。 让我们一一介绍。

存储过程:您必须首先使用sp_addlinkedserver在Prod服务器和登台服务器之间创建链接服务器连接。 这将允许您使用4部分命名来引用登台服务器中的表,例如[ProdServer]。[ProdDB]。[dbo]。[Table1]。在这里,您可以利用所谓的“ 动态查询 ”。 在这种特殊的查询中,我们可以将SQL查询的某些值指定为varchar变量,然后执行查询。
您将要编写的基本上是一个查询,如下所示:

'INSERT INTO [' + @ProdServer + '].[' + @ProdDB +'].[dbo].[Table1] (col list)
SELECT (col list) FROM [DB_Stage].[dbo].[table1]'

在这里,对于nvarchar字符串,条件为4,000个字符,对于varchar字符串,条件为8,000个字符。

SSIS:
如前所述,SSIS允许您并行化从登台服务器到Prod Server的数据流。 该方法是相当简单的解释在这里 但是,如果表太大,建议您使用Balanced Data Distributor ,这是对并行数据流的优化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM