将数据库数据从多个DB复制到一个。数据复制(有点)

时间:2010-01-25 15:26:31

标签: sql-server database copy replication

这涉及数据复制,有点:

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

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

e.g。许多SQL Express DB具有以下表格列

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

大超级桌子需要:

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

以粗体显示的项目是主键

是否有微软(或我认为非MS)应用程序/工具/事物经理复制所有这些数据,或者我们是否需要编写自己的数据?

非常感谢。

3 个答案:

答案 0 :(得分:1)

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

就个人而言,我会首先调查Integration Services。

祝你好运。

答案 1 :(得分:1)

您可以使用SSIS(SQL Server附带)进行填充,可以使用变量设置将连接字符串更改为各种数据库。我有一个循环遍历整个列表并使用来自三个不同供应商的三个不同文件执行相同的过程。你可以这么简单地循环遍历不同的站点数据库。将要复制审计数据的整个数据库列表放在表中,然后循环遍历每次更改连接字符串。

但是,为什么你希望每个站点有一个超级审计表呢?如果数据库中的每个表都在更改发生时填充审计表,那么审计表最终将成为性能的一个巨大问题。每次插入,更新和删除都必须点击此表,然后您建议在其上添加导出。在我看来,这是一个有保障的锁定和死锁结构以及各种各样的肮脏。帮自己一个忙,并将每个审计表限制在它正在审计的表中。

答案 2 :(得分:1)

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

但是,截至目前,您需要实现自定义IDataLoaderFilter扩展点(在Java中)以添加额外列。因为您的SiteName将是external_id,所以元数据可用。