【问题标题】:Consolidate SQL Server databases into 1将 SQL Server 数据库整合为 1
【发布时间】:2011-10-04 09:53:19
【问题描述】:

我需要将 20 个具有相同结构的数据库合并为 1 个数据库。我看到了这个帖子: Consolidate data from many different databases into one with minimum latency

我没看懂,所以我这样问:有一些表有主键但没有sourceID,例如:

数据库 1

AgencyID    Name 
1           Apple
2           Microsoft

数据库 2

AgencyID   Name
1          HP
2          Microsoft

这两张表显然不能这样合并,需要额外的列:

数据库 1

Source     AgencyID    Name 
DB1        1           Apple
DB1        2           Microsoft

数据库 2

Source     AgencyID   Name
DB2        1          HP
DB2        2          Microsoft

如果这是正确的做法,这两个表是否可以像这样合并到一个数据库中:

Source     AgencyID    Name 
DB1        1           Apple
DB1        2           Microsoft
DB2        1           HP
DB2        2           Microsoft

...是否可以通过事务复制来做到这一点?

提前感谢您的回答,如果我能得到正确的答案,那将非常有帮助。

伊利亚

【问题讨论】:

  • 这是一次性合并过程吗?
  • 是的,我想将数据库合并为一个
  • @ile - 他在问这是一次性的过程还是会定期重复?
  • 它会定期重复
  • 您想要完成什么(应用程序整合、报告、仓储)?这个过程结束后,这20个数据库还会被使用吗?另外,这些数据库的大概大小以及每个数据库的表数是多少?

标签: sql-server database merge consolidation


【解决方案1】:

如果我理解正确,您可以这样做

创建 DTS/SSIS 包。 这是basic SSIS tutorial

直接像运行 SQL

 INSERT INTO [TargetDatabase].dbo.[MergedAgency]([Source], [AgencyID], [Name])
 SELECT CAST('DB1' AS nvarchar(16)), [AgencyID], [Name]
 FROM [SourceDatabase1].dbo.[Agency]

 INSERT INTO [TargetDatabase].dbo.[MergedAgency]([Source], [AgencyID], [Name])
 SELECT CAST('DB2' AS nvarchar(16)), [AgencyID], [Name]
 FROM [SourceDatabase2].dbo.[Agency]

然后通过一个重复出现的SQL Server Job 调用一个Job Step 和一个Schedule

不要忘记考虑如何检测已复制到目标数据库的行。

【讨论】:

  • 这对于大型数据库来说似乎非常复杂......我实际上设法使用事务复制来做到这一点(在一个小而简单的数据库上)。第一次的问题是我没有将“如果名称正在使用中的操作”标志设置为“保持现有对象不变”。默认为“删除现有对象并创建一个新对象”。
  • @ile(一如既往)视情况而定。如果您想完全控制合并过程,您可以在 SSIS 中对其进行编码。但是,如果事务复制现在甚至可以应对架构更改,并且您有很多表要整合,我可以看到它的优势。
【解决方案2】:

我解决了这个问题。现在我正在使用事务复制。在“Publication Properties > Article Properties”中,我必须将“Action if name is in use”标志设置为“保持现有对象不变”。默认为“删除现有对象并创建一个新对象”。 在 SQL 2008 中,即使我更改表方案,这些更改也会应用于整合数据库。

【讨论】:

  • 看起来 SQL Server 的事务复制在 2008 年比在 SQL Server 2000 中变得更加灵活。从长远来看,很高兴听到它对您的作用。
  • 它还没有在生产中,但如果我遇到新问题我会通知你
【解决方案3】:

SQL-Hub (http://sql-hub.com) 将允许您将具有相同架构的多个数据库合并到一个数据库中。有一个免费许可证可让您从 UI 执行此操作,但如果您想安排该过程自动运行,您可能需要支付许可证费用。它比复制更容易使用 - 虽然效率不高。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    相关资源
    最近更新 更多