2013-10-17 59 views
0

我有一个连接到数据库的SSIS包。我把数据库放下来测试一个场景,但是当DB在脱机状态下启动包时,在输出窗口中给我提供以下错误:SSIS包DB连接检查

SSIS错误代码DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。 AcquireConnection方法调用连接管理器“DBNAME”失败,错误代码为0xC0202009。在此之前可能会发布错误消息,并提供更多关于为什么AcquireConnection方法调用失败的信息。

我需要检查包运行时的连接并通过电子邮件通知用户数据库已关闭。我会如何去做这件事?

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

回答

0

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

但为了使这个工作,你必须确保你的连接具有属性'DelayValidation'设置为TRUE。如果不是,那么在执行脚本任务之前,程序包将无法获得连接。

0

使用脚本任务。尝试打开与数据库的连接,如果失败,则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?forum=sqlintegrationservices

+0

问题是,只要我的软件包启动,它不会执行任何操作,因为它无法获得与数据库的连接。 – user2890243

+0

您不需要将数据源添加到包中。只需添加一个脚本任务。 – Jonysuise

+0

我试过了,它没有帮助。它没有进入脚本任务,它只是开始并完成说:SSIS错误代码DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。 AcquireConnection方法调用连接管理器“DBNAME”失败,错误代码为0xC0202009。在此之前可能会发布错误消息,并提供更多关于为什么AcquireConnection方法调用失败的信息。 – user2890243

0

让你的数据库检查发生你的包之外。包是如何运行的?预定在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,这只是一个例子。

+0

我通过像这样的批处理文件运行该文件: DTExec/f“\\ pathtodtsxfile \ file.dtsx” – user2890243

+0

我已经更改了我的代码以包含您的命令行。 –

+0

没有帮助呢? – user2890243