2008-09-23 12 views
54

Gibt es eine Möglichkeit, SQL Server 2008 Express anzuweisen, jede Abfrage (einschließlich jeder SELECT-Abfrage!) In einer Datei zu protokollieren?ALLE Abfragen in einer SQL Server 2008 Express-Datenbank protokollieren?

Es ist eine Entwicklungsmaschine, so dass die negativen Nebenwirkungen der Protokollierung von Select-Abfragen kein Problem darstellen.

Bevor jemand den SQL Profiler vorschlägt: Dies ist nicht in Express verfügbar (weiß jemand, ob es in der Web Edition verfügbar ist?) Und ich suche nach einer Möglichkeit, Abfragen auch wenn ich abwesend bin.

Antwort

61

SQL Server Profiler:

  • File-> New Trace
  • Die Registerkarte "Allgemein" angezeigt wird.
  • Hier können Sie "In Datei speichern:" auswählen, so dass es in einer Datei gespeichert wird.
  • Registerkarte "Ereignisauswahl" anzeigen
  • Wählen Sie die Elemente aus, die Sie protokollieren möchten.
  • TSQL-> SQL: BatchStarting erhalten Sie SQL-wählt
  • Gespeicherte Prozeduren-> RPC: Completed erhalten Sie Stored Procedures.

Weitere Informationen von Microsoft: SQL Server 2008-Online - Using SQL Server Profiler

Update - SQL Express Edition:

Ein Kommentar gemacht wurde, dass MS SQL Server Profiler für die Express Edition nicht verfügbar ist .
Es scheint eine kostenlose Alternative zu sein: Profiler for Microsoft SQL Server 2005 Express Edition

+2

