Ten post na wiki opisuje zarówno problem, jak i rozwiązanie. Chciałem opublikować to dla innych, którzy mogą mieć podobne problemy, ponieważ nie mogłem znaleźć niczego konkretnego, aby rozwiązać ten problem gdzie indziej.Problemy z ODBC w SQL 2000 -> 2005 Upgrade
Niedawno zaktualizowaliśmy naszą bazę danych SQL Server 2000 do SQL Server 2005. Jedna z baz danych na serwerze jest zapleczem dla bazy danych MS Access. Baza danych MS Access używa kwerend tranzytowych, za pośrednictwem ODN bez interfejsu ODBC w celu połączenia z serwerem SQL.
Przykładem ciągu połączenia DSN-mniej przedstawiono poniżej:
ODBC; DRIVER=SQL Server;SERVER=servername;APP=Microsoft® Access (Pass Through
Query);DATABASE=databasename;Network=DBMSSOCN;ConnectionTimeout=20;
Trusted_Connection=Yes
Po uaktualnieniu, okazało się, że użytkownicy nie byli w stanie uruchomić zapytania pass-through i były coraz wyświetlony następujący komunikat o błędzie:
ODBC - połączenie 'SQL Server Zmarnowana
Ten początkowo wydawał się problem z uprawnieniami, ponieważ podniesienie przełączników logowania SQL serwera do roli serwera sysadmin złagodziło problem (ale oczywiście nie jest to świetne rozwiązanie).
Po odzyskaniu logowań z roli sysadmin stwierdziliśmy, że podczas łączenia się z serwerem SQL za pośrednictwem Management Studio, logowanie może wykonać zapisane procedury. Tego samego loginu nie można uzyskać z poziomu MS Access. Wskazuje to na coś, co robił MS Access podczas próby wykonania procedur przechowywanych - a nie problemów z uprawnieniami.
Wpadliśmy ślad na serwerze przy użyciu Profiler, a ten pokazał się MS Access próbuje wykonać następujące polecenia przed przechowywane wykonanie proc:
DBCC TRACEON(208)
wyglądał na niepowodzenie przy tego polecenia przed przechowywane wykonanie procedury. Badania w sieci wykazały, że DBCC TRACEON (208) jest równoważny użyciu polecenia "SET QUOTED IDENTIFIERS ON" i że w SQL 2005 zastrzeżenie do uruchomienia tej komendy DBCC zostało odwołane.
Po dalszych badaniach znaleźliśmy odniesienia do MS Query o podobnym problemie oraz, że składnik APP ciągu połączenia powinien zostać zmieniony z "Zapytania MS" na coś innego.
W przeczuciu zmieniliśmy nasz składnik APP ciągu połączenia ODBC, a MS Access nie próbował już wykonywać polecenia DBCC TRACEON (208) przed wykonaniem procedury składowanej.
Po dalszych badań, możemy śledzone problemu do symbolu „copyright” zawarty w składniku aplikacji:
APP=Microsoft® Access (Pass Through Query)
Usuwając symbol praw autorskich, wszystko było dobrze z połączeniem, a aplikacja działało jak wcześniej w SQL 2000.
Mam nadzieję, że to pomoże każdemu, kto ma podobny problem.
Doskonała robota w rozwiązywaniu problemów i poświęcenie czasu na opublikowanie. Założę się, że masz mniej włosów niż podczas pierwszego pojawienia się tego problemu ... –
Dzięki za podzielenie się tym. Czy możesz podzielić to na pytanie i odpowiedź? Zapewniłoby to lepsze projektowanie SO. –
Czy to jest odpowiedź? Jeśli tak, zaznacz to! – djangofan