【问题标题】:how to catch log suspend scenario in Sybase?如何在 Sybase 中捕获日志挂起场景?
【发布时间】:2013-01-29 07:47:28
【问题描述】:

很少有 shell 脚本使用isql 在 Sybase 数据库服务器上执行一些 sql 语句。我在日志中看到几条 Log Suspend 消息,问题是 shell 脚本成功退出。

数据库 MAIN_DB 中的事务日志几乎已满。在日志中有可用空间之前,您的事务将被暂停。

我需要拦截这些日志挂起消息并报告正确的错误。我该怎么做呢?我不确定如何在这里进行。当它发生时,它无法被清除,并且数据库管理员必须在一段时间后终止 spid,但脚本已经成功退出。因此,数据传输实际上并没有发生并被中止。这是我需要处理的场景。

请让我知道我们如何能够拦截日志暂停并至少等待特定时间?

【问题讨论】:

    标签: sybase transaction-log


    【解决方案1】:

    你有两个问题。一是脚本没有正确检测错误。其次,事务日志经常被填满。

    首先脚本需要有标准输出和错误输出到你的日志文件。当您使用 > 时,它使用的是文件描述符 1。当您想要捕获错误输出时,您需要使用 2> 作为文件描述符 2。所以命令如下所示。

    isql > error.log 2> error.log

    最好还是用这个

    isql 2>&1 > error.log

    前面说让文件描述符 2 转到文件描述符 1。

    现在要检测错误,请查找所有错误前面都有的“Msg”。

    其次要解决事务日志空间,您需要增加日志大小,日志大小应该在自己的设备上。然后您需要设置阈值以自动将已完成的事务转储到磁盘文件。您需要研究以下命令。

    sp_helpthreshold
    sp_addthreshold
    sp_thresholdaction
    

    好的 SQL,晚安。

    【讨论】:

      【解决方案2】:

      您可以检查数据库中的进程,并查找'LOG SUSPEND'的进程状态。指定用户名是可选的。

      sp_who {USERNAME}

      【讨论】:

        猜你喜欢
        • 2017-07-03
        • 2010-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-13
        • 2017-01-20
        相关资源
        最近更新 更多