1

我有一个连接到数据库的 SSIS 包。我把数据库拿下来测试一个场景,但是当数据库离线时启动包时,包在输出窗口中给了我以下错误:

SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器“DBNAME”的 AcquireConnection 方法调用失败,错误代码为 0xC0202009。在此之前可能会发布错误消息,其中包含有关 AcquireConnection 方法调用失败原因的更多信息。

我需要在运行包时检查连接,并通过电子邮件通知用户数据库已关闭。我该怎么做呢?

我有发送电子邮件的代码,我只需要在运行包时进行数据库检查。

4

3 回答 3

1

使用脚本任务。尝试打开与数据库的连接,如果失败则 Dts.TaskResult = Dts.Results.Failure。

关于这个问题的一个很好的帖子在这里:

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/7de0216b-3a0a-40ce-8149-f566a05010c9/ssis-check-database-connection-and-if-disconnected-send-email-alert?论坛=sqlintegrationservices

于 2013-10-17T11:42:05.327 回答
1

让您的数据库检查发生您的包裹之外。包是如何运行的?在 SQL 代理中安排或由用户启动?不只是运行 DTEXEC,首先运行一个检查连接性的脚本,即使用 SQLCMD.EXE。

但真正更好的方法是正常运行包,然后检查 SSIS 日志并发送适当的消息。否则,您将准备运行所有不同类型的自定义执行前检查。

我不是批处理脚本专家,但这里有一些代码示例,您可以使用它来测试与 SQL Server 的连接,如果失败则调用另一个批处理脚本,否则使用 DTEXEC 运行包。

SQLCMD -S YOurServer -E -Q "SELECT @@VERSION"
IF ERRORLEVEL 1 (
      CALL YourEmailScript.CMD
)
ELSE
(
DTExec /f "\\pathtodtsxfile\file.dtsx"
)

这不是生产质量代码。我不建议以这种方式调用您的 DTEXEC,这只是一个示例。

于 2013-10-17T23:04:43.647 回答
1

我终于让它工作了。我所做的是,使用数据库设置、数据源、初始目录等创建一个 XML 文件。然后添加一个脚本任务,添加一些代码以从 XML 文件中读取设置并创建一个 SQLConnection 并尝试连接到数据库抓住。如果有错误发送电子邮件,并在最后关闭 SQL 连接。

但是要让这个工作你必须确保你的连接将属性'DelayValidation'设置为TRUE。如果不是,包将无法在脚本任务执行之前获取连接。

于 2014-01-23T10:26:42.037 回答