65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2014年12月6日

CPOL

2分钟阅读

viewsIcon

15246

此结构描述了如何处理来自多个分支的数据并将其存储以进行分析。

背景

从上周开始,我在从不同分支生成一些比较报告时遇到了一些问题。我注意到我的所有分支都在各自的数据库上,这导致我无法向管理层提供比较报告。

因此,我决定将我的整个数据库合并到一个数据库中,并且它将始终与中央数据库同步。

Using the Code

在此过程中,您需要遵循一个流程。

  1. 在分支服务器上创建一个与要同步的数据库类似的临时数据库。
  2. 为插入、更新和删除创建触发器,并将数据放入本地服务器上的临时数据库中,这样可以避免互联网服务中断的影响。
  3. 创建一个计划任务,将数据发送到您的中央数据库。
  4. 使用您自己的结构创建一个中央数据库。它与分支数据库相同或不同均可。
  5. 然后您可以从中央数据库获取任何数据。

如何创建临时数据库?

很简单。

  1. 右键单击数据库
  2. 单击任务 -> 生成脚本
  3. 下一步 -> 下一步 -> 下一步.... 您将获得一个脚本

然后在您新创建的数据库上运行此脚本,它将创建一个类似的数据库。

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

创建链接服务器后,您需要创建一个计划任务来将此数据发送到服务器。

  1. 首先转到 SQL Server 对象 ->
  2. 转到作业 -> 右键单击
  3. 创建新作业
  4. 填写所有内容

a. 常规 -> 步骤 -> 计划,然后保存

创建一个过程,该过程将从临时数据库 insertupdatedelete 数据到中央数据库。

在新的计划中,您可以在步骤选项卡中编写 SQL 或执行过程,您将在其中 insertupdatedelete 来自您的远程服务的数据。

谢谢!

© . All rights reserved.