将数据从远程SQL Server同步到本地服务器

b5lpy0ml  于 2023-01-01  发布在  SQL Server
关注(0)|答案(1)|浏览(215)

我对公司主应用程序使用的2个SQL Server数据库具有只读访问权限。出于报告和测试目的,我希望将这些数据库同步到公司办公室内部的2个数据库。因为它是Azure上的托管应用程序,所以不能选择复制。我希望对这两个数据库运行查询。我可以一次查询一个,但不能同时查询两个。
我可以链接到一个服务器通过ssms与链接的服务器,但不是两个,因为有相同的服务器名称。odbc,可能是一个解决方案,但我们将看到。
这里的问题是我想运行一个任务,将数据从托管的SQLServer复制到本地服务器,而不将复制作为一个选项。
如果有关系的话,我可以访问sql Server 2012和sql Server 2019。
我可以链接到一个服务器通过ssms与链接的服务器,但不是两个,因为有相同的服务器名称。odbc,可能是一个解决方案,但我们将看到。
这里的问题是我想运行一个任务,将数据从托管的SQLServer复制到本地服务器,而不将复制作为一个选项。
如果有关系的话,我可以访问sql Server 2012和sql Server 2019。

mw3dktmi

mw3dktmi1#

我以前做过手动同步任务。例如,我们的电话系统在MySQL中有一个很大的呼叫日志表,我必须定期将其复制到用于报告的SQL服务器。我基本上创建了一个同步日志表来记录上次同步发生的时间。每次运行存储过程时,它抓取从上次同步到现在的所有记录。您可以将此示例扩展到要同步的多个表(即,您可以将server_name和table_name列添加到db_synch_log和servers中)。
我看到的问题是你想复制整个数据库。如果你更新的不仅仅是几个表,这种方法是不可伸缩的IMO。就我的目的而言,我复制了3个表,没有别的。

--You need a log table to record when the last synchronization was performed.
CREATE TABLE db_synch_log (
  last_synch_date datetime;
  );

--Create variables to hold the last_synch and current datetimes.
DECLARE @run_date datetime = GETDATE();
DECLARE @last_run_date datetime;

--Get the last run date from the log table;
SET @last_run_date = (SELECT MAX(last_synch_date) FROM db_synch_log);

--Get all records from remote database between last run time an this run.
INSERT INTO myTable (column1Name, column2Name, ...)
SELECT column1Name, column2Name, ...
FROM remoteserver.dbo.myTableRemote as rt
WHERE rt.date_created > @last_run_date
  AND rt.date_created <= @run_date
;

--Update synch log.
INSERT INTO db_synch_log (last_synch_date)
SELECT @run_date
;

相关问题