【问题标题】:Merge Multiple Databases into a Single Database将多个数据库合并为一个数据库
【发布时间】:2012-09-09 14:12:18
【问题描述】:

所有,我必须创建一个具有基本架构的数据库。该数据库将很大(100GB 以上),并将用作数据仓库。现在,这个数据库的创建目前正在通过 C# 代码“一击”执行;从多个不同来源提取数据。由于数据量巨大,这种创建导致了一些问题。已经决定不要一次性创建一个数据库;到

  1. 创建几个包含核心数据表的小型数据库。
  2. 将较小的数据库合并到一个较大的数据库中。
  3. 构建架构/添加相关约束。

我的问题有两个。

1.合并多个数据库(具有相同的模式/表结构)的最佳方法是什么?

2。有没有更好的方法来创建这个数据仓库(超大数据库)?

感谢您的宝贵时间。

【问题讨论】:

  • 为什么创建一个大数据库会出现问题,为什么创建多个小数据库不会出现同样的问题?
  • 创建“大型”数据库需要六个多小时。构成该数据库的大部分数据来自其他数据库(有时跨网络)。由于数据量很大,我们可能会在创建此数据库的服务器实例上挂起。这就是尝试对程序进行模块化的原因,因此当/如果出现退出时,我们不会以损坏的数据库告终。

标签: sql database sql-server-2008 merge


【解决方案1】:

对于您的第一个问题:您提到了相同的架构和表结构,在这种情况下,它只是将数据从一个 DB 表(即较小的 DB)移动到另一个(即较大的 DB)。为此必须确保

1) 没有重复数据(至少在 PK 字段中)

2) 将数据从一个数据库移动到另一个数据库以供 sql server 参考

Transfer data from one database to another database

【讨论】:

  • 如果PK不是唯一的怎么办?在我的架构中,一个表的 ID 自动递增为 PK,而该字段在另一个表中用作 FK。
【解决方案2】:

SQL-Hub (http://sql-hub.com) 将允许您将具有相同架构的多个数据库合并到一个数据库中。有一个免费许可证可让您从 UI 执行此操作,但如果您想安排该过程自动运行,您可能需要支付许可证费用。但是,如果数据量很大,那么您想要实现的目标可能会有点慢 - 不过您可以尝试一下。

还有一些文章here 着眼于解决此类问题的其他选项。

【讨论】:

    【解决方案3】:

    sola 的回答很好,而且会奏效。这是另一种选择:根本不合并。在您的导入创建的多个基表之上创建一个 union-all 视图。这为您节省了大量的数据移动。这样的视图称为partitioned view

    【讨论】:

    • 我知道分区视图,但是,数据仓库数据库必须是独立的。该数据库必须作为单个数据库实体(可能分布在多个 .ndf 等)提供给客户端。我需要能够自动化数据库创建过程,因此@sola 建议的方法不是我可以使用的方法。感谢您的宝贵时间。
    猜你喜欢
    • 2014-05-15
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多