2016-02-22 31 views
0

我们有一个SSIS项目,用于将数据从CSV加载到SQL Server(DB_Stage)上的临时区域。SQL 2014 - 将数据从SQL Server复制到具有相同表结构的SQL Server的SSIS或存储过程

分段的主要目的是准备数据以准备转移到生产数据库(DB_Prod)并在该过程中标记数据或文件的任何错误。

DB_Stage通过从DB_Prod创建表脚本来创建,因此两个数据库中的表结构都是相同的。一旦加载到DB_Stage成功,那么数据需要被移动到DB_Prod。

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

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

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

如果我使用存储过程,我没有找到一个方法来参数化目标数据库。看来我必须硬编码这样......从DB_Stage.dbo.table1

INSERT INTO Prod_DB.dbo.Table1(COL列表) 选择(列列表)。

任何帮助将不胜感激。

+0

最佳方法是使用现有的硬编码第三方工具进行模式/数据比较和同步。 – revoua

+0

你的问题是什么?明确。 – RBarryYoung

+0

我的问题:最好的方法是将数据从SQL复制到具有相同表结构的数据库,并且没有转换,SSIS或TSQL存储过程。我有150个表,数据范围从几百到几百万行。 –

回答

2

正如您所提到的,您没有任何转换可用于dev和prod环境之间。我建议你使用SSIS而不是存储过程。 SSIS将把这视为一项同步任务,并会尽快开始传输记录。 SSIS可以利用您可以控制并实现并行性的缓冲管道。在目的地

    • 避免表锁调整最大:

      我会推荐一些设置,在这种情况下,当使用SSIS来完成。行数& max。行提交大小

    • 如果您打算一次传输多个表的数据,然后设置最大值。线程和缓冲区相应。

    我很肯定你会看到在这里使用SSIS而不是TSQL的性能增益。

  • +0

    Anuj,谢谢你的回复。现在对我来说,通过TSQL使用SSIS更有意义。我将为每个表格提供150个包,数据范围从几百到几百万,所以请建议如何实现并行性或提出一些我可以通过的文章。我是否需要将软件包拆分成组并且并行执行每个组。 –

    +1

    @ MSBI-Geek我建议你在每个序列容器中保留4-6个DFT。现在,根据每个表的大小,可以在每个容器中保留1-2个大表。你可以有6-10个包裹来覆盖所有的150张桌子。我建议您将所有属性值保留为默认值,然后测量所需的时间。然后您可能需要相应地调整DFT的EngineThreads属性。除此之外,如果您的源表包含大量数据,请减少OLEDB目标上的行提交大小,以避免您的RAM获取数据。 –

    +0

    精彩!谢谢 –

    1

    正如您所提到的,有两种方法可以将数据从一台服务器复制到另一台。我们一个接一个地看看他们。

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

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

    在这里你有4000个字符的条件nvarchar的字符串,或VARCHAR字符串的情况下,8000个字符的情况。

    SSIS:
    正如您所提到的,SSIS允许您将数据流从暂存服务器并行到Prod服务器。该方法非常简单,如here所述。但是,如果表格太大,我建议您使用Balanced Data Distributor,这是对并行数据流的优化。

    +0

    嗨Subham,谢谢你的回复。我想过在存储过程中使用动态查询,但是我并不担心每次执行查询时执行的性能。我有150桌子。我会看看BDD,谢谢你提到这个。 –

    +0

    考虑到查询非常简单,我不认为性能影响会很大。此外,动态查询为您提供了表的动态模式的优点,如果这是您的需求。 SSIS包不能固有地处理这种情况。 Upvote如果有帮助:) –

    相关问题