SQL server数据库实现远程跨服务器定时同步传输数据

news2024/9/23 17:23:05

项目背景

公司新建项目,需要访问生产数据,但是规定不能直接访问生产数据库服务器,所以得考虑通过中间库的形式实现。经过评估项目需求 ,以及当前拥有的环境。
需求:
1.用户不需要实时获取生产数据
2.用户只需要指定的某部分数据的部分字段信息
当前环境:
1.有一个备份服务器已经打通到生产服务器的端口
2.有一个中间库服务器供外部系统使用
3.生产服务器数据库类型是SQL server 2012
4.备份服务器同时也打通了到中间库的服务器端口

实现方式

1.通过在备份服务器上创建远程访问到生产服务器,远程访问到中间库服务器,
2.通过远程访问查询生产服务器数据并写入到中间库服务器
3.创建JOB每小时执行一次

相关脚本

备份服务器脚本

--创建访问生产库数据库的别名
use testdb
go
exec sp_addlinkedserver 't1mj2', ' ', 'SQLOLEDB', '172.xx.xx.xx'
exec sp_addlinkedsrvlogin 't1mj2', 'false', null, 'testuser', 'password'

exec sp_serveroption @server='t1mj2', @optname='rpc', @optvalue='true'
exec sp_serveroption @server='t1mj2', @optname='rpc out', @optvalue='true'
exec sp_serveroption @server='t1mj2', @optname='remote proc transaction promotion', @optvalue='true'


--创建访问中间库的数据库别名
use testdb
go
exec sp_addlinkedserver 'zkevent39', ' ', 'SQLOLEDB', '10.xx.xx.xx'
exec sp_addlinkedsrvlogin 'zkevent39', 'false', null, 'zkevent', 'password'

exec sp_serveroption @server='zkevent39', @optname='rpc', @optvalue='true'
exec sp_serveroption @server='zkevent39', @optname='rpc out', @optvalue='true'
exec sp_serveroption @server='zkevent39', @optname='remote proc transaction promotion', @optvalue='true'

–按照小时同步数据 --查询XX的数据插入到镜像库 -无flag

use Testdb
go
create procedure sync_event_data
as 
begin
	SET NOCOUNT ON;
-- 获取当前时间
DECLARE @CurrentTime datetime = GETDATE();
-- 截取到整点
DECLARE @RoundedTime datetime = DATEADD(minute, DATEDIFF(minute, 0, @CurrentTime) / 60 * 60, 0);
-- 减去8小时
DECLARE @EightHoursAgo datetime = DATEADD(hour, -8, @RoundedTime);
-- 1.格式化输出 
--SELECT FORMAT(@EightHoursAgo, 'yyyy-MM-dd HH:mm:ss.fff') AS FormattedDateTime; --2024-08-28 15:00:00.000
-- 获取当前时间
--DECLARE @CurrentTime datetime = GETDATE();
-- 截取到整点前一个小时
DECLARE @RoundedTime1 datetime = DATEADD(minute, DATEDIFF(minute, 0, @CurrentTime) / 60 * 60 - 60, 0);
-- 减去8小时
DECLARE @PreHoursAgo datetime = DATEADD(hour, -8, @RoundedTime1);
-- 2.格式化输出
--SELECT FORMAT(@PreHoursAgo, 'yyyy-MM-dd HH:mm:ss.fff') AS FormattedDateTime;
	insert into zkevent39.zkevent.dbo.event_data(passcode,passtime,passregion,inout) 
SELECT c.CardNumber,dateadd(hh,8, a.OccurrenceTime) OccurrenceTime,b.FTItemName,
        case when a.Message like '%entry%' or a.Message like '%进入%' then 'entry' else 'exit' end 'in_out'
  FROM t1mj2.db.dbo.Event a, t1mj2.CCFTEvent.dbo.RelatedItems b, t1mj2.CCFTEvent.dbo.CardEvent c
  where a.ID=b.EventID
  and b.RelationCode=2
  --and b.FTItemID in(select id from db.dbo.tab where name like '%25323%' and TypeID=11 and DeletionTime is null)
  and b.FTItemID in(1573,59986,60010,85115,101318,101544,154977,154979,157091,219876246,219877495,219877508,219877669,219909572)
  and c.EventID=a.ID
  --and a.OccurrenceTime between '2024-08-27 09:00:00.000' and '2024-08-27 10:00:00.000'
and  a.OccurrenceTime >= FORMAT(@PreHoursAgo, 'yyyy-MM-dd HH:mm:ss.fff')
and a.OccurrenceTime < FORMAT(@EightHoursAgo, 'yyyy-MM-dd HH:mm:ss.fff');
END;

--exec sync_event_data;
--drop procedure sync_t1_event 
--select * from  zkevent39.zkevent.dbo.event_data;

----------

