SQL Server Agent Fehler bei Datenabruf
Guten Morgen liebe Admins,
ich habe ein Problem mit dem Datenabruf via Linked Server.
Wir rufen in unserem Unternehmen Daten aus einer Intersystems Cache' Datenbank ab.
Dies geschieht in vielen Fällen über einen Agent Job der diverse Prozeduren aufruft.
In den Prozeduren werden über Linked Server Daten aus eine Cache' DB gezogen.
Das Problem:
Wird der Zentralrechner, auf dem die Datenbanken laufen, neu gestartet oder wird vom ersten Zentralrechner auf den zweiten Zentralrechner geschwenkt,
dann laufen alle Agent Jobs, welche diese Connection nutzen, auf einen Fehler.
Der Datenabruf funktioniert, wenn man eine Abfrage direkt im SSMS ausführt, ohne Probleme.
Läuft diese Abfrage aber automatisiert in der Nachtverarbeitung, läuft der Job auf einen Fehler.
Fehlermeldung:
Das Datenquellenobjekt des OLE DB-Anbieters "MSDASQL" für den Verbindungsserver "LinkedServerName" kann nicht initialisiert werden. [SQLSTATE 42000] (Fehler 7303) Der OLE DB-Anbieter "MSDASQL" für den Verbindungsserver "LinkedServerName" hat die Meldung "[Cache ODBC][State : S1T00][Native Code 450] [C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\sqlservr.exe] Request timed out due to user timeout" zurückgeben. [SQLSTATE 01000] (Fehler 7412).
Wieso sollte es auf einmal einen Timeout geben?
Kann man, falls es wirklich ein Timeout ist, diesen irgendwie aufheben?
Habt ihr eine Ahnung was das wohl sein könnte?
Infos:
Die Treiber 32 + 64 bit sind alle auf dem neuesten Stand.
Es handelt sich zum Großteil um Windows Server 2016 mit SQL Server 2016
Versuche die SQL Server Dienste neu zu starten haben auch nichts gebracht.
Vielleicht hat ja ein Admin einen Tipp für mich.
Ich bedanke mich vorab für Infos und wünsche einen schönen Tag.
MfG
O aus Dortmund
ich habe ein Problem mit dem Datenabruf via Linked Server.
Wir rufen in unserem Unternehmen Daten aus einer Intersystems Cache' Datenbank ab.
Dies geschieht in vielen Fällen über einen Agent Job der diverse Prozeduren aufruft.
In den Prozeduren werden über Linked Server Daten aus eine Cache' DB gezogen.
Das Problem:
Wird der Zentralrechner, auf dem die Datenbanken laufen, neu gestartet oder wird vom ersten Zentralrechner auf den zweiten Zentralrechner geschwenkt,
dann laufen alle Agent Jobs, welche diese Connection nutzen, auf einen Fehler.
Der Datenabruf funktioniert, wenn man eine Abfrage direkt im SSMS ausführt, ohne Probleme.
Läuft diese Abfrage aber automatisiert in der Nachtverarbeitung, läuft der Job auf einen Fehler.
Fehlermeldung:
Das Datenquellenobjekt des OLE DB-Anbieters "MSDASQL" für den Verbindungsserver "LinkedServerName" kann nicht initialisiert werden. [SQLSTATE 42000] (Fehler 7303) Der OLE DB-Anbieter "MSDASQL" für den Verbindungsserver "LinkedServerName" hat die Meldung "[Cache ODBC][State : S1T00][Native Code 450] [C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\sqlservr.exe] Request timed out due to user timeout" zurückgeben. [SQLSTATE 01000] (Fehler 7412).
Wieso sollte es auf einmal einen Timeout geben?
Kann man, falls es wirklich ein Timeout ist, diesen irgendwie aufheben?
Habt ihr eine Ahnung was das wohl sein könnte?
Infos:
Die Treiber 32 + 64 bit sind alle auf dem neuesten Stand.
Es handelt sich zum Großteil um Windows Server 2016 mit SQL Server 2016
Versuche die SQL Server Dienste neu zu starten haben auch nichts gebracht.
Vielleicht hat ja ein Admin einen Tipp für mich.
Ich bedanke mich vorab für Infos und wünsche einen schönen Tag.
MfG
O aus Dortmund
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1574415750
Url: https://administrator.de/contentid/1574415750
Ausgedruckt am: 22.11.2024 um 08:11 Uhr
13 Kommentare
Neuester Kommentar
Noch nicht wirklich einen Tipp aber eine Beobachtung: Mein SSMS habe ich eigentlich immer offen, wenn das dann länger gestanden hat und ich die erste Abfrage starte bekomme ich auch sofort einen Fehler zurück. Die genaue Meldung muss ich mir nochmal aufschreiben. Das passiert aber auch wirklich sofort, der Timeout ist also nicht sehr lang. Beim zweiten mal, also direkt eine Sekunde danach geht es dann auch schon.
Kannst du über Zeitstempel oder Ereignislog sehen wie lange der Request überhaupt gedauert hat? Lässt sich eventuell der Request mehrfach durchführen oder was passiert wenn kurz davor eine banale Abfrage über den selben linked server ausgeführt wird, scheitert dann auch die eigentliche Abfrage?
Tritt der Fehler erst seit kurzem auf oder schon seit dem es das Setup gibt?
Kannst du über Zeitstempel oder Ereignislog sehen wie lange der Request überhaupt gedauert hat? Lässt sich eventuell der Request mehrfach durchführen oder was passiert wenn kurz davor eine banale Abfrage über den selben linked server ausgeführt wird, scheitert dann auch die eigentliche Abfrage?
Tritt der Fehler erst seit kurzem auf oder schon seit dem es das Setup gibt?
Moin,
du schreibst das passiert jedes Mal wenn ein Neustart oder einen Schwenk auf einen anderen Server durchgeführt wird.
Was für eine SQL Konfiguration hast du?
Reden wir hier von Always ON Verfügbarkeitsgruppen, SQL Server Always ON Failoverclusterinstanz oder sogar von einer HA Lösung von Hyper-V bzw. VMware?
Ich vermute das dein Problem eher daher kommt und das deine Prozedur nicht korrekt verbindet.
Mit dem SSMS machst du eine AD-Hoc Abfrage und da wird es vermutlich immer funktionieren, da du aktuelle Credentials verwendest bzw. den korrekten Servernamen.
Allerdings ist das ist jetzt eher eine Vermutung, da wir deine Konfiguration nicht kennen.
Viele Grüße
Rene
du schreibst das passiert jedes Mal wenn ein Neustart oder einen Schwenk auf einen anderen Server durchgeführt wird.
Was für eine SQL Konfiguration hast du?
Reden wir hier von Always ON Verfügbarkeitsgruppen, SQL Server Always ON Failoverclusterinstanz oder sogar von einer HA Lösung von Hyper-V bzw. VMware?
Ich vermute das dein Problem eher daher kommt und das deine Prozedur nicht korrekt verbindet.
Mit dem SSMS machst du eine AD-Hoc Abfrage und da wird es vermutlich immer funktionieren, da du aktuelle Credentials verwendest bzw. den korrekten Servernamen.
Allerdings ist das ist jetzt eher eine Vermutung, da wir deine Konfiguration nicht kennen.
Viele Grüße
Rene
Hallo O,
ich habe jetzt zwar noch nicht ganz verstanden, auf welchem Rechner welche Datenbank läuft und welcher von denen dann neu gestartet wird, aber:
Überlegung 1: Der Server, von dem Ihr abruft, steht in dem Moment nicht zur Verfügung und deswegen kommt der Timeout. Kann aber sein, daß dann die Meldung anders lautet.
Überlegung 2: Der Abfrageplan wird neu erstellt oder die Daten müssen erst noch ins RAM gelesen werden oder sonst irgendwas wird durch den Neustart ausgelöst und deswegen dauert es etwas länger und löst den Timeout aus.
Möglichkeiten zur Behebung:
Wenn der Server in dem Moment nicht zur Verfügung steht, dann könnte man mit try/catch den Fehler abfangen und die Datenübertragung neu starten bis es entweder klappt oder eine von Euch festgesetzte Zeitspanne / Anzahl Versuche überschritten wurde.
Wenn es ein Timeout ist, dann kann man die Zeitspanne hochsetzen. Das geht entweder im Providerstring mit Timeout=xxx (keine Ahnung, ob das bei jedem geht) oder über sp_serveroption mit der Option "connect timeout".
Gruß, Mad Max
ich habe jetzt zwar noch nicht ganz verstanden, auf welchem Rechner welche Datenbank läuft und welcher von denen dann neu gestartet wird, aber:
Überlegung 1: Der Server, von dem Ihr abruft, steht in dem Moment nicht zur Verfügung und deswegen kommt der Timeout. Kann aber sein, daß dann die Meldung anders lautet.
Überlegung 2: Der Abfrageplan wird neu erstellt oder die Daten müssen erst noch ins RAM gelesen werden oder sonst irgendwas wird durch den Neustart ausgelöst und deswegen dauert es etwas länger und löst den Timeout aus.
Möglichkeiten zur Behebung:
Wenn der Server in dem Moment nicht zur Verfügung steht, dann könnte man mit try/catch den Fehler abfangen und die Datenübertragung neu starten bis es entweder klappt oder eine von Euch festgesetzte Zeitspanne / Anzahl Versuche überschritten wurde.
Wenn es ein Timeout ist, dann kann man die Zeitspanne hochsetzen. Das geht entweder im Providerstring mit Timeout=xxx (keine Ahnung, ob das bei jedem geht) oder über sp_serveroption mit der Option "connect timeout".
Gruß, Mad Max