摘要: 我需要使用 SQL Server 服务代理从卫星 SQL 服务器可靠地收集数据。我需要设计允许一种插件顺利插入另一个卫星 SQL 服务器的协议。(我将根据您的建议完善问题——包括图片。但我需要以某种方式开始。)
背景: 我确实有一台中央 SQL 服务器(Microsoft,SQL 2008 R2 Standard ed.)和几台靠近生产机器的小型服务器(相同版本,Express 版)。小型服务器将传感器的温度收集到这样定义的表中:
CREATE TABLE dbo.line_sensor_values (
UTC DATETIME NOT NULL,
line_no TINYINT NOT NULL, -- line number: 1, 2, 3, etc.
sensor_no TINYINT NOT NULL, -- sensor number: 1, 2, 3, etc.
sensor_value float NULL, -- the measured value
PRIMARY KEY CLUSTERED (
UTC ASC,
line_no ASC,
sensor_no ASC
)
)
生产线上的line_no
小 SQL 是常数。同一个表在中央 SQL 服务器上创建,可以暂时从小型服务器物理断开连接。(你知道,真实的物理环境。)
目标是将所有收集的数据从小型 SQL 服务器传输到中央服务器。所有服务器都创建了表;但是,他们对通信另一端的数据一无所知。这样,必须设计一些协议来使数据收集工作。必须设计一种 hanshake,以知道在重新连接后或传感器数据收集失败后继续数据传输的位置。
中央服务器使用收集到的传感器数据来处理某些任务。比如说,必须处理来自某条线(任务已知)的某个传感器的数据点以形成图表。该任务知道要收集传感器值的时间间隔。但是,任务数据库环境不会通过事件与数据收集同步。这样,UTC时间间隔是确定传感器数据是否属于任务的唯一方法。
同样,数据传感器采样间隔与任务无关,SQL 服务器可能会暂时断开连接。有时,传感器可能损坏,或者可能有其他原因导致传感器丢失物理数据。但是,如果有带有UTC时间的传感器数据,则表示所有以前的值或存在于表中或从未存在过。因此,知道任务数据是否完整的方法等于知道传感器有更新的数据(在任务的 UTC 范围间隔之后产生)。
目标是不丢失收集到的传感器值。理想的目标是不需要任何其他特殊的功能调用(即通过任何类型的调度程序)。
已经做了什么:
基本上,传感器将数据插入到专用表中(除了
dbo.line_sensor_values
上面提到的)。触发器获取数据并转换它们,然后将它们插入到dbo.line_sensor_values
. 换句话说,卫星机上的桌子已经在收集数据。它已经起作用了。此触发器或其他方法可用于通过 Service Broker 发送传感器值。执行任务的存储过程检查中央 SQL 服务器上的表中的传感器数据,并在数据存在时制作图表,并且已经设计好并且可以正常工作。但是,它仅手动用作概念的证明。
Service Broker 设置之前已经建议过。但是,用于此目的的 Service Broker 通信尚未设计或部分测试。
我知道这是一个广泛的问题。这样,我将把它分成单独的问题......
要解决的单独问题:
感谢您的时间和经验,彼得