查询XX的数据插入到镜像库 --有flag,这部分属于备用脚本,由于系统较多,主要看用户那边是否需要做区分,如果需要则加一个flag字段即可

use Testdb
go
create procedure sync_event_data_flag
as 
begin
	SET NOCOUNT ON;
-- 获取当前时间
DECLARE @CurrentTime datetime = GETDATE();
-- 截取到整点
DECLARE @RoundedTime datetime = DATEADD(minute, DATEDIFF(minute, 0, @CurrentTime) / 60 * 60, 0);
-- 减去8小时
DECLARE @EightHoursAgo datetime = DATEADD(hour, -8, @RoundedTime);
-- 1.格式化输出 
--SELECT FORMAT(@EightHoursAgo, 'yyyy-MM-dd HH:mm:ss.fff') AS FormattedDateTime; --2024-08-28 15:00:00.000
-- 获取当前时间
--DECLARE @CurrentTime datetime = GETDATE();
-- 截取到整点前一个小时
DECLARE @RoundedTime1 datetime = DATEADD(minute, DATEDIFF(minute, 0, @CurrentTime) / 60 * 60 - 60, 0);
-- 减去8小时
DECLARE @PreHoursAgo datetime = DATEADD(hour, -8, @RoundedTime1);
-- 2.格式化输出
--SELECT FORMAT(@PreHoursAgo, 'yyyy-MM-dd HH:mm:ss.fff') AS FormattedDateTime;
	insert into zkevent39.zkevent.dbo.event_data_flag(passcode,passtime,passregion,inout,flag) 
SELECT c.CardNumber,dateadd(hh,8, a.OccurrenceTime) OccurrenceTime,b.FTItemName,
        case when a.Message like '%entry%' or a.Message like '%进入%' then 'entry' else 'exit' end 'in_out','T1'
  FROM t1mj2.db.dbo.Event a, t1mj2.CCFTEvent.dbo.RelatedItems b, t1mj2.CCFTEvent.dbo.CardEvent c
  where a.ID=b.EventID
  and b.RelationCode=2
  --and b.FTItemID in(select id from db.dbo.tab where name like '%25323%' and TypeID=11 and DeletionTime is null)
  and b.FTItemID in(1573,59986,60010,85115,101318,101544,154977,154979,157091,219876246,219877495,219877508,219877669,219909572)
  and c.EventID=a.ID
  --and a.OccurrenceTime between '2024-08-27 09:00:00.000' and '2024-08-27 10:00:00.000'
and  a.OccurrenceTime >= FORMAT(@PreHoursAgo, 'yyyy-MM-dd HH:mm:ss.fff')
and a.OccurrenceTime < FORMAT(@EightHoursAgo, 'yyyy-MM-dd HH:mm:ss.fff');
END;

--exec sync_event_data_flag;
--drop procedure sync_event_data_flag 

中间服务器脚本

中间服务器只需要创建接收数据的表即可。

最后在备份服务器上创建定时任务的JOB即可

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其他设置保持默认即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2099800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python青少年简明教程:函数

Python青少年简明教程&#xff1a;函数 在Python中&#xff0c;函数是一段可重用的代码块&#xff0c;用于执行特定的任务。函数能够接受输入参数&#xff0c;执行特定的操作&#xff0c;并返回结果。 Python提供了许多内置函数&#xff0c;如print()、len()、eval()等&#x…

Java基于微信小程序的校园兼职小程序

博主介绍&#xff1a;✌stormjun、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

shadertoy-sdf 操作

vec3 col getBackgroundColor(uv); float d1 sdCircle(uv, 0.1, vec2(0., 0.)); float d2 sdSquare(uv, 0.1, vec2(0.15, 0));float res; // result1、union res min(d1, d2); // union2、intersection res max(d1, d2); // intersection3、subtraction res max(-d1, d…

Python实战案例数据合并订单表和商品价格表数据

有如下数据&#xff0c;订单表和商品价格表&#xff0c;进行数据合并&#xff0c;输出客户需要的效果。 数据样例&#xff1a;&#x1f447; 订单表: 商品价格表: 最终效果&#xff1a; 01实现思路 目的是将订单数据和商品价格数据按照商品id和时间进行匹配&#xff0c;以…

基于nodejs+vue+uniapp的学习资料销售平台小程序

开发语言&#xff1a;Nodejs框架&#xff1a;expressuniapp数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;VS Code 系统展示 管理员登录 管理员主界面 用户管理 学习资料管理 订单管理 系统管理 用户…

未来已来:2024年远程控制行业的新星工具推荐

个人用户对于设备管理的便捷需求&#xff0c;远程控制软件都以其独特的优势&#xff0c;搭建起一座座沟通的桥梁。今天&#xff0c;我们就来探索一款集高效性、安全性与易用性于一体的远程控制软件。为了软件得到的方便我会介绍比如能从向日葵远程控制官网、TD官网、GH官网能直…

