我们有一组相当复杂的存储过程,它们全天候处理事务队列。这些脚本使用许多打印语句来记录正在执行的操作以帮助调试。
我想在生产运行时保留这些信息(作为 SQL Server 代理作业),以帮助在出现问题时进行故障排除。我看过这个网站,它有一个相当好的保存打印输出的方法,但它也有一些缺点(在脚本完成之前输出不可用,等等)。它还需要我没有经验的 SSIS 或 DTS。
我曾想过将所有打印语句更改为将语句插入日志表。问题是我们需要调试信息的大部分工作都在事务控制下,如果出现错误,所有日志信息都将与实际事务一起回滚。
有没有人有更好的解决方案或关于如何使用我在上面看到的任何一个解决方案的想法?
回滚问题的一种解决方案是将信息记录到表变量(不受事务影响),然后回滚,然后插入到真正的记录表中。快速示例:
最后,我们使用了带有脚本的 SSIS 包,该脚本捕获了打印语句,如我原始问题中的链接所示。捕获的打印输出被放入 SSIS 日志,然后可以定向到 CSV 文件、XML 文件、数据库等(我们使用数据库表)。然后,我们使用 SQL Server 代理作业运行 SSIS 包(只需确保 SQL 代理用户有权访问您将日志输出到的表)。
尽管由于我们使用的 SP 的复杂性,这更简单,但并不理想。我确实尝试了上面@AaronBertrand 的建议,尽管使用了事务,但它确实可以启用日志记录。