【问题标题】:Handling day light savings across multiple time zones.- MS SQL Server跨多个时区处理夏令时。- MS SQL Server
【发布时间】:2015-08-14 02:38:28
【问题描述】:

我的任务是根据不同的时区处理导入到 SQL 服务器的作业。文件从多个地区(例如巴西、新加坡、澳大利亚、美国各地以及欧洲)到达 Windows Server。

每个文件将通过多个存储过程导入到 SQL 表中。每个存储过程都需要根据与文件来源相关的时区,按照预定的时间执行。

事实证明,从设定的时间开始工作很棘手,因为每个地区都会在一年中的不同时间调整夏令时。例如,英国将时钟向前移动以节省夏令时,巴西可能不会再将时间向前移动 3 周(不要引用我的话,我只是将这些时间用于示例目的)。

我的问题是;如何根据多个时区安排作业在同一台服务器上运行?

如果我要在 SQL 中创建一个显示一年中每个阶段的每个时区之间的关系的时区查找表,我可以看到这可能是可能的,但这似乎很麻烦,而且还需要相当长的时间填充表格。

Windows 调度程序似乎使用本地服务器的日期/时间设置,虽然它确实针对夏令时进行了调整,但这仅适用于一个地区。以前有没有人在 SQL Server 中处理过这个问题?或者任何人都可以推荐一个 SQL Server 外部的调度工具,它可以根据不同的时区启动任务?

任何帮助或建议将不胜感激。

【问题讨论】:

标签: sql sql-server scheduled-tasks


【解决方案1】:

根据定义,您将无法透明且轻松地配置单个 SQL Server 实例以在不同时区运行多组任务(实例是单一的,所有任务集都将位于同一时区)。

但是,您可以使用您喜欢的任何语言编写自己的脚本(例如,用于 MSSQL 的 CLR .NET 扩展或只是简单的 Transact-SQL),其配置如下:

  1. 遍历您希望运行任务的每个区域的列表
  2. 将区域时间转换为服务器时间并设置要执行的操作(例如通过 sp_schedule)。
  3. 重复下一个周期。

这个任务当然应该在 +12 UTC 运行,因此肯定会在那个日期首先执行(因为时间在日本很方便开始)。

不管夏令时、时区更新和一切如何,以这种方式实施都会非常清晰和可靠。只需确保您的合作伙伴时区配置保持最新即可。

【讨论】:

    猜你喜欢
    • 2012-11-07
    • 2015-04-23
    • 2012-11-21
    • 2011-03-13
    • 1970-01-01
    • 2019-12-16
    • 2017-03-17
    • 2010-10-22
    • 2022-07-20
    相关资源
    最近更新 更多