Siehe Details zu alten Sitzungen

7

Gibt es eine Möglichkeit, Details von Sitzungen aus der Vergangenheit anzuzeigen (ich erwarte voll und ganz, dass die Antwort "Nein" lautet). Ich versuche herauszufinden, auf welchem ​​Server eine bestimmte Anwendung ausgeführt wird und welche Anwendung auf eine bestimmte Datenbank zugreift. Ich weiß, dass die Anwendung irgendwann an einem Freitagabend ausgeführt wird, und ich hatte gehofft, dass SQL Server einen Sitzungsverlauf verwaltet, damit ich nur nach sp_whoDetails für die betreffenden Stunden suchen kann .

Wie ich schon sagte, ich erwarte nicht, dass dies möglich ist, aber im Moment klammere ich mich absolut an Strohhalme.

Danke im Voraus.

EDIT : Ich habe den fraglichen Server am Ende auf andere Weise gefunden; Der Job führte eine SQL-Anweisung aus, um eine Datei zu erstellen, die dann per FTP an eine andere Site gesendet wurde. Diese Site verfügt über eine FTP-Protokollierung, die mir den Namen und die IP-Adresse des Quellservers geben kann. Vielen Dank für die Antworten - ich wünschte nur, ich könnte beide akzeptieren, da beide sehr gute Punkte machen und sehr gute Vorschläge machen.

Spratty
quelle

Antworten:

8

Nein, SQL Server führt keinen Verlauf der Sitzungsaktivität. Stellen Sie sich vor, wie schnell das wachsen würde! Ihre einzigen Hoffnungen, diese Informationen aus der Vergangenheit abzurufen , sind meiner Meinung nach:

  1. Dass die App etwas tut, das in der Standardablaufverfolgung protokolliert wird (und diese Ereignisse nicht weggerollt wurden);
  2. Fehler, die die App möglicherweise generiert hat und die eindeutig angeben, mit welchem ​​Server sie verbunden ist, sind im Ereignisprotokoll des Anwendungscomputers gelandet. oder,
  3. Fehler, die die App möglicherweise generiert hat (wie Deadlocks, E / A-Warnungen oder fehlgeschlagene Anmeldungen), wurden im SQL Server-Fehlerprotokoll oder in der Sitzung system_health erfasst .

Wie in den Kommentaren erwähnt, können Sie jetzt natürlich etwas einrichten, um diese Aktivität in Zukunft zu erfassen, sodass Sie nicht herum sitzen und warten müssen, um F5 wiederholt zu hämmern, wenn die App ausgeführt wird. Sie können eine Vielzahl von Dingen oder sogar eine Kombination verwenden, je nachdem, ob Sie sich nur für Verbindungen, nur für Schreibaktivitäten, nur für den Zugriff auf bestimmte Tabellen oder Datenbanken usw. interessieren.

Aaron Bertrand
quelle
Hallo Aaron, ich fürchte, es gibt keine Fehler und keine nachvollziehbaren Ereignisse. Es ist selectleider ein wirklich einfaches Skript. Ich wusste tief im Inneren, dass es nicht möglich sein würde, genau aus dem Grund, den Sie angeben, aber es war einen Versuch wert, nehme ich an. Ich könnte immer bis 20:30 Uhr am Freitagabend hier sitzen und einfach rennen, sp_whoaber ich vermute, dass der Job nur ein paar Sekunden dauert. Ich werde sehen müssen, ob die Infrastruktur-Leute etwas finden können, das angemessen klug ist. Danke für die Antwort.
Spratty
Sie können Wireshark während der Zeit ausführen, in der die Anwendung vermutlich ausgeführt wird. Durchsuchen Sie dann den Wireshark-Trace, um festzustellen, welcher Anwendungsserver zu diesem Zeitpunkt eine Verbindung zu Ihrem Datenbankserver herstellt.
Doug Deden
@DougDeden Sie können auch Ihre eigene serverseitige Ablaufverfolgung, erweiterte Ereignisse oder Überwachung ausführen. Das OP versucht, Informationen zu Sitzungen zu ermitteln, die in der Vergangenheit ausgeführt wurden, nicht zu Sitzungen, die möglicherweise in der Zukunft ausgeführt werden.
Aaron Bertrand
1
@ AaronBertrand vereinbart. Ich ging auf die Idee des OP ein: "Ich könnte immer bis 20:30 Uhr am Freitagabend hier sitzen ...", um sie auf frischer Tat zu ertappen und ihnen eine andere Option zu geben. Aber ja, es ist wahrscheinlich besser, es in SQL zu halten, vorausgesetzt, das OP hat vollen Zugriff auf SQL, aber möglicherweise nur eingeschränkten Zugriff auf Betriebssystemebene.
Doug Deden
1
@DougDeden Ah, ich verstehe, ich dachte du meinst als Lösung für die ursprüngliche Frage. Prost.
Aaron Bertrand
5

Dies ist nur möglich, wenn Sie ein Überwachungstool eines Drittanbieters oder eine andere Art von Aktivitätskollektor konfiguriert haben. Wie in dieser Antwort erwähnt , finden Sie möglicherweise etwas Hilfreiches in plan cache:

SELECT t.[text], s.last_execution_time
FROM sys.dm_exec_cached_plans AS p
INNER JOIN sys.dm_exec_query_stats AS s
   ON p.plan_handle = s.plan_handle
CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) AS t
WHERE t.[text] LIKE N'%something unique about your query%'
ORDER BY s.last_execution_time DESC;

Aber anscheinend suchen Sie nach anderen Informationen.

Für die Zukunft sollten Sie auf jeden Fall ein Tool wie SSMS Tools Pack(es ist nicht kostenlos) in Betracht ziehen oder sich diesen Beitrag von Brent Ozar ansehen - es ist eine völlig kostenlose Möglichkeit, die Aktivität Ihres Servers mit einem kostenlosen Verfahren von Adam Machanic zu protokollieren, sp_whoisactivedamit Sie die Art beantworten können von Fragen, die Sie gerade gestellt haben.

George K.
quelle
Hallo George - danke dafür; es gibt mir sicherlich einige Optionen zu prüfen. Ich weiß nicht, ob ich den Chef dazu bringen kann, sich auf Einweg-Software einzulassen, aber es könnte einen Versuch wert sein. sp_whoisactivesieht sehr interessant aus - ich bin sicher, ich kann eine Verwendung dafür finden :-)
Spratty
@Spratty bieten alle geeigneten Überwachungstools langwierige Testversionen. Eine Testversion kann Ihnen dabei helfen, dieses Problem zu lokalisieren, bietet Ihnen jedoch auch die Möglichkeit, alle anderen Möglichkeiten zu entdecken, die Sie auf lange Sicht Zeit sparen (und somit einen Kauf rechtfertigen). Menschen kaufen Überwachungstools, weil sie Vorteile bieten und dazu beitragen, mühsame und zeitaufwändige Aufgaben zu automatisieren, und nicht, weil sie eine Menge Geld zum Verbrennen haben.
Aaron Bertrand