【问题标题】: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}