用RPC Performance Inspector 优化你的区块链

目录 什么是RPC&#xff1f; RPC Performance Inspector 是做什么的&#xff1f; 为什么需要这个工具&#xff1f; 如何使用它&#xff1f; 适合谁用&#xff1f; 如何使用&#xff1f; 什么是RPC&#xff1f; RPC Performance Inspector 是一个专门用于测试和分析RPC性能…

C语言 动态内存管理 #动态内存函数的介绍 #常见的动态内存错误 #C\C++ 程序的内存开辟 #柔性数组

文章目录 前言 一、为什么存在动态内存分配 二、动态内存函数的介绍 1、malloc 2、free 3、calloc 4、realloc realloc 的工作原理&#xff1a; 三、常见的动态内存错误 1、对NULL指针的解引用操作 2、对动态开辟空间的越界访问 3、对非动态开辟的空间使用 free 来释…

数学建模强化宝典(8)粒子群算法

前言 粒子群算法&#xff08;Particle Swarm Optimization, PSO&#xff09;是一种基于群体智能的优化算法&#xff0c;它源于对鸟群捕食行为的研究。通过模拟鸟群中的个体相互协作和信息共享来寻找最优解&#xff0c;粒子群算法已被广泛应用于函数优化、神经网络训练、模糊系统…

跨地域工作利器:深度解析2024年远程控制软件的新特性

无论是跨地域的团队协作、技术支持&#xff0c;使用远程控制工具可以让距离不再是障碍。这次我介绍一些可以直接下载使用的远程工具&#xff0c;比如从向日葵远程控制官网&#xff0c;EV官网、TV官网等就能直接下载使用的工具。 1.向日葵远程控制 链接直通车&#xff1a;http…

微服务--Nacos

一、Nacos简介 Nacos&#xff08;Naming and Configuration Service&#xff09;是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它致力于帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos支持几乎所有主流类型的服…

惠中科技智能高效综合光伏清洗技术

惠中科技综合光伏清洗技术&#xff1a;&#xff0c;引领绿色清洁新时代 随着全球对可再生能源需求的不断增长&#xff0c;光伏产业作为绿色能源的重要组成部分&#xff0c;正迎来前所未有的发展机遇。然而&#xff0c;光伏电站的广泛应用也带来了光伏板清洁维护的挑战。灰尘、…

SprinBoot+Vue问卷调查微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平…

AI耳机是不是好赛道

AI耳机是不是好赛道&#xff1f; 数科星球原创 作者丨苑晶 编辑丨大兔 AI硬件方兴未艾&#xff0c;行业里出现了新变化。 最近&#xff0c;AI耳机开始受到关注。有人将其看作可堪比无线蓝牙耳机革命的大时代&#xff0c;也有人认为其鸡肋无比、并不看好。询问了多家投资机…

Pr:项目设置 - 颜色

Pr菜单&#xff1a;文件/项目设置 File/Project Settings “项目设置”对话框中的颜色 Color选项卡主要用于管理项目的色彩空间和显示设置&#xff0c;确保在不同设备和环境下色彩显示的一致性和准确性&#xff0c;特别是处理 HDR 或对数格式的视频素材时。 颜色设置 Color Set…

SprinBoot+Vue在线商城微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平…

网络攻击的类型

网络攻击的数量正在增长&#xff0c;迫切需要更强大的网络安全措施来应对这些攻击。作为程序员和 IT 专业人员&#xff0c;我们必须了解顶级组织中发生的最常见的网络攻击类型。 以下各节详细介绍了可能损害任何系统的不同类型的网络攻击。了解这些攻击对于检测和防止进一步攻…

esp32 中断最简验证程序

13脚接3.3v脚&#xff0c;显示OK &#xff0c;不能直接接5v电压脚 中断程序最好是为各种执行设置标志位。不能处理占用长时间的指令 准备利用中断对超声波模块编程 #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "driver/…

3.4 数据传送指令

&#x1f393; 微机原理考点专栏&#xff08;通篇免费&#xff09; 欢迎来到我的微机原理专栏&#xff01;我将帮助你在最短时间内掌握微机原理的核心内容&#xff0c;为你的考研或期末考试保驾护航。 为什么选择我的视频&#xff1f; 全程考点讲解&#xff1a;每一节视频都…

MQ专题:顺序消息落地方案

一、什么是顺序消息 投递消息的顺序和消费消息的顺序一致。 比如生产者按顺序投递了1/2/3/4/5 这 5 条消息&#xff0c;那么消费的时候也必须按照1到5的顺序消费这些消息。 二、顺序消息如何实现&#xff1f;&#xff08;2种方案&#xff09; 方案1&#xff1a;生产者串行发…