【问题标题】:Moving data between similar databases在相似数据库之间移动数据
【发布时间】:2023-04-07 06:26:01
【问题描述】:

我有 2 个结构几乎相同的 SQL Server 数据库。我必须定期移动数据,并且只能将数据从一个移动到另一个。找到的解决方案主要涉及重新创建数据库,我只想移动稍微修改过的数据。受影响的表需要可配置,并且两个数据库位于不同的机器上。

所以:每分钟左右获取一次数据,将其插入到另一个具有非常轻微的预定义更改的数据中,然后删除原始记录。

在这种情况下,.NET 和/或 SQL 的最佳解决方案是什么?谢谢。

【问题讨论】:

  • “几乎相同的结构”是什么意思?这些数据库模式是否使用相同的脚本构建?另外,您只想移动“稍微修改过的数据”是什么意思?您是指在给定时间范围内已更新的任何行吗?
  • 我想你是在SQL Server Replication之后,但不确定你所说的“两个数据库在不同的机器上”是什么意思
  • @mat 几乎相同,我的意思是在几十个表中,有几个表有不同的关系。通过“稍微修改数据”设置当前日期或不移动特定列之类的东西。它们都是简单的修改。
  • @huMpty duMpty “这两个数据库在不同的机器上”我的意思是排除使用相同 sql server 实例的解决方案。只是为了说明我们谈论的是物理上独立的计算机上的数据库。
  • @Custos:正在尝试在 localhost 上执行此操作??这些数据库应该在servers!!

标签: c# sql .net sql-server database-migration


【解决方案1】:

我会使用SQL Server Replication。使用内置复制将防止任何人重新发明轮子。

【讨论】:

  • 据我所知,复制不会删除原始记录。这是要求的一部分吗?
【解决方案2】:

您可能需要一个镜像数据库。这里有一个你可能感兴趣的链接:http://technet.microsoft.com/en-us/library/ms189047(v=sql.105).aspx

另一种解决方案更基本,数据库中的每个表都应该有一个 Timestamp 字段,然后通过 .net 应用程序根据时间戳选择行并插入到另一个数据库。

【讨论】:

  • 据我所知,要进行镜像,您需要相同的结构,但这里并非如此,它略有不同。由于我在读取-复制-删除中移动数据,因此我知道新数据是什么,因为第一个数据中的所有内容都是新数据。我一直在寻找一个已经实施的解决方案,所以我不会重新发明轮子。
【解决方案3】:

可以创建一个 SSIS 包,以在可重新启动的庄园中执行以下操作。

1 - 标记您要从服务器 A 复制的数据。

2 - 将数据从服务器 A 复制到服务器 B。

3 - 从服务器 A 中删除标记的数据。

这个解决方案的好处是数据源几乎可以是任何符合 ODBC 标准的东西。

我过去曾编写过一个 Data Scoop TSQL 程序,它将数据从一个数据库移动到同一服务器上的另一个数据库。它被安排为每 5 分钟运行一次的作业。

它使用 OUTPUT 子句使事务成为一个单元。我还在 while 循环中使用 TOP(N) 子句执行此操作,这样日志文件就不会增长。

-- Delete a row and data to audit table
DELETE FROM [Person].[CountryByContinent]
  OUTPUT 'DELETE RECORD', DELETED.Country, DELETED.Continent
  INTO [Stage].[Audit] ([Action], [Country], [Continent])
WHERE [Country] = 'Chillis Grill & Bar'; 
GO  

如果它在另一台服务器上,您始终可以使用链接服务器。但是,众所周知,它们有时会因为 LAN/WAN 传输而变慢。

祝你工作顺利。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-29
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多