У меня есть пакет SSIS, который запускает задачу script (в основном, и несколько других вещей). Задача script подключается к базе данных Access с использованием соединения OleDB. Это соединение Microsoft Jet 4.0. У меня установлены драйверы. Но он не будет запущен в SQL Agent через прокси-аккаунт. Он будет отлично работать непосредственно из Visual Studio и из хранилища пакетов. Фактически, он отлично работает в обоих этих местах, когда я вхожу в систему как специальная учетная запись, к которой привязан прокси. Но когда я запускаю через агента SQL Server, я получаю страшную ошибку "Unspecifed Error" OleDbException.
Соответствующий код из задачи script:
// class field
private string accessConnectionStringTemplate = "Data Source=\"{0}\";Provider=Microsoft.Jet.OLEDB.4.0;";
// in method that connects to database
Print(file, "Connection string: " + string.Format(accessConnectionStringTemplate, file.FileName));
// outputs: Data Source = "\Path\To\File";Provider=Microsoft.Jet.OLEDB.4.0"
using(access = new OleDbConnection(string.Format(accessConnectionStringTemplate, file.FileName))) {
access.Open();
// other code
}
Сообщения об ошибках через историю работы агента SQL:
Started: 12:35:10 PM
Error: 2016-11-03 12:35:33.51
Code: 0x00000000
Source: Import Files Main
Description: Exception: Unspecified error
End Error
Error: 2016-11-03 12:35:33.51
Code: 0x00000000
Source: Import Files Main
Description: at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.OleDb.OleDbConnection.Open()
at ST_cc0028a4b56242909c2eae546a807995.csproj.ScriptMain.ImportFile(AccessFile file, DateTime startRecordDate, DateTime endRecordDate, List`1 accessTables, Boolean includeTransactionTables, List`1 specifiedTableList)
at ST_cc0028a4b56242909c2eae546a807995.csproj.ScriptMain.Main()
End Error
Error: 2016-11-03 12:35:33.51
Code: 0x00000006
Source: Import Files
Description: The script returned a failure result.
End Error
Некоторые вещи, о которых я убедился:
- Драйверы доступа установлены и работают на сервере, на котором включен Агент SQL. Я проверил это, запустив пакет в VS как для моей учетной записи, так и для прокси-аккаунта без каких-либо проблем.
- У учетной записи proxy есть доступ к соответствующему файлу. Опять же, проверяется путем входа на сервер в качестве учетной записи прокси. Файл находится в сетевом ресурсе, но путь указан как UNC-путь.
- У учетной записи прокси есть доступ к другим базам данных, которые являются частью этой операции, чтобы исключить любые другие потенциальные источники ошибок.
- Запуск пакета из хранилища пакетов (через SSMS), так как работает моя учетная запись и учетная запись прокси. Я сделал это на сервере базы данных, чтобы убедиться.
В других вопросах, которые я видел в Интернете по этому поводу, обычно это проблема с драйверами. В этом случае я не уверен, как это может быть.
Я рад предоставить дополнительную информацию, чтобы помочь другим диагнозам. Я сам совершенно не уверен, почему это не работает.