Protokollieren von Abfragen und anderem T-SQL

14

Ich möchte wissen, ob SQL Server 2008 R2 ein Standardprotokollierungsschema für SELECTAnweisungen (oder ein anderes T-SQL für diese Angelegenheit) hat.

Wenn ja, wo kann ich es sehen? Wenn nicht, wie könnte ich es einrichten?

Xian Garcia
quelle

Antworten:

18

Standardmäßig wird die SQL Server-Aktivität nicht wie erwartet protokolliert. Einige Schreibaktivitäten werden im Transaktionsprotokoll aufgezeichnet , dies hängt jedoch auch davon ab, wie Ihre Datenbanken eingerichtet sind.

Es gibt vier Hauptoptionen zum Verfolgen der SELECT-Aktivität auf einem Server:

  1. Mit SQL Server Profiler können Sie eine Verbindung zu Ihrem Server herstellen und dabei auf bestimmte Aktivitäten achten.

  2. Sie können eine serverseitige Ablaufverfolgung erstellen , um Aktivitäten in einer Ablaufverfolgungsdatei auf dem Server zu protokollieren. Diese kann dann von SQL Server Profiler gelesen oder mit fn_trace_gettable zur weiteren Analyse in eine Tabelle geladen werden.

  3. Sie können Extended Events verwenden , das mehr Funktionen als serverseitige Ablaufverfolgungen bietet und das Microsoft ab SQL Server 2012 anstelle von serverseitigen Ablaufverfolgungen empfiehlt.

  4. Sie können den C2-Überwachungsmodus verwenden .

Mit SQL Server Profiler können Sie Ihren Trace einrichten (wählen Sie die gewünschten Ereignisse, Filter usw. aus), ihn dann über das Menü Datei ausschreiben und wie beschrieben auf dem Server ausführen, um einen serverseitigen Trace zu erstellen hier .

Nathan Jolly
quelle
5

Es gibt verschiedene SQL Server-Lösungen und -Techniken zum Verfolgen von SELECT-Anweisungen

  1. Speziell entwickelte gespeicherte Prozeduren und Funktionen - Hinweis: Diese Methode erfordert fortgeschrittene Kenntnisse in der T-SQL-Programmierung und zusätzliche Pflege der gespeicherten Prozeduren und Funktionen (z. B. im Fall einer Änderung des Datenbankschemas). Weitere Informationen finden Sie in diesem Artikel: http://alstechtips.blogspot.com/2011/02/auditing-select-statements-in-sql.html

  2. SQL Server-Trace-Technologie - Sie können eine schrittweise Anleitung in diesem Artikel lesen: http://solutioncenter.apexsql.com/auditing-select-statements-on-sql-server/

  3. Verwenden der SQL Server-Überwachungsfunktion - Die Überwachungsfunktion (eingeführt in SQL Server 2008) kann sowohl Server- als auch Datenbankereignisse verfolgen und verwendet die Extended Events-Technologie. Die Überwachung auf Datenbankebene wird jedoch nur von den Editionen SQL Server Developer und Enterprise unterstützt.

  4. Verwenden Sie Tools von Drittanbietern wie ApexSQL Audit oder Idera SQL Compliance Manager

Jaycob Read
quelle
3

Standardmäßig werden keine SELECT-Anweisungen protokolliert. Weitere Informationen zur Prüfung von SELECT-Anweisungen finden Sie hier in meiner Antwort .

Außerdem werden standardmäßig nicht einmal T-SQL-Anweisungen protokolliert, sondern EREIGNISSE wie Änderung des Serverspeichers, Audit-Anmeldung fehlgeschlagen, Audit-Anmeldeereignis usw.. Weitere Informationen finden Sie hier zusammen mit den T-SQL-Skripten, aus denen Informationen extrahiert werden können Standardablaufverfolgung.

Kin Shah
quelle
3

Solange es Ihnen egal ist, wer die Abfragen ausgeführt hat, gibt es einige Möglichkeiten, Kennzahlen zu Abfragen anzuzeigen, die in Ihrem System ausgeführt werden. Dies ist auf Daten seit dem letzten Neustart und möglicherweise auf den Cache-Speicher (oder einen anderen Speicher) beschränkt, je nachdem, um wie viel mehr Sie die Abfrage erweitern.

;WITH x AS
(
  SELECT 
    [text] = SUBSTRING(t.[text], 
      (s.statement_start_offset/2)+1, 
      COALESCE(NULLIF(s.statement_end_offset,-1),DATALENGTH(t.[text])*2)
       -(s.statement_start_offset/2)), 
    s.execution_count, s.last_execution_time,
    s.max_logical_reads, s.max_elapsed_time
  FROM sys.dm_exec_query_stats AS s
  CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) AS t
)
SELECT * FROM x
WHERE LTRIM([text]) LIKE 'SELECT%';

Möglicherweise möchten Sie das Muster erweitern. Dies ignoriert beispielsweise Abfragen ;WITH, die ironischerweise mit beginnen, und kann SELECT INTOauch Variablenzuweisungen erfassen , die nicht auf tatsächliche Tabellen verweisen.

Wenn Sie jedoch detailliertere Informationen benötigen, ist die Antwort von Nathan ein guter Anfang (außer wenn Sie Trace verwenden möchten, verwenden Sie NICHT den Profiler). Denken Sie daran, dass die Protokollierung jeder einzelnen Abfrage Ihres Systems nicht kostenlos sein wird.

Aaron Bertrand
quelle
Ich stimme der obigen Aussage zu. Ich würde unglaublich vorsichtig sein, wenn ich alle ausgewählten Aussagen in Ihrer Datenbank überwachen würde.
Zane
Ich habe Ihre Lösung ausprobiert - ist es möglich, dass dies nur Prozeduren, Funktionen und Trigger liefert und keine der adhoc ausgeführten SQL-Anweisungen?
Magier
@Magier Nein, sys.dm_exec_query_stats sollte nur über Abfrageanweisungen berichten (ad hoc oder aus einem Modul).
Aaron Bertrand