我的部门目前严重依赖 SQL Server 作业中的 CmdExec 步骤,称为使用 SQL Server 登录。
例如
osql /e /n /S SERVER01 /U USER /P PA$$$ /d DATABASE_01 /i "\\LOCATION\OF\SQL\SCRIPT\scriptfile.sql" /o "\\LOCATION\OF\SQL\LOG\scriptfile.log"
出于很多原因(尤其是安全性和预期此方法将过时),我希望我们放弃此模型并替换为存储过程和 SSIS 包的混合体。
我已经多次提出这个建议,我总是被告知,如果我们可以通过上述方法重新创建可能的日志记录细节,我们只能朝这个方向前进,我们的部门已经非常依赖这种方法。上面的方法在上下文中输出脚本的内容以及任何服务器消息,包括所有行数和错误消息。
诚然,这确实意味着对于 SQL Server 而言不算作错误的错误更容易被拾取 - 意外的低行数等。您可以根据需要进行尽可能多的错误处理,并且永远不会像从这个方法记录,所以我可以看到参数的这一面。
为了让我的老板远离 cmdexec 步骤,我想找到一种方法来重新创建类似于 cmdexec 当前提供给我们的日志记录输出的方法 - 也许是 SQL 表而不是文件(尽管两者都可以) - 在SSIS 包和存储过程。
我熟悉使用 raiserror 进行错误处理——我在存储过程中广泛使用它——但这里的任务不仅仅是捕获 SQL 错误,而是捕获所有 cmdexec 日志记录捕获,最好是在正在执行的脚本的上下文中。 . 除了编写存储过程并在每个脚本的每个步骤之后执行它之外,我看不到这样做的方法。
此外,我很想听听有关为不使用 cmdexec 步骤的人进行日志记录的最佳实践方法。我在这个部门学习过 SQL,这是我所知道的唯一做事方式。
为了我自己的开发,我越来越多地尝试编写带有错误处理的存储过程。如果我遇到不会引发错误的问题,我会通过在开发服务器上以交互方式重新运行代码来进行故障排除,这样我就可以监控分步信息。这不如我们从 cmdexec 获得的完整日志记录方便,但更安全。
其他人做的比这更多吗?有没有更好的办法?
将 T-sql 作业步骤的输出设置为输出到文件。它位于作业步骤属性的高级选项卡上。