我有一个SSIS包,它与数据库有连接。我把数据库放下来测试一个场景,但是当数据库离线时,当启动包时,包在输出窗口中给出了以下错误:
SSIS错误代码DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器“DBNAME”的AcquireConnection方法调用失败,错误代码为0xC0202009。在此之前可能会发布错误消息,其中包含有关AcquireConnection方法调用失败原因的更多信息。
我需要在运行包时检查连接,并通过电子邮件通知用户数据库已关闭。我该怎么做呢?
我有发送电子邮件的代码,我只需要在运行包时进行数据库检查。
答案 0 :(得分:0)
使用脚本任务。尝试打开与数据库的连接,如果失败,则Dts.TaskResult = Dts.Results.Failure。
这是一篇关于这个问题的好文章:
答案 1 :(得分:0)
让您的数据库检查在您的包裹的外。包怎么运行?在SQL Agent中预定还是由用户启动?而不是仅运行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,这只是一个例子。
答案 2 :(得分:0)
我最终得到了它的工作。我所做的是,创建一个包含数据库设置,数据源,初始目录等的XML文件。然后添加了一个脚本任务,添加了一些代码来从XML文件中读取设置并创建一个SQLConnection并尝试连接到数据库抓住。如果有错误发送电子邮件,并在finnaly关闭SQL连接。
但为了使其正常工作,您必须确保连接已将属性“DelayValidation”设置为TRUE。如果不是,则在脚本任务执行之前包将无法获取连接。