中央数据库(远程)与分支数据库之间的大容量数据同步流程





5.00/5 (2投票s)
此结构描述了如何处理来自多个分支的数据并将其存储以进行分析。
背景
从上周开始,我在从不同分支生成一些比较报告时遇到了一些问题。我注意到我的所有分支都在各自的数据库上,这导致我无法向管理层提供比较报告。
因此,我决定将我的整个数据库合并到一个数据库中,并且它将始终与中央数据库同步。
Using the Code
在此过程中,您需要遵循一个流程。
- 在分支服务器上创建一个与要同步的数据库类似的临时数据库。
- 为插入、更新和删除创建触发器,并将数据放入本地服务器上的临时数据库中,这样可以避免互联网服务中断的影响。
- 创建一个计划任务,将数据发送到您的中央数据库。
- 使用您自己的结构创建一个中央数据库。它与分支数据库相同或不同均可。
- 然后您可以从中央数据库获取任何数据。
如何创建临时数据库?
很简单。
- 右键单击数据库
- 单击任务 -> 生成脚本
- 下一步 -> 下一步 -> 下一步.... 您将获得一个脚本
然后在您新创建的数据库上运行此脚本,它将创建一个类似的数据库。
2. 创建插入、更新、删除触发器
//Insert Trigger
USE [TestDataBase]
GO
/****** Object: Trigger [dbo].[trgAfterInsert] Script Date: 12/05/2014 16:45:57 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[trgAfterInsert] ON [dbo].[tblPerson]
FOR INSERT
AS
declare @empid int;
declare @empname varchar(100);
declare @branch decimal(10,2);
select @empid=i.day_id from inserted i;
select @empname=i.day_name from inserted i;
select @branch='12';
BEGIN DISTRIBUTED TRANSACTION
INSERT INTO temp_tblPerson(day_id, day_name,Operations)
SELECT
*,Operations='IN'
from inserted
PRINT 'AFTER INSERT trigger fired.'
COMMIT TRAN
//Update Trigger
USE [TestDataBase]
GO
/****** Object: Trigger [dbo].[tblPerson_update] Script Date: 12/05/2014 16:45:30 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[tblPerson_update]
ON [dbo].[tblPerson]
AFTER UPDATE
AS
BEGIN
declare @day_id int;
declare @day_name nvarchar(100);
SELECT @day_id =i.day_id from inserted i;
SELECT @day_name =i.day_name from inserted i;
update temp_tblPerson set day_name=@day_name,Operations='UP' where day_id=@day_id
END
//Delete Trigger
USE [TestDataBase]
GO
/****** Object: Trigger [dbo].[tblPerson_BeforeDelete] Script Date: 12/05/2014 16:44:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[tblPerson_BeforeDelete]
ON [dbo].[tblPerson]
FOR DELETE
AS
BEGIN
INSERT INTO temp_tblPerson(day_id, day_name,Operations)
SELECT
d.day_id, d.day_name,Operations='DL'
FROM deleted d
END
当临时数据库将数据发送到中央数据库时,如何跟踪其更新或删除命令可能会出现一些问题?
因此,只需在您的 tempTable
中创建一个额外的列,即 operationsType
。然后,您可以轻松地在中央数据库上执行您的命令。我创建了一个名为 Operations
的列来执行此操作。
Operations='DL'
现在您需要创建一个计划任务来将数据发送到中央数据库。
首先,您需要创建一个链接服务器来执行此操作。
按照以下步骤创建链接服务器。
https://codeproject.org.cn/Articles/35943/How-to-Config-Linked-Servers-in-a-Minute
创建链接服务器后,您需要创建一个计划任务来将此数据发送到服务器。
- 首先转到 SQL Server 对象 ->
- 转到作业 -> 右键单击
- 创建新作业
- 填写所有内容
a. 常规 -> 步骤 -> 计划,然后保存
创建一个过程,该过程将从临时数据库 insert
、update
或 delete
数据到中央数据库。
在新的计划中,您可以在步骤选项卡中编写 SQL 或执行过程,您将在其中 insert
、update
或 delete
来自您的远程服务的数据。
谢谢!