代码之家  ›  专栏  ›  技术社区  ›  Yauheni Sivukha

ms-sql数据库中周期写入时间戳的实现

  •  1
  • Yauheni Sivukha  · 技术社区  · 14 年前

    解决:

    1. 按计划写入时间戳的外部应用程序(例如Sql代理)。

    问题。

    1. 哪种解决方案最好?
    2. 服务器重启后如何启动存储过程?
    3. 还有其他解决办法吗?
    3 回复  |  直到 14 年前
        1
  •  2
  •   Philip Kelley    14 年前

    1、两者各有利弊。根据您的环境进行评估和选择

    程序优势:
    -不要有SQL代理每秒处理一次的开销(实际上,我不认为您可以让SQL代理每秒一致地启动同一个作业一次。)
    -我不认为WAITFOR模式下的过程正在使用资源,但是您应该检查一下



    -停止/中断可能比您想象的要容易(并发/死锁、分离的数据库、在维护期间手动停止,然后忘记重新启动)

    工作优势:

    工作障碍:

    -如果SQL代理失败或停止,作业将不会运行

    建议:必须是每秒一次吗?是每5、10、15或30天一次吗?

    不应该是任何的,除非上面提到的。确保你不能碰到锁定,阻塞或死锁的情况!

    3,就像@gbn说的,sp\u选项

    4、没有任何东西不涉及基于悲观锁定技术的繁琐技巧,或者基于时间戳(而不是日期时间)数据类型的拜占庭逻辑。最好的解决方案似乎是将这两个数据库合并为一个数据库的长期方案,但这不是短期的选择。

    完全出于偏执,我会这样把两者结合起来:

    • 作业设置为每2、3或5分钟运行一次
    • Job调用更新timesampt的过程,然后等待几秒钟
    • 程序没有停止,所以作业继续运行;作业正在运行时,它将不会启动(因为它仍在执行)
    • 若过程以某种方式终止,作业将在下次计划运行时再次启动它。
        2
  •  3
  •   gbn    14 年前
    1. 也可以,但我倾向于使用 WAITFOR DELAY
    2. sp_procoption and start up stored procedures
    3. 如果不涉及外部客户或系统,我想不出任何