Mam pakiet SSIS, który uruchamia zadanie skryptu (głównie i kilka innych rzeczy). Zadanie skryptowe łączy się z bazą danych Access za pomocą połączenia OleDB. To jest połączenie Microsoft Jet 4.0. Mam zainstalowane sterowniki. Ale nie będzie działać w agencie SQL za pośrednictwem konta proxy. Będzie działał dobrze bezpośrednio z Visual Studio i ze sklepu z pakietami. Tak naprawdę działa dobrze w obu tych miejscach, kiedy loguję się jako konto specjalne, z którym związany jest serwer proxy. Ale kiedy uruchamiam agenta SQL Server, pojawia się przerażający "Unspecifed Error" OleDbException.Błąd zadania agenta SQL z pakietem SSIS do dostępu DB
odpowiedni kod z zadania skryptu:
// 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
}
Komunikaty o błędach poprzez historię pracy SQL agent:
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
Niektóre rzeczy zrobiłem pewien:
- dostępie sterowniki są zainstalowane i działają na serwerze, na którym działa agent SQL. Zweryfikowałem to, uruchamiając pakiet w VS jako moje konto i konto proxy, bez żadnych problemów.
- Konto proxy ma dostęp do danego pliku. Ponownie zweryfikowano, logując się do serwera jako konto proxy. Plik znajduje się w udziale sieciowym, ale ścieżka jest określona jako ścieżka UNC.
- Konto proxy ma dostęp do innych baz danych, które są częścią tej operacji, w celu wykluczenia wszelkich innych potencjalnych źródeł błędu.
- Uruchamianie pakietu z magazynu pakietu (przez SSMS), ponieważ działa zarówno moje konto, jak i konto proxy. Zrobiłem to na serwerze bazy danych, aby się upewnić.
W innych pytaniach, które widziałem w Internecie na ten temat, zwykle jest to problem ze sterownikami. W tym przypadku nie jestem pewien, jak to możliwe.
Chętnie udzielę dodatkowych informacji, aby pomóc w innych diagnozach. Sam jestem całkowicie niepewny, dlaczego to nie działa.
Nieparzysty, czy plik jest otwarty lub zablokowany w jakikolwiek sposób? – Siyual
@Siyual: nie jest. A ponieważ jestem w stanie uruchomić go poza Agentem SQL, nie wydaje się, żeby to był problem. Przypuszczam, że możliwe jest, że ktoś otwiera to dobrze, kiedy pracuję na stanowisku agenta iw żadnym innym momencie, ale wydaje mi się to mało prawdopodobne. – siride
Cóż - tutaj jest łup: nominalnie, argumenty ciągu połączenia są rozdzielane średnikami i nie lubią cytatów wokół argumentów - nawet argumentów z osadzonymi spacji. Po prostu wypróbuj cytaty. Czy to nie byłby kopacz? – Clay