【问题标题】:Copy Database Data from Many DBs to One. Data Replication (sort of)将数据库数据从多个 DB 复制到一个。数据复制(某种)
【发布时间】:2010-01-25 15:26:31
【问题描述】:

这涉及数据复制,有点:

我们有许多安装了 SQL Express 的站点,每个站点上都有一个“审计”数据库,其中有一个第一范式的表(让生活变得简单:)

现在我需要从每个站点获取此表,并复制内容(例如,日期时间值 > 200 年 1 月 1 日 00:00,但这显然会改变)并将其复制到一个大的“超级sql server 中的 table',它还具有作为站点名称的主键(需要注入)和 SQL Express 表中的当前主键)

例如许多具有下表列的 SQL Express 数据库

ID、定义名称、定义类型、日期时间、成功、NvarChar1、NvarChar2 等等等

而大超级表需要有:

站点名称、ID、定义名称、定义类型、日期时间、成功、NvarChar1、NvarChar2 等等等

粗体项是主键

是否有一个微软(或者我想是非微软)应用程序/工具/东西来复制所有这些数据,还是我们需要自己编写?

非常感谢。

【问题讨论】:

    标签: sql-server database copy replication


    【解决方案1】:

    您可以使用 SSIS(SQL Server 附带)来填充,它可以设置变量来更改与各种数据库的连接字符串。我有一个循环遍历整个列表,并使用来自三个不同供应商的三个不同文件执行相同的过程。您可以通过类似的方式循环访问不同的站点数据库。将要从中复制审计数据的整个数据库列表放在一个表中,并在每次更改连接字符串时循环访问它。

    但是,您到底为什么要每个站点一个大型审计表?如果数据库中的每个表都在更改发生时填充审计表,那么审计表最终会成为性能的一个巨大问题。每个插入、更新和删除都必须命中该表,然后您建议在此之上添加一个导出。在我看来,这似乎是锁定和死锁以及各种肮脏的保证结构。帮自己一个忙,将每个审计表限制为它正在审计的表。

    【讨论】:

    • 感谢您将我指向 SSIS,我将对此进行调查。 “审计”表与其说是对数据库发生的情况的审计,不如说是对系统上发生的情况的审计。例如用户 XYZ 保存了配置页面 ABC。用户 ASD 删除了配置项 Y。用户 B 已登录。等等。大型审计表将是所有站点的所有较小审计表的副本,以便人们可以及时对其进行报告(您看到的网络速度很慢!)再次感谢。真的没有那么大
    【解决方案2】:

    需要考虑的事项: 链接服务器和 sp_msforeachdb 作为自己动手解决方案的一部分。 SQL Server Replication (by Microsoft) (我相信它可以从 SQL Server Express 中提取数据) SQL Server Integration Services,它可以从 SQL Server Express 实例中提取数据。

    就我个人而言,我会先调查集成服务。

    祝你好运。

    【讨论】:

    • 谢谢,我会看看每一个,然后返回我选择的解决方案。
    • 使用 SSIS 非常好用,谢谢。你可以有一个数据源并有一个派生列,它可以让你添加几乎任何东西。太棒了,它可以循环连接各种事物。
    【解决方案3】:

    您可以使用SymmetricDS 执行此操作。 SymmetricDS 是开源的、支持网络的、独立于数据库的、数据同步/复制软件。它使用 Web 和数据库技术在关系数据库之间近乎实时地复制表。该软件旨在针对大量数据库进行扩展、跨低带宽连接工作并承受网络中断时间。

    然而,到目前为止,您需要实现一个自定义 IDataLoaderFilter 扩展点(在 Java 中)来添加额外的列。元数据将可用,因为您的 SiteName 将是 external_id。

    【讨论】:

    • 开源对我们的客户来说有点不可行,SSIS 可以满足我开箱即用的需求(需要一些学习),但是感谢您的提醒,因为我使用的是操作系统尽可能用于所有其他项目的东西:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    相关资源
    最近更新 更多