【问题标题】:Creating centralized DB创建集中式数据库
【发布时间】:2013-07-30 19:09:45
【问题描述】:

我在不同的服务器(B 和 C)中有 2 个同名的数据库(A)。两个数据库具有相同的架构。 (sql server 2008 r2)

任务 1: 将两个数据库复制(传输)到名称为(A_B 和 A_C)的第三台服务器 (D)。

任务 2: 将两个数据库合并为一个数据库 (A_D)。 (不知道怎么处理key)

任务 3:每天我必须从服务器 B 和 C 获取数据并放入集中式服务器 D。

任何帮助将不胜感激。

谢谢。

Ritesh

【问题讨论】:

    标签: ssis ssis-2005 ssis-2012 ssis-2008


    【解决方案1】:

    这里有一些想法:

    任务 1:通过备份和恢复到服务器 D 来传输数据库。

    任务 2: 我认为这将涉及 ETL 过程和在数据库 A_D 中创建新的代理键。将原始来源的密钥保存在数据源 id 列中。我认为MERGE 声明会有所帮助。

    任务 3:利用任务 2 中的逻辑

    任务 2 的更新:

    假设数据库 A 和 B 中的源 Table1 有一个名为 Table1_ID 的键列。在数据库 A_D 中添加列 Table1_SourceIDTable1_Source。使用来自源数据库的密钥填充Table1_SourceID,并使用Table1_Source 指示源数据库。

    使用Table1_ID 作为Table1 的键,对数据库A_D 是唯一的。这将解释源数据库中关键列的冲突。此外,您可以跟踪源数据库的行。

    【讨论】:

    • 对于任务2:您是否可以再解释一下。主要问题是两个 db 都有相同的表和 ids 如何将它们分开。因为相似表中的某些数据可能具有相同的键。
    • 谢谢迈克...我会努力的,让你知道进展如何。
    【解决方案2】:

    任务 1: 创建没有结构的目标数据库。我会在源数据库上使用任务 - > export 函数,并在 SSMS 中使用 create structure 选项。导出后,您将在目的地获得准确的副本。

    任务 2:A_D 的每个表中创建一个新的键列(SurKey)。它必须是在整个表中给出唯一值的值的组合。例如。源表abbreviation + PK column + date.

    为每个表在 SSIS 包中创建两个数据流,它们将从A_BA_C 加载数据。放一个Derived Column 组件,它会添加一个新列——SurKey。

    A_B DataFlow 中将A_B 作为缩写,A_C 在第二个。

    任务 3: 使用您创建的数据流。在 SSMS 中编写作业脚本,将其添加到每日计划中。

    【讨论】:

    • 非常感谢您的回复。
    • 只是一个简单的问题...如果(A_B 和 A_C)中的表结构有点不同..(意味着很少有表有更少或额外的列和不同的数据类型。).. 这种方法工作..??
    • 然后我将创建一个数据流,有两个源,使用代理键添加派生列,然后添加Union All 组件。
    猜你喜欢
    • 1970-01-01
    • 2019-01-08
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    相关资源
    最近更新 更多