2

摘要: 我需要使用 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 通信尚未设计或部分测试。

我知道这是一个广泛的问题。这样,我将把它分成单独的问题......

要解决的单独问题:

  1. SQL Service Broker:收集数据——插件场景分析

感谢您的时间和经验,彼得

4

2 回答 2

0

听起来像是您不需要 Service Broker 的东西。IsReplicated bit not null default(0)您可以向从属机器添加一个新列。然后您需要定期将所有数据复制where IsReplicated = 0到中央服务器并将数据标记为IsReplicated = 1从站。

这是一个非常简单的同步方案。这对你有用吗?

于 2012-09-16T19:10:19.340 回答
0

此评论的唯一目的是结束应该被视为讨论相关细节的问题的摘要的问题。我不认为现有答案真正回答了这个问题(没有冒犯)。

于 2012-09-22T19:30:28.910 回答