Danke. Nicht verfügbar in Express obwohl :-( –

+2

Ich habe nicht selbst versucht, aber hier ist es: Profiler für Microsoft SQL Server 2005 Express Edition http://sqlprofiler.googlepages.com/ – KyleLanser

+0

Wenn ich morgen zur Arbeit komme, werde ich versuchen aus diesem alternativen Programm gegen mssql 2008. – KyleLanser

3

Sie können Änderungen protokollieren. SQL Server 2008 macht dies besonders einfach mit Change Data Capture. Aber SQL Server kann SELECTs nicht sehr gut protokollieren.

Es ist theoretisch möglich mit dem Profiler, aber es wird Ihre Leistung zu töten. Sie könnten auf Ihrem Desktop "durchkommen", aber ich denke, Sie werden feststellen, dass Ihre Maschine langsam genug arbeitet, um Probleme zu verursachen. Und es wird definitiv nicht nach irgendeiner Art von Bereitstellung funktionieren.

Ein wichtiger Punkt, den ein paar andere bereits vermisst haben: Wenn sie nichts für 2008 geändert haben, von dem ich nichts gehört habe, kann man keinen SELECT auslösen.

+0

Danke. Nun, dies ist ein Entwicklungscomputer, daher ist die Leistung kein Problem, wenn ich diese Funktion aktivieren/deaktivieren kann. Das Erfassen von Selects in Produktionsumgebungen scheint sowieso ein Rezept für ein Desaster zu sein. –

0

Ich würde entweder Trigger verwenden oder eine Drittanbieter-Software wie Red Gate verwenden, um Ihre SQL-Protokolldateien auszuchecken.

+0

Red Gate Log Rescue liefert nur Einfügungen, Aktualisierungen und Löschungen. –

1

Nur für den Datensatz, ich schließe die Hinweise, DataWizard's SQL Performance Profiler als separate Antwort zu verwenden, da es wirklich das Gegenteil der answer pointing at SQL Server Profiler ist.

Es gibt eine kostenlose Testversion für 14 Tage, aber selbst wenn Sie es kaufen müssen, ist es nur 20 $ für 3 Server (im Moment des Schreibens, 2012-06-28). Dies erscheint mir mehr als fair, wenn man bedenkt, dass Tausende, die SQL Server Express Edition verwenden, gespeichert wurden.

Ich habe bisher nur die Testversion verwendet und sie bietet genau das, wonach das OP gesucht hat: eine Möglichkeit, alle in einer bestimmten Datenbank eingehenden Abfragen zu verfolgen. Es bietet auch an, eine Ablaufverfolgung in eine XML-Datei zu exportieren. Die kostenpflichtige Version bietet einige weitere Funktionen, aber ich habe sie noch nicht ausprobiert.

Haftungsausschluss: Ich bin nur ein weiterer Entwickler, der von Zeit zu Zeit mit DBs zu tun hat und ich bin in keiner Weise mit DataWizard verbunden. Ich mochte ihr Tool einfach und wollte die Leute wissen lassen, dass es existiert, da es mir bei der Profilerstellung meiner SQL Server Express-Installation geholfen hat.

+0

Es reibt mich in die falsche Richtung, wenn ein Unternehmen beschließt, ein Produkt zu nehmen, das zuvor Open Source und kostenlos war, und dann die kostenlose Version vollständig vergräbt, um es zu verkaufen. Ich verstehe es, Zeit in ein Projekt zu stecken und es zu monetarisieren. Aber lassen Sie die alten Versionen da draußen, und ziehen Sie kein Red-Gate (.Net Reflektor), wo Sie jemandes funktionierende Installation deaktivieren. Ich habe nur Anjlab benutzt, weil es kostenlos war. Wenn ich $ 20 für ein Tool ausgeben werde, würde ich lieber $ 50 ausgeben, um die SQL Server Developer Edition zu erhalten, die SQL Profiler und so ziemlich alles enthält, was SQL Server zu bieten hat. – Sam

+1

@Sam: Vielen Dank für Ihren Kommentar. Mir war nicht bewusst, dass es eine 'Developer Edition' von SQL Server gab! $ 50 ist ein ziemlich toller Deal. Und ich stimme Ihrem Punkt zu, dass alte Versionen der Software noch verfügbar sein sollten. Aber für neue Benutzer fühle ich nicht den Schmerz, wirklich. Sie kaufen es entweder oder nicht. – Oliver

28

... Späte Antwort, aber ich hoffe, dass es hier andere Leser nützlich sein würde ...

Verwenden von SQL Server Express mit erweiterten Überwachungsanforderungen wie das ist nicht wirklich optimal, wenn es nur in Entwicklungsumgebung ist.

Sie können Traces verwenden (www.broes.nl/2011/10/profiling-on-sql-server-express/), um die Daten zu erhalten, die Sie benötigen, aber Sie müssen diese selbst analysieren.

Es gibt Third Party Tools, die dies tun können, aber ihre Kosten werden ziemlich hoch sein. Log explorer von ApexSQL kann alles protokollieren, aber wählen und Idera’s Compliance-Manager wird auch Select-Anweisungen protokollieren, aber es kostet viel höher.

+0

Wurde dies mit dem Profiler, der mit SQL Server 2014 Express geliefert wird, verbessert? – zanlok

25

Es gibt eine weitere Möglichkeit, Informationen über Abfragen zu erhalten, die auf MS SQL Server Express ausgeführt wurde hier beschrieben: http://blog.sqlauthority.com/2008/01/03/sql-server-2005-last-ran-query-recently-ran-query/

Kurz gesagt, es läuft intelligente Abfrage-Systemtabellen und bekommt Informationen (Text, Zeit ausgeführt) über Abfragen (oder zwischengespeicherte Abfragepläne, falls erforderlich). So können Sie Informationen über ausgeführte Abfragen ohne Profiler in der MSSQL 2008 Express Edition erhalten.

SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query] 
FROM sys.dm_exec_query_stats AS deqs 
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest 
ORDER BY deqs.last_execution_time DESC 
+2

Imho die beste Antwort hier in Bezug auf echte und schnelle Lösung, danke! –

+1

Ja - das macht es fertig! Vielen Dank! +1. –