将数据从一个位置转移到具有相同数据库和表架构的另一位置

我们在100公里范围内有2个分支B-1和B-2。这两个分支在各自的位置都有自己的SQL Server安装程序;具有相同的数据库名称,表和结构...意味着这两个服务器都具有相同的数据库和表Schema。

B-1自2017年开始运行。因此,我们将其视为Master Server,其中我们设计了数百份报告,并提供完整的统计信息和运营报告。

B-2是最近安装的,问题是这里的电源非常有限,实际上根本没有电力供应。因此,我们使用Generators运行服务器+用户PC(连续8小时)。 这两个分支的工作性质是相同的。

我的问题是,由于非VPN可用性,我很难合并这两个服务器,并且我很难从这两个位置撤回报告。我想转移新插入的/编辑的数据从B-2到B-1(主服务器)的数据库。由于安全问题,我们也不能使用公共IP。我拥有的资源只是互联网连接。

我计划的就像是将新添加/编辑的数据文件从B-2服务器(2个表)上传到FTP服务器,然后我想将FTP服务器中文件的内容插入到B-1中服务器并从FTP中删除该文件。

因此我需要:

  1. 将表结果(新添加/编辑)写入文件(例如:abcfileName)的Sql脚本
  2. 用于从上述文件(例如:abcfileName)将数据插入表中的sql脚本。

注意:如果我满足上述需求,则将通过批处理文件或.NET / C#应用程序将其自动化以发送文件(来自B-2)并接收文件(位于B-1)

请注意:“源表”和“目标表”结构100%相同,没有任何区别。

请不要提供SSMS解决方案(因为我计划在没有用户帮助的情况下自动执行查询)

预先感谢。

由于.txt文件中没有阿拉伯字体,因此我切换到.csv文件。这是我的解决方法查询:

    DeclARE @ExportSQL nvarchar(max);
SET @ExportSQL = 'EXEC ..xp_cmdshell ''bcp "SELECT TOP 5 * from Transport.dbo.Test_Table " queryout "D:\results4.csv" -T -c -t -S ABDULLAH-PCNEW'''

Exec(@ExportSQL)

我得到下面的CSV文件,但所有SQL表字段都在一个Excel列下。

将数据从一个位置转移到具有相同数据库和表架构的另一位置

感谢您的所有评论/建议。实际上,我不希望将其称为“同步请求”。相反,我可以说它是“推送并读取”从一个位置到另一个位置的数据(反之亦然)。 例如:假设 B-1服务器已经有100,000行。 B-2服务器中有5行。

工作日期:02-10-2020 B-1服务器=保存10个新行。 B-2服务器=保存200个新行。

一天结束时,我需要以下内容: B-1服务器= 100,210行 B-2服务器= 205行

za80967190 回答:将数据从一个位置转移到具有相同数据库和表架构的另一位置

仅凭一个SO答案就很难回答这个问题。 开箱即用,through replication几乎可以使用此功能。 several types of replication中有一些需要直接连接才能将更改从一台服务器直接应用到另一台服务器(例如事务复制)。其他(如合并和快照复制)收集并发布可应用于订阅服务器的更改。这些更改可以定期存储在文件夹甚至FTP站点中。

复制是一个大课题。 Replication section in the documentation几乎是一本书。您可以点击Tutorial: Configure replication between a server and mobile clients (merge)来查看如何配置合并复制的逐步指南,该指南仅将特定表发布到订阅者可以读取的存储位置。

可以预期通过FTP发布,实际上,这是分支机构和移动客户端获取数据的一种常见方式,而无需将数据库服务器暴露给公共Internet。文章Deliver a Snapshot Through FTP解释了如何配置发布者和订阅者以使用快照和发布到FTP站点的更改。

博客文章SQL Server Merge Replication FTP: the ultimate guide to remote database synchronization在一篇文章中描述了这两种活动。

,

简单的想法:使用SQL SELECT生成INSERT脚本,并使用OSQL和其他FTP工具和批处理脚本将其自动化。

示例SELECT:

select 'INSERT INTO TABLE_A(A,B) VALUES (' + CAST(A AS VARCHAR) + ',' + CAST(B AS VARCHAR) + ')' from Table_A

它将为您提供如下结果:

INSERT INTO TABLE_A(A,B) VALUES (2,3)
INSERT INTO TABLE_A(A,B) VALUES (5,6)

使用OSQL执行该操作并将结果保存到文件中

osql -S yourserver -d yourDB -Q "SET NOCOUNT ON ; select 'INSERT INTO TABLE_A(A,' + CAST(A AS VARCHAR) + ')' from Table_A" -o d:\test.sql

之后,转移文件并在同一位置执行它。

本文链接:https://www.f2er.com/1467190.html

大家都在问