У меня есть пакет SSIS, который запускает задачу сценария (в основном, и несколько других вещей). Задача сценария подключается к базе данных Access с использованием соединения OleDB. Это соединение Microsoft Jet 4.0. У меня установлены драйверы. Но он не будет запущен в SQL Agent через прокси-аккаунт. Он будет отлично работать непосредственно из Visual Studio и из хранилища пакетов. Фактически, он отлично работает в обоих этих местах, когда я вхожу в систему как специальная учетная запись, к которой привязан прокси. Но когда я запускаю через агента SQL Server, я получаю страшную ошибку «Unspecifed Error» OleDbException.Сбой задания агента SQL с пакетом SSIS для доступа к DB
Соответствующий код от задачи сценария:
// 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), так как работает моя учетная запись и учетная запись прокси. Я сделал это на сервере базы данных, чтобы убедиться.
В других вопросах, которые я видел в Интернете по этому поводу, обычно это проблема с драйверами. В этом случае я не уверен, как это может быть.
Я рад предоставить дополнительную информацию, чтобы помочь другим диагностировать. Я сам совершенно не уверен, почему это не работает.
Нечетный, файл открыт или заблокирован каким-либо образом? – Siyual
@Siyual: это не так. И так как я могу запустить его за пределами SQL Agent, это не похоже на проблему. Я полагаю, что возможно, кто-то открывает его, когда я запускаю работу агента и ни в какое другое время, но это кажется маловероятным. – siride
Ну, вот, есть swag: номинально аргументы строки подключения разделены точкой с запятой и не любят кавычки вокруг аргументов - даже аргументы со встроенными записями. Просто попробуйте вывести котировки. Разве это не было бы кикером? – Clay