SSIS 对 SMO 的调用在 Visual Studio 中有效,但在从服务器上的 SQL 代理作业运行时失败。不使用 SMO 的作业工作正常

问题描述 投票:0回答:1

我写了一个 SSIS 2017 包,它使用 SMO(sql server 管理对象)将我的灾难恢复 (DR) 服务器与我的生产服务器同步。两台服务器都是 2017 年。该程序包使用我的网络登录在 Visual Studio 2017 (SSDT) 的 DR 服务器上运行良好,但在作为 sql 代理作业从 DR 服务器运行时失败并出现此错误:

脚本任务:错误:调用目标抛出异常。

我已经尝试使用代理和我的网络登录来运行 sql 代理作业,但仍然收到错误。将代码块包装在 Try/Catch 中并不会产生更好的错误消息。我能够从 DR 服务器上的 sql 代理作业中的 powershell 脚本使用 SMO 成功连接。示例代码:

[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null
$serverInstance = New-Object ('Microsoft.SqlServer.Management.Smo.Server') Server1

脚本任务其他详情:

目标服务器版本:SQL Server 2017

目标框架:.Net Framework 4.5 (服务器有4.6.2)

参考资料:

  • D:\Program Files (x86)\Microsoft SQL
    服务器`\DTS\Tasks\Microsoft.SqlServer.ConnectionInfo.dll
  • D:\Program Files (x86)\Microsoft SQL
    服务器`\DTS\Tasks\Microsoft.SqlServer.Smo.dll

代码:

Imports Microsoft.SqlServer.Management.Smo
Dim smoSourceServer As Server = New Server("Server1")

非常感谢任何关于尝试使这项工作的帮助或想法!

sql-server vb.net ssis smo
1个回答
-1
投票

我在这里面临同样的问题。因此,SSIS 包(脚本任务,VB)在直接从 Visual Studio 运行时工作正常,但在应用程序服务器(SSIS 所在的位置)上使用 sql server 代理运行包时失败。

当我们将应用程序服务器(同样,SSIS 所在的位置,运行包与单独的数据库服务器)从 Windows Server 2012 升级到 Windows Server 2016 时,它开始发生。在此之前,无论我们如何运行它(sql server 代理或手动),它都运行良好.

SSIS 版本为 SQL Server 2016, service pack 3.

脚本任务(VB)项目中的目标.NET框架是4.0,但我也尝试用4.5、4.6和4.7测试它,但没有成功。

这是脚本任务代码的相关片段:

Imports System
Imports System.Data
Imports System.Data.OleDb
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
Imports Microsoft.SqlServer.Management.Smo
Imports Microsoft.SqlServer.Management.Common
......
Dim srv As Server
Dim connString As String

connString = Dts.Connections("ConnMgrName").ConnectionString.ToString
Using MyConn As New OleDbConnection(connString)

MyConn.Open()

'This is where it fails:
srv = New Server(MyConn.DataSource)

你找到解决办法了吗?

谢谢, 埃德

© www.soinside.com 2019 - 2024. All rights reserved.