Verwenden Sie Sqldumper.exe Hilfsprogramm zum Generieren einer Speicherabbilddatei in SQL Server

Dieser Artikel enthält allgemeine Richtlinien für das Sqldumper.exe, das im Lieferumfang der SQL Server. Sie können dieses Hilfsprogramm verwenden, um verschiedene Arten von Speicherabbilddateien zu generieren.

Ursprüngliche Produktversion:   SQL Server 2017, SQL Server 2016, SQL Server 2014, SQL Server 2012, SQL Server 2008, SQL Server 2005
Ursprüngliche KB-Nummer:   917825

Zusammenfassung

Das Sqldumper.exe hilfsprogramm ist im Lieferumfang Microsoft SQL Server. In diesem Artikel wird beschrieben, wie Sie Sqldumper.exe dienstprogramm verwenden, um eine Speicherabbilddatei für die Watson-Fehlerberichterstattung oder zum Debuggen von Aufgaben zu generieren.

Hinweis

Zusätzlich zum Hilfsprogramm Sqldumper.exe die folgenden Methoden verfügbar:

  • Sie können den BEFEHL DBCC STACKDUMP verwenden, um eine Speicherabbilddatei in SQL Server. Weitere Informationen finden Sie unter Verwendung von DBCC STACKDUMP.
  • Sie können auch ein Powershell-Skript verwenden, um die SQLDumper-Befehlszeile zu automatisieren.

Warnung

Das Generieren von Prozessabbilddateien kann sich auf die Dienstverfügbarkeit auswirken (hier SQL Server) und ein Ressourcenfailover im Always On-Kontext auslösen (failoverclusterinstanz und Verfügbarkeitsgruppe). Die Optionen, die zum Generieren der Speicherabbilddateien verwendet werden, machen einen großen Unterschied. Lesen Sie unbedingt die Abschnitte "Auswirkungen der Dump Generation" und "Dump Types".

Wenn Sie eine SQL Server-Prozessabbilddatei (insbesondere eine gefilterte Speicherabbilddatei oder eine vollständige Speicherabbilddatei) auf einer gruppierten SQL Server oder einer SQL Server mit einer Instanz einer AlwaysOn-Verfügbarkeitsgruppe (AG) erfassen, führt die gruppierte SQL Server oder AG möglicherweise zu einem Failover auf einen anderen Knoten, wenn die Speicherabbilddatei zu lange dauert, bis sie abgeschlossen ist. Um das potenzielle Failover zu vermeiden, können Sie die folgenden Einstellungen verwenden, bevor Sie die Speicherabbilddatei erfassen, und Sie können die Änderung zurücksetzen, nachdem eine Speicherabbilddatei erstellt wurde:

  • Klicken Sie für SQL Server (Clustered SQL Server, right-click SQL Server resource in Cluster Administrator, select "If resource fails, do not restart" on the Policies tab.
  • Wenden Sie für AG alle folgenden Einstellungen an:
    • Erhöhen Sie das Sitzungstimeout, z. B. 120 Sekunden für alle Replikate. Klicken SQL Server Management Studio mit der rechten Maustaste auf das zu konfigurierende Replikat, und wählen Sie dann Eigenschaften aus. Ändern Session-Timeout (Sekunden) in 120 Sekunden. Weitere Informationen finden Sie unter Change the Session-Timeout Period for an Availability Replica (SQL Server).
    • Ändern Sie das automatische Failover aller Replikate in ein manuelles Failover. Klicken SQL Server Management Studio sie mit der rechten Maustaste auf "Replikat", wählen Sie "Eigenschaften" aus, und ändern Sie dann auf der Registerkarte "Eigenschaften" das automatische Failover aller Replikate in ein manuelles Failover. Weitere Informationen finden Sie unter Ändern des Failovermodus eines Verfügbarkeitsreplikats (SQL Server).
    • Erhöhen Sie LeaseTimeout die Zahl auf 60.000 ms (60 Sekunden), und ändern Sie sie auf HealthCheckTimeout 90.000 ms (90 Sekunden). Klicken Sie im Clusteradministrator mit der rechten Maustaste auf "AG"-Ressource, wählen Sie "Eigenschaften" aus, und wechseln Sie dann zur Registerkarte "Eigenschaften", um beide Einstellungen zu ändern. Weitere Informationen finden Sie unter Configure HealthCheckTimeout Property Settings.

Manuelles Ausführen Sqldumper.exe Dienstprogramms

Führen Sie Sqldumper.exe Hilfsprogramm im Kontext des Ordners aus, in SQL Server das Hilfsprogramm ursprünglich installiert wurde. Standardmäßig lautet der Installationspfad des dienstprogramms Sqldumper.exe wie folgt:

SQLServerInstallDrive:\Program Files\Microsoft SQL Server\90\Shared\SQLDumper.exe

Hinweis

SQLServerInstallDrive ist ein Platzhalter für das Laufwerk, auf dem Sie SQL Server 2005 installiert haben.

Führen Sie die folgenden Schritte aus, um eine Sqldumper.exe mithilfe des Dienstprogramms "Sqldumper.exe" zu generieren:

  1. Öffnen Sie den folgenden Ordner:

    SQLServerInstallDrive:\Program Files\Microsoft SQL Server\number\Shared

    Hinweis

    In diesem Ordnerpfad ist "Zahl" ein Platzhalter für eine der folgenden Optionen:

    • 140 for SQL Server 2017
    • 130 for SQL Server 2016
    • 120 for SQL Server 2014
    • 110 für SQL Server 2012
    • 100 for SQL Server 2008
    • 90 for SQL Server 2005
  2. Stellen Sie sicher, dass sich Dbghelp.dll Datei in diesem Ordner befindet.

  3. Wählen Sie "Start", "Ausführen", "Cmd" und dann "OK" aus.

  4. Geben Sie an der Eingabeaufforderung den folgenden Befehl ein, und drücken Sie die EINGABETASTE:

    cd SQLServerInstallDrive:\Program Files\Microsoft SQL Server\number\Shared
    

    Hinweis

    In diesem Ordnerpfad ändert sich der gleiche Platzhalter mit SQL Server number wie zuvor beschrieben.

  5. Geben Sie zum Generieren einer bestimmten Art von Speicherabbilddatei den entsprechenden Befehl an der Eingabeaufforderung ein, und drücken Sie dann die EINGABETASTE:

    • Vollständige Speicherabbilddatei

      Sqldumper.exe ProcessID 0 0x01100
      
    • Miniabbilddatei

      - Sqldumper.exe ProcessID 0 0x0120
      
    • Miniabbilddatei, die indirekt referenzierten Arbeitsspeicher enthält. Dies ist die empfohlene Option und wird auch von SQL Server beim automatischen Generieren von Speicherabbilds verwendet.

      Sqldumper.exe ProcessID 0 0x0128
      
    • Gefilterte Speicherabbilddatei

      Sqldumper.exe ProcessID 0 0x8100
      

    Hinweis

    ProcessID ist ein Platzhalter für die Prozess-ID der Windows-Anwendung, für die Sie eine Speicherabbilddatei generieren möchten.

Wenn das Sqldumper.exe erfolgreich ausgeführt wird, generiert das Hilfsprogramm eine Speicherabbilddatei in dem Ordner, in dem das Hilfsprogramm installiert ist.

Die vom Dienstprogramm Sqldumper.exe generierte Speicherabbilddatei hat ein Dateinamenmuster, das dem folgenden ähnelt:
SQLDmpr xxxx.mdmp
Bei diesem Muster ist xxxx eine steigende Anzahl, die basierend auf anderen Dateien bestimmt wird, die einen ähnlichen Dateinamen im gleichen Ordner haben. Wenn sich bereits Dateien im Ordner befinden, deren Dateinamen im angegebenen Muster enthalten sind, müssen Sie möglicherweise das Datum und die Uhrzeit der Dateierst nkung vergleichen, um die Datei zu identifizieren, die Sie verwenden möchten.

Zusätzliche Informationen und Überlegungen

SQLDumper.exe dient in erster Linie zum Generieren von Speicherabbilds für den SQL Server-Prozess in Szenarien, in denen ein Speicherabbild erforderlich ist, um bestimmte Probleme zu beheben (Ausnahmen, Asserts, nicht generierende Scheduler usw.). In solchen Fällen SQL Server die SQLDumper.exe, um ein Speicherabbild des Prozesses zu generieren. Das Speicherabbild wird in einem Pfad gespeichert, der im SQL Server Configuration Manager mit einem Standardspeicherortverzeichnis konfiguriert MSSQL\LOG\ ist. Wenn die Speicherabbildgröße in einigen Fällen beispielsweise zu groß ist, können Sie den Pfad wie folgt ändern:

  1. Öffnen SQL Server Configuration Manager
  2. Suchen SQL Server Unter "Dienste" nach dem SQL Server, das untersucht wird
  3. Klicken Sie mit der rechten Maustaste darauf, wählen Sie "Eigenschaften" aus, und wechseln Sie zur Registerkarte "Erweitert".
  4. Ändern Sie das Speicherabbildverzeichnis in den gewünschten Pfad, und wählen Sie "OK" aus.
  5. Starten SQL Server (wenn möglich) neu, damit die neue Einstellung wirksam wird.

Wenn das Sqldumper.exe manuell zum Generieren einer Speicherabbilddatei für eine beliebige Windows-Anwendung verwendet wird, ist die Speicherabbilddatei möglicherweise so groß wie der Speicher, den die Windows-Anwendung derzeit verwendet. Stellen Sie sicher, dass auf dem Laufwerk, auf das das Dienstprogramm Sqldumper.exe Speicherabbilddatei schreibt, ausreichend Speicherplatz verfügbar ist.

Sie können das Verzeichnis angeben, in das das Sqldumper.exe die Speicherabbilddatei schreiben soll. Das Verzeichnis muss bereits vorhanden sein, bevor Sie das Hilfsprogramm Sqldumper.exe ausführen. Andernfalls kann das Sqldumper.exe nicht mehr ausführen. Verwenden Sie keinen UNC-Pfad als Speicherort für die Speicherabbilddatei. Es folgt ein Beispiel für die Angabe des Speicherorts der Speicherabbilddatei der Miniabbilddatei:

  1. Wählen Sie "Start", "Ausführen", "Cmd" und dann "OK" aus.

  2. Geben Sie an der Eingabeaufforderung den folgenden Befehl ein, und drücken Sie die EINGABETASTE:

    cd **SQLServerInstallDrive** :\Program Files\Microsoft SQL Server\number\Shared
    
  3. Geben Sie an der Eingabeaufforderung den folgenden Befehl ein, und drücken Sie dann die EINGABETASTE:

    Sqldumper.exe ProcessID 0 0x0128 0 MdumpPath
    

    Hinweis

    MdumpPath ist ein Platzhalter für das Verzeichnis, in dem das Sqldumper.exe die Speicherabbilddatei schreiben soll. Standardmäßig wird die Datei in den aktuellen Ordner geschrieben.

Wenn Sie eine vollständige Speicherabbilddatei oder eine gefilterte Speicherabbilddatei angeben, die generiert werden soll, kann das hilfsprogramm Sqldumper.exe einige Minuten dauern, um die Speicherabbilddatei zu generieren. Die Zeit hängt von den folgenden Variablen ab:

  • Die Speichermenge, die das Sqldumper.exe hilfsprogramm derzeit verwendet
  • Die Geschwindigkeit des Laufwerks, auf das das Hilfsprogramm die Speicherabbilddatei schreibt

Während dieser Zeit werden vom Sqldumper.exe keine Befehle ausgeführt. Sie werden feststellen, dass der Server nicht mehr reagiert. Darüber hinaus kann ein Clusterfailover auftreten.

Um das Hilfsprogramm Sqldumper.exe ausführen zu können, müssen Sie sich mit einer der folgenden Methoden bei Windows anmelden:

  • Verwenden Sie ein Konto, das Mitglied der Administratorgruppe auf dem Computer ist.
  • Verwenden Sie dasselbe Benutzerkonto, unter dem der SQL Server wird.

Damit das Sqldumper.exe erfolgreich über Remotedesktop oder Terminaldienste funktioniert, müssen Sie Remotedesktop- oder Terminaldienste im Konsolenmodus starten. Um Remotedesktop beispielsweise im Konsolenmodus zu starten, wählen Sie "Start", "Ausführen", "mstsc /console" und dann "OK" aus. Wenn auf dem Zielserver Windows 2000 ausgeführt wird, wird die Option "/console" im Hintergrund ignoriert. Sie können über Remotedesktop eine Verbindung mit dem Server herstellen. Die Konsolensitzung wird jedoch nicht verwendet.

Wenn Sie feststellen, dass im aktuellen Ordner nach dem Ausführen des Dienstprogramms Sqldumper.exe keine Speicherabbilddatei generiert wurde, überprüfen Sie die Informationen, die das Hilfsprogramm an der Befehlszeile generiert hat, um die mögliche Ursache des Fehlers zu ermitteln. Diese Informationen werden auch in der Datei Sqldumper_errorlog.log im aktuellen Verzeichnis protokolliert. Es folgen zwei mögliche Fehlermeldungen und deren Ursachen:

  • Nachricht 1

    OpenProcess failed 0x57 - The parameter is incorrect

    Eine ungültige Prozess-ID wurde an das Hilfsprogramm Sqldumper.exe übergeben.

  • Nachricht 2

    Ungültiger Wert für Thread-ID - <invalid parameter> Parameterfehler

    Ein ungültiger Parameter wurde an das Hilfsprogramm Sqldumper.exe übergeben.

Wenn eine Fehlermeldung generiert wird, die einer der folgenden ähnelt, können Sie diese Meldung ignorieren:

Unbekannter Rückruftyp während Minidump 6
Unbekannter Rückruftyp während Minidump 7

Auswirkungen der Dumpgenerierung

Wenn ein Speicherabbild eines Benutzermodusprozesses angefordert wird (wie in diesem Artikel erläutert wird, wird der Vergleich mit Kernelabbilden des Betriebssystems, die sich außerhalb unseres Bereichs befinden), der Zielprozess (hier SQLServer.exe) für die Dauer eingefroren, die zum Serialisieren des Speicherabbildinhalts in das Dateiziel benötigt wird.

"Fixiert" bedeutet, dass keine Benutzeranforderung oder kein interner Vorgang ausgeführt werden kann, einschließlich eines Mechanismus für das Ressourcenabfragen, z. B. die Implementierung von IsAlive und Looks Alive von Windows Clustering (Details zur Behandlung dieser Situation finden Sie im Abschnitt "Clusterfailover und das Hilfsprogramm Sqldumper.exe"). Jedes Time-out, das auf die Zeit der Wanduhr setzt, kann auch als Folge des Fixierens verletzt werden.

Wie aus der vorherigen Anweisung abgeleitet werden kann, ist die Dauer des Fixierens hier daher der entscheidende Faktor, der von folgenden Faktoren gesteuert wird:

  • Der Typ des ausgewählten Speicherabbilds
  • Die Größe des SQL Server im Arbeitsspeicher, der im Fall einer einzelnen aktiven Instanz, in der Standardparameter ausgeführt werden, häufig nah am gesamten physischen RAM des Servers ist.
  • Die Leistung des Datenträgers, der als Ziel für das Speicherabbild verwendet wird.

Darüber hinaus sollte die Größe der Speicherabbilddatei auf dem Datenträger geplant werden, insbesondere, wenn mehrere Abbilder möglich sind und wenn große, nicht standardmäßige Abbildtypen ausgewählt sind. Stellen Sie sicher, dass Sie den Abschnitt "Dump Types" lesen, um zu erfahren, was Sie erwarten sollten. Standardmäßig erstellen einige Speicherabbildmethoden das Abbild im Ordner "\Log" der SQL Server-Instanz, der in der einfachen Standardkonfiguration auch Systemdatenträger und Daten+Protokolldatenträger für SQL Server. Die Sättigung dieses Datenträgers hat schwerwiegende Auswirkungen auf SQL Server und/oder die Systemverfügbarkeit.

Den aktuellen Versionen von SQL Server wurden drei wesentliche Verbesserungen hinzugefügt, um die Größe der Speicherabbilddatei und/oder die Zeit für die Generierung des Speicherabbilds zu reduzieren:

  • Bitmapfiltermechanismus

  • Eliminierung wiederholter Speicherabbilds für dasselbe Problem

  • Verkürzte Ausgabe im Fehlerprotokoll

SQL Server weist eine Bitmap zu, die Speicherseiten nachverfolgt, die von einem gefilterten Speicherabbild ausgeschlossen werden sollen. Sqldumper.exe liest die Bitmap und filtert Seiten heraus, ohne dass andere Metadaten des Speichermanagers gelesen werden müssen. Die folgenden Meldungen werden im SQL Server angezeigt, wenn die Bitmap aktiviert bzw. deaktiviert ist: Page exclusion bitmap is enabled. und Page exclusion bitmap is disabled.

  • SQL Server 2016

    Ab SQL Server 2016 SP2 CU13 ist die Bitmapfilterung standardmäßig aktiviert.

  • SQL Server 2017

    • Dies ist in RTM bis CU15 nicht verfügbar.
    • In SQL Server 2017 CU16 können Sie die Bitmapfilterung über T8089 aktivieren und deaktivieren, indem Sie T8089 deaktivieren.
    • Ab SQL Server 2017 CU20 ist die Bitmapfilterung standardmäßig aktiviert. Das Ablaufverfolgungsflag T8089 gilt nicht mehr und wird ignoriert, wenn es aktiviert ist. Die Bitmapfilterung kann über T8095 deaktiviert werden.
  • SQL Server 2019

    Dies ist standardmäßig in SQL Server 2019 RTM aktiviert. Sie kann über T8095 deaktiviert werden.

Eliminierung wiederholter Speicherabbilds für dasselbe Problem: Wiederholte Speicherabbilds für das gleiche Problem werden nun beseitigt. Mithilfe einer Stapelsignatur verfolgt das SQL, ob bereits eine Ausnahme aufgetreten ist, und erzeugt kein neues Speicherabbild, wenn bereits eine vorhanden ist. Dies gilt für Zugriffsverletzungen, Stack Overflows, Asserts und Indexbeschädigungsausnahmen. Dadurch wird der von Speicherabbilds verwendete Speicherplatz erheblich reduziert, und der Prozess wird nicht vorübergehend zum Generieren eines Speicherabbilds gesperrt. Dies wurde in SQL Server 2019 hinzugefügt.

Verkürzte Ausgabe im Fehlerprotokoll: Der im SQL Server-Fehlerprotokoll von einem einzelnen Speicherabbild generierte Inhalt kann nicht nur überfordert sein, sondern auch den Prozess der Generierung eines Speicherabbilds verlangsamen, da all diese Informationen in ein Textformat im Fehlerprotokoll serialisiert werden mussten. In SQL Server 2019 wurde der im Fehlerprotokoll gespeicherte Inhalt bei der Generierung des Speicherabbilds erheblich reduziert, und er kann wie hier aussehen:

DateTimespidS pid    **Dump thread - spid = 0, EC = 0x0000015C7169BF40
DateTimespidS pid    *
DateTimespidS pid    *User initiated stack dump. This is not a server exception dump.
DateTimespidS pid    *
DateTimespidS pid    Stack Signature for the dump is 0x00000000788399E5
DateTimespidS pid    External dump process return code 0x20000001.
External dump process returned no errors.

Zuvor SQL Server Informationen für jede Sitzung/jeden Thread gedruckt, wenn beispielsweise ein manuelles Abbild vom Benutzer ausgelöst wurde.

Speicherabbildtypen

Die beschriebenen Methoden können drei verschiedene Typen von Dumps generieren: Miniabbilds, vollständige Abbilder und gefilterte Abbilder.
Miniabbilds mit referenziertem Arbeitsspeicher sind eine Momentaufnahme aller aktiven Threads des Prozesses ("Threadstapel"), zusammen mit einem begrenzten Extrahieren des Arbeitsspeichers, auf den von den Threadstapeln verwiesen wird, und einigen anderen wichtigen Prozess-/Threaddaten. Sie sind in der Regel ein paar Megabyte groß und können schnell generiert werden (von weniger als einer Sekunde bis zu ein paar Sekunden). Selbst größere Serversysteme (mit Hunderten von CPU, die indirekt eine enorme Anzahl von Threads im SQL Server-Prozess unterstützen) überschreiten nur selten 20 bis 30 MB: Die Größe eines Miniabbilds wächst nicht mit der Größe des SQL Server prozesses. Dieser Speicherabbildtyp ist der Standardtyp, der von SQL Server beim automatischen Generieren von Speicherabbilds für Ausnahmen, Schedulerprobleme, Latchprobleme usw. verwendet wird.

Hinweis

SQL Server im Rahmen der integrierten Instrumentierung werden in bestimmten Situationen automatisierte "Diagnoseminiabbilde" generiert. Dieser Vorgang gilt daher als sicher genug, SQL Server er bei Bedarf automatisch ausgelöst werden kann.

Vollständige Abbilder sind eine vollständige Kopie des aktiven Zielprozessbereichs. Dies würde daher den threadstatus, den zugeordneten Arbeitsspeicher für alle Prozess und alle geladenen Module umfassen. Vollständige Abbilder haben daher eine Größe, die in etwa der Größe des SQL Server entspricht, die wiederum fast so groß wie der gesamte System-RAM sein kann. Auf großen Servern, die für eine einzelne SQL Server sind, kann dies eine Datei mit mehreren Hundert Gigabyte oder mehr bedeuten. Selbstverständlich dauert die Generierung einer solchen Datei sehr lange und löst daher das verlängerte Fixieren aus. Die Datenträgerleistung für das Dateiziel des Speicherabbilds ist ein wichtiger Treiber zum Fixieren der Zeit. Diese Art von Speicherabbild wird selten für SQL Server verwendet**, wie die Beschreibung des nächsten Typs erläutern wird.

Gefilterte Speicherabbilds: Da die Größe der typischen Server, auf denen SQL Server server ausgeführt wird, ständig an größe zuwischte, wurden vollständige Abbilder immer unhandlicher. Gefilterte Abbilder wurden daher implementiert: Sie sind eine Teilmenge der vollständigen Abbilder, bei denen große Bereiche von Speicherstrukturen, die zu SQL Server gehören, gezielt ignoriert und nicht auf den Datenträger serialisiert werden, da sie keinen Zusätzlichen Nutzen bei der Problembehandlung bieten (in der Regel Daten-/Indexseiten, einige interne Caches wie Hekaton-Datenseiten und Protokollpoolspeicher). Dies führt zu einer Datei, die kleiner als ein vollständiges Speicherabbild ist und dabei fast alle nützlichen Datenabbilds beibebehalte. Dadurch wurden vollständige Abbilder in den meisten Fällen, in denen Miniabbilds nicht ausreichten, als bevorzugte Option ersetzt. Die Größenvergrößerung im Vergleich zum vollständigen Speicherabbild kann stark variieren, es handelt sich jedoch dennoch um eine ziemlich große Datei, die häufig 30 bis 60 % der Prozessgröße SQL Server beträgt. Daher sollten Sie eine mögliche Größe planen, die so groß wie ein vollständiges Abbild ist, was einen guten Sicherheitsrand mit sich bringen sollte. Ein gefiltertes Speicherabbild kann in jedem Fall nicht unbedingt schneller generiert werden als ein vollständiges Abbild: Es geht darum, ob die an die Anzahl der vermiedenen E/A-Aktivitäten gebundenen Zuwächse die für die Implementierung der Filterlogik erforderliche Zeit überschreiten (datenträgergeschwindigkeit und CPU/RAM-Geschwindigkeit beeinflussen dies).

Sie können das Hilfsprogramm Sqldumper.exe verwenden, um bei Bedarf eine Speicherabbilddatei für eine beliebige Microsoft -Windows-Anwendung zu generieren. Sie können beispielsweise eine Speicherabbilddatei zum Debuggen eines Anwendungsproblems generieren, wenn ein Computer, auf dem Microsoft SQL Server benutzeranforderungen nicht reagiert. Eine Speicherabbilddatei kann eine Miniabbilddatei oder eine vollständige Speicherabbilddatei sein. Eine gefilterte Speicherabbilddatei ist nur im Kontext der SQL Server.

Der SQL Server ruft das hilfsprogramm Sqldumper.exe intern auf, um eine Speicherabbilddatei zu generieren, wenn für den Prozess Ausnahmen angezeigt werden. SQL Server werden Flags an das Hilfsprogramm Sqldumper.exe. Sie können Ablaufverfolgungsflags verwenden, um die Flags zu ändern, die SQL Server im Kontext einer Ausnahme oder im Kontext einer Assertion an das Hilfsprogramm übergibt. Diese Ablaufverfolgungskennzeichen liegen im Bereich von 2540 bis 2559. Sie können diese Ablaufverfolgungsflags verwenden, um bestimmte Typen von Speicherabbilddateien zu generieren. Zum Beispiel:

  • Ablaufverfolgungsflag 2551: Erzeugt ein gefiltertes Speicherabbild.
  • Ablaufverfolgungsflag 2544: Erzeugt ein vollständiges Speicherabbild.
  • Ablaufverfolgungsflag 8026: SQL Server wird ein Speicherabbildauslöser nach dem generieren des Speicherabbilds einmal löschen.

Wenn zwei oder mehr Ablaufverfolgungsflags aktiv sind, wird die Option, die das größte Speicherabbild angibt, berücksichtigt. Wenn beispielsweise die Ablaufverfolgungskennzeichen 2551 und 2544 verwendet werden, SQL Server ein vollständiges Speicherabbild erstellt.

Abrufen einer Microsoft Windows-Anwendungsprozess-ID

Zum Generieren einer Speicherabbilddatei mithilfe des Dienstprogramms Sqldumper.exe müssen Sie über die Prozess-ID der Windows-Anwendung verfügen, für die Sie eine Speicherabbilddatei generieren möchten. Führen Sie die folgenden Schritte aus, um die Prozess-ID zu erhalten:

  1. Drücken Sie STRG+ALT+ENTF, und wählen Sie dann Aufgaben-Manager aus.
  2. Wählen Sie im Dialogfeld Windows Task Manager die Registerkarte "Prozesse" aus.
  3. Wählen Sie im Menü "Ansicht" "Spalten auswählen" aus.
  4. Aktivieren Sie im Dialogfeld Spalten auswählen das Kontrollkästchen PID (Prozess-ID), und wählen Sie dann OK aus.
  5. Beachten Sie die Prozess-ID der Windows-Anwendung, für die Sie eine Speicherabbilddatei generieren möchten. Beachten Sie für SQL Server Anwendung die Prozess-ID des Sqlservr.exe Prozess.
  6. Schließen Sie den Task-Manager.

Sie können auch die Prozess-ID der SQL Server, die auf Ihrem Computer ausgeführt wird, mithilfe der SQL Server abrufen. Ein Teil der Fehlerprotokolldatei SQL Server beispielsweise wie folgt:

Datum/Uhrzeit Server Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)
Datum/Uhrzeit
Copyright (c) 1988-2005 Microsoft Corporation
Enterprise Edition unter Windows NT 5.2 (Build 3790: Service Pack 1)

Date/Time Server (c) 2005 Microsoft Corporation.
Datum/Uhrzeit-Server Alle Rechte vorbehalten.
Die Prozess-ID des Datums-/Uhrzeitserverservers ist 3716.

Die Nummer, die nach der Serverprozess-ID angezeigt wird, ist die Prozess-ID für Sqlservr.exe Prozess.

Clusterfailover und das Sqldumper.exe A0

In Clusterfailoverszenarien kann die SQL Server-DLL jetzt eine Speicherabbilddatei abrufen, bevor das Failover auftritt. Wenn die SQL Server-Ressourcen-DLL feststellt, dass ein Fehler bei einer SQL Server-Ressource vorkommt, verwendet die SQL Server-Ressourcen-DLL das Hilfsprogramm Sqldumper.exe, um eine Speicherabbilddatei des SQL Server abrufen. Um sicherzustellen, dass das Sqldumper.exe die Speicherabbilddatei erfolgreich generiert, müssen Sie die folgenden drei Eigenschaften als Voraussetzungen festlegen:

  • SqlDumperDumpTimeOut Ein vom Benutzer angegebenes Zeittimeout. Die Ressourcen-DLL wartet auf den Abschluss der Speicherabbilddatei, bevor die Ressourcen-DLL den SQL Server beendet.
  • SqlDumperDumpPath
    Der Speicherort, an dem das Sqldumper.exe die Speicherabbilddatei generiert.
  • SqlDumperDumpFlags
    Kennzeichen, die Sqldumper.exe Hilfsprogramm verwendet.

Wenn keine der Eigenschaften festgelegt ist, kann das Sqldumper.exe die Speicherabbilddatei nicht generieren. Eine Warnmeldung wird sowohl im Ereignisprotokoll als auch im Clusterprotokoll protokolliert, sobald die Ressource online gebracht wird.

Für SQL Server 2012 und höher

Sie können den Befehl ALTER SERVER CONFIGURATION (T-SQL) verwenden, um diese Eigenschaften zu ändern. Zum Beispiel:

ALTER SERVER CONFIGURATION   set FAILOVER CLUSTER PROPERTY SqlDumperDumpTimeOut =0;
ALTER SERVER CONFIGURATION   set FAILOVER CLUSTER PROPERTY SqlDumperDumpPath ='C:\temp\';
ALTER SERVER CONFIGURATION   set FAILOVER CLUSTER PROPERTY SqlDumperDumpFlags =296;

Alternativ können Sie auch PowerShell-Skripts verwenden. Beispiel: Für eine benannte Instanz SQL2017AG:

Get-ClusterResource -Name "SQL Server (SQL2017AG)" | Set-ClusterParameter -Name "SqlDumperDumpPath" -Value "C:\temp"
Get-ClusterResource -Name "SQL Server (SQL2017AG)" | Set-ClusterParameter -Name "SqlDumperDumpFlags" -Value 296
Get-ClusterResource -Name "SQL Server (SQL2017AG)" | Set-ClusterParameter -Name "SqlDumperDumpTimeOut" -Value 0

Um zu überprüfen, ob die Einstellungen angewendet wurden, können Sie diesen PowerShell-Befehl ausführen:

Get-ClusterResource -Name "SQL Server (SQL2017AG)" | Get-ClusterParameter

Für SQL Server 2008/2008 R2 oder Windows 2012 und früher

Führen Sie die folgenden Sqldumper.exe aus, um die Eigenschaften des Hilfsprogramms für das Clusterfailover zu konfigurieren:

  1. Wählen Sie "Start", "Ausführen", "Cmd" und dann "OK" aus.
  2. Geben Sie für jede Eigenschaft den entsprechenden Befehl an der Eingabeaufforderung ein, und drücken Sie dann die EINGABETASTE:
    • The SqlDumperDumpFlags property To set the SqlDumperDumpFlags property for a specific kind of dump file, type the corresponding command at the command prompt, and then press ENTER:

      • Vollständige Threadabbilddatei

        • Standardinstanz
          Clusterressource "SQL Server" /priv SqlDumperDumpFlags = 0x01100

        • Benannte Instanz
          Clusterressource "SQL Server (INSTANCE1)" /priv SqlDumperDumpFlags = 0x01100

      • Alle Thread-Miniabbilddatei

        • Standardinstanz
          Clusterressource "SQL Server" /priv SqlDumperDumpFlags = 0x0120
        • Benannte Instanz
          Clusterressource "SQL Server (INSTANCE1)" /priv SqlDumperDumpFlags = 0x0120
      • Alle Threadabbilddatei gefiltert

        • Standardinstanz
          Clusterressource "SQL Server" /priv SqlDumperDumpFlags = 0x8100

        • Benannte Instanz
          Clusterressource "SQL Server (INSTANCE1)" /priv SqlDumperDumpFlags = 0x8100

    • Die SqlDumperDumpPath Eigenschaft

      Clusterressource "SQL Server" /priv SqlDumperDumpPath= DirectoryPath

      Hinweis

      DirectoryPath ist ein Platzhalter für das Verzeichnis, in dem die Speicherabbilddatei generiert wird, und sollte in Anführungszeichen (" ") angegeben werden.

    • Die Eigenschaft "SqlDumperDumpTimeOut"

      Clusterressource "SQL Server" /priv SqlDumperDumpTimeOut= Timeout

      Hinweis

      Timeout ist ein Platzhalter für das Timeout in Millisekunden (ms).

      Die Zeit, die das Hilfsprogramm zum Generieren einer Speicherabbilddatei eines SQL Server benötigt, hängt von der Computerkonfiguration ab. Bei einem Computer mit vielen Sprechungen kann die Zeit erheblich sein. Verwenden Sie das Hilfsprogramm Sqldumper.exe, um eine Speicherabbilddatei manuell zu generieren, um eine Schätzung der Zeit zu erhalten, die der Prozess benötigt. Die gültigen Werte für die Eigenschaft "SqlDumperDumpTimeOut" liegen zwischen 10.000 ms und MAXDWORD. MAXDWORD stellt den höchsten Wert im Bereich des Datentyps DWORD (4294967295) dar.

Um zu überprüfen, ob die Einstellungen aktiviert wurden, können Sie den folgenden Befehl ausführen:

cluster resource "SQL Server" /priv "

Führen Sie die folgenden Sqldumper.exe aus, um die Eigenschaften des Hilfsprogramms für das Clusterfailover zu entfernen:

  1. Wählen Sie "Start", "Ausführen", "Cmd" und dann "OK" aus.
  2. Geben Sie für eine bestimmte Eigenschaft den entsprechenden Befehl an der Eingabeaufforderung ein, und drücken Sie dann die EINGABETASTE:
    • Die SqlDumperDumpFlags Eigenschaft

      • Standardinstanz
        Clusterressource "SQL Server" /priv:SqlDumperDumpFlags /usedefault
      • Benannte Instanz
        Clusterressource "SQL Server (INSTANCE1)" /priv:SqlDumperDumpFlags /usedefault
    • Die SqlDumperDumpPath Eigenschaft

      • Standardinstanz
        Clusterressource "SQL Server" /priv:SqlDumperDumpPath /usedefault
      • Benannte Instanz
        Clusterressource "SQL Server (INSTANCE1)" /priv:SqlDumperDumpPath /usedefault
    • Die SqlDumperDumpTimeOut Eigenschaft

      • Standardinstanz
        Clusterressource "SQL Server" /priv:SqlDumperDumpTimeOut /usedefault
      • Benannte Instanz
        Clusterressource "SQL Server (INSTANCE1)" /priv:SqlDumperDumpTimeOut /usedefault

Verwenden von DBCC STACKDUMP

Der DBCC STACKDUMP Befehl kann Ihnen beim Erstellen eines Speicherabbilds im Verzeichnis LOG ihrer SQL Server helfen. Der Befehl erstellt standardmäßig einen Minidump mit allen Threads, die eine begrenzte Größe aufweisen und den Status des SQL Server widerspiegeln. Führen Sie einfach den folgenden Befehl in einem SQL Server aus:

 DBCC STACKDUMP

Aktivieren Sie die Ablaufverfolgungsflags 2551 mit dem folgenden Befehl, um diese Methode zum Erstellen eines gefilterten Speicherabbilds zu aktivieren:

dbcc traceon(2551, -1)
go
dbcc stackdump

Verwenden Sie das Ablaufverfolgungsflag 2544, um ein vollständiges Abbild zu erstellen.

Hinweis

Nachdem Sie die Speicherabbilddatei erhalten haben, sollten Sie das Ablaufverfolgungsflag deaktivieren, indem Sie den folgenden Befehl verwenden, um zu vermeiden, dass versehentlich alle weiteren SQL Server minidumps für die selbstdiagnose auf größere Abbilder aktualisiert werden:

DBCC TRACEOFF (TraceNumber, -1);
GO

Where TraceNumber is the trace flag you have previously enabled like 2551 or 2544.

Falls Sie sich nicht sicher sind, welches Ablaufverfolgungsflag aktiv bleibt, können Sie dies ausführen:

 DBCC TRACESTATUS(-1)

Ein leeres Ergebnisset weist darauf hin, dass kein Ablaufverfolgungsflag aktiv ist. Wenn hingegen 2551 noch aktiv ist, würden Sie sehen:

TraceFlag Status Global Sitzung
2551 1 1 0

Hinweis

Die von DBCC TRACEON aktivierten werden nach einem Dienstneustart zurückgesetzt traceflag (entfernt).

Verwenden eines PowerShell-Skripts zum Generieren einer Speicherabbilddatei mit SQLDumper

  • Speichern Sie den folgenden Code als ps1-Datei, z. B. SQLDumpHelper.ps1:

    Codedetails

    $isInt = $false
    $isIntValDcnt = $false
    $isIntValDelay = $false
    $SqlPidInt = 0
    $NumFoler =""
    $OneThruFour = ""
    $SqlDumpTypeSelection = ""
    $SSASDumpTypeSelection = ""
    $SSISDumpTypeSelection = ""
    $SQLNumfolder=0
    $SQLDumperDir=""
    $OutputFolder=""
    $DumpType ="0x0120"
    $ValidPid
    $SharedFolderFound=$false
    $YesNo =""
    $ProductNumber=""
    $ProductStr = ""
    Write-Host ""
    Write-Host "`**********************************************************************"
    Write-Host "This script helps you generate one or more SQL Server memory dumps"
    Write-Host "It presents you with choices on:`
                -target SQL Server process (if more than one)
                -type of memory dump
                -count and time interval (if multiple memory dumps)
    You can interrupt this script using CTRL+C"
    Write-Host "***********************************************************************"
    #check for administrator rights
    #debugging tools like SQLDumper.exe require Admin privileges to generate a memory dump
    if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
    {
         Write-Warning "Administrator rights are required to generate a memory dump!`nPlease re-run this script as an Administrator!"
         #break
    }
    #what product would you like to generate a memory dump
    while(($ProductNumber -ne "1") -and ($ProductNumber -ne "2") -and ($ProductNumber -ne "3") -and ($ProductNumber -ne "4") -and ($ProductNumber -ne "5"))
    {
        Write-Host "Which product would you like to generate a memory dump of?" -ForegroundColor Yellow
        Write-Host "1) SQL Server"
        Write-Host "2) SSAS (Analysis Services)"
        Write-Host "3) SSIS (Integration Services)"
        Write-Host "4) SSRS (Reporting Services)"
        Write-Host "5) SQL Server Agent"
        Write-Host ""
        $ProductNumber = Read-Host "Enter 1-5>"
        if (($ProductNumber -ne "1") -and ($ProductNumber -ne "2") -and ($ProductNumber -ne "3") -and ($ProductNumber -ne "4")-and ($ProductNumber -ne "5"))
        {
            Write-Host ""
            Write-Host "Please enter a valid number from list above!"
            Write-Host ""
            Start-Sleep -Milliseconds 300
        }
    }
    if ($ProductNumber -eq "1")
    {
        $SqlTaskList = Tasklist /SVC /FI "imagename eq sqlservr*" /FO CSV | ConvertFrom-Csv
        $ProductStr = "SQL Server"
    }
    elseif ($ProductNumber -eq "2")
    {
        $SqlTaskList = Tasklist /SVC /FI "imagename eq msmdsrv*" /FO CSV | ConvertFrom-Csv
        $ProductStr = "SSAS (Analysis Services)"
    }
    elseif ($ProductNumber -eq "3")
    {
        $SqlTaskList = Tasklist /SVC /FI "imagename eq msdtssrvr*" /FO CSV | ConvertFrom-Csv
        $ProductStr = "SSIS (Integration Services)"
    }
    elseif ($ProductNumber -eq "4")
    {
        $SqlTaskList = Tasklist /SVC /FI "imagename eq reportingservicesservice*" /FO CSV | ConvertFrom-Csv
        $ProductStr = "SSRS (Reporting Services)"
    }
    elseif ($ProductNumber -eq "5")
    {
        $SqlTaskList = Tasklist /SVC /FI "imagename eq sqlagent*" /FO CSV | ConvertFrom-Csv
        $ProductStr = "SQL Server Agent"
    }
    if ($SqlTaskList.Count -eq 0)
    {
        Write-Host "There are curerntly no running instances of $ProductStr. Exiting..." -ForegroundColor Green
        break
    }
    #if multiple SQL Server instances, get the user to input PID for desired SQL Server
    if ($SqlTaskList.Count -gt 1)
    {
        Write-Host "More than one $ProductStr instance found."
        $SqlTaskList | Select-Object  PID, "Image name", Services |Out-Host
        #check input and make sure it is a valid integer
        while(($isInt -eq $false) -or ($ValidPid -eq $false))
        {
            Write-Host "Please enter the PID for the desired SQL service from list above" -ForegroundColor Yellow
            $SqlPidStr = Read-Host ">"
    
                try
                {
                    $SqlPidInt = [convert]::ToInt32($SqlPidStr)
                    $isInt = $true
                }
                catch [FormatException]
                {
                     Write-Host "The value entered for PID '",$SqlPidStr,"' is not an integer"
                }
    
            #validate this PID is in the list discovered
            for($i=0;$i -lt $SqlTaskList.Count;$i++)
            {
                if($SqlPidInt -eq [int]$SqlTaskList.PID[$i])
                {
                    $ValidPid = $true
                    break;
                }
                else
                {
                    $ValidPid = $false
                }
            }
         }
         Write-Host "Using PID=$SqlPidInt for generating a $ProductStr memory dump" -ForegroundColor Green
         Write-Host ""
    }
    else #if only one SQL Server/SSAS on the box, go here
    {
        $SqlTaskList | Select-Object PID, "Image name", Services |Out-Host
        $SqlPidInt = [convert]::ToInt32($SqlTaskList.PID)
    
        Write-Host "Using PID=", $SqlPidInt, " for generating a $ProductStr memory dump" -ForegroundColor Green
        Write-Host ""
    }
    #dump type
    if ($ProductNumber -eq "1")  #SQL Server memory dump
    {
        #ask what type of SQL Server memory dump
        while(($SqlDumpTypeSelection  -ne "1") -and ($SqlDumpTypeSelection -ne "2") -And ($SqlDumpTypeSelection -ne "3") -And ($SqlDumpTypeSelection -ne "4" ))
        {
            Write-Host "Which type of memory dump would you like to generate?" -ForegroundColor Yellow
            Write-Host "1) Mini-dump"
            Write-Host "2) Mini-dump with referenced memory " -NoNewLine; Write-Host "(Recommended)"
            Write-Host "3) Filtered dump " -NoNewline; Write-Host "(Not Recommended)" -ForegroundColor Red
            Write-Host "4) Full dump  " -NoNewline; Write-Host "(Do Not Use on Production systems!)" -ForegroundColor Red
            Write-Host ""
            $SqlDumpTypeSelection = Read-Host "Enter 1-4>"
            if (($SqlDumpTypeSelection -ne "1") -and ($SqlDumpTypeSelection -ne "2") -And ($SqlDumpTypeSelection -ne "3") -And ($SqlDumpTypeSelection -ne "4" ))
            {
                Write-Host ""
                Write-Host "Please enter a valid type of memory dump!"
                Write-Host ""
                Start-Sleep -Milliseconds 300
            }
        }
        Write-Host ""
        switch ($SqlDumpTypeSelection)
        {
            "1" {$DumpType="0x0120";break}
            "2" {$DumpType="0x0128";break}
            "3" {$DumpType="0x8100";break}
            "4" {$DumpType="0x01100";break}
            default {"0x0120"; break}
        }
    }
    elseif ($ProductNumber -eq "2")  #SSAS dump
    {
        #ask what type of SSAS memory dump
        while(($SSASDumpTypeSelection  -ne "1") -and ($SSASDumpTypeSelection -ne "2"))
        {
            Write-Host "Which type of memory dump would you like to generate?" -ForegroundColor Yellow
            Write-Host "1) Mini-dump"
            Write-Host "2) Full dump  " -NoNewline; Write-Host "(Do Not Use on Production systems!)" -ForegroundColor Red
            Write-Host ""
            $SSASDumpTypeSelection = Read-Host "Enter 1-2>"
            if (($SSASDumpTypeSelection -ne "1") -and ($SSASDumpTypeSelection -ne "2"))
            {
                Write-Host ""
                Write-Host "Please enter a valid type of memory dump!"
                Write-Host ""
                Start-Sleep -Milliseconds 300
            }
        }
        Write-Host ""
        switch ($SSASDumpTypeSelection)
        {
            "1" {$DumpType="0x0";break}
            "2" {$DumpType="0x34";break}
            default {"0x0120"; break}
        }
    }
    elseif ($ProductNumber -eq "3" -or $ProductNumber -eq "4" -or $ProductNumber -eq "5")  #SSIS/SSRS/SQL Agent dump
    {
        #ask what type of SSIS memory dump
        while(($SSISDumpTypeSelection   -ne "1") -and ($SSISDumpTypeSelection  -ne "2"))
        {
            Write-Host "Which type of memory dump would you like to generate?" -ForegroundColor Yellow
            Write-Host "1) Mini-dump"
            Write-Host "2) Full dump"
            Write-Host ""
            $SSISDumpTypeSelection = Read-Host "Enter 1-2>"
            if (($SSISDumpTypeSelection  -ne "1") -and ($SSISDumpTypeSelection  -ne "2"))
            {
                Write-Host ""
                Write-Host "Please enter a valid type of memory dump!"
                Write-Host ""
                Start-Sleep -Milliseconds 300
            }
        }
        Write-Host ""
        switch ($SSISDumpTypeSelection)
        {
            "1" {$DumpType="0x0";break}
            "2" {$DumpType="0x34";break}
            default {"0x0120"; break}
        }
    }
    # Sqldumper.exe PID 0 0x0128 0 c:\temp
    #output folder
    while($OutputFolder -eq "" -or !(Test-Path -Path $OutputFolder))
    {
        Write-Host ""
        Write-Host "Where would your like the memory dump stored (output folder)?" -ForegroundColor Yellow
        $OutputFolder = Read-Host "Enter an output folder with no quotes (e.g. C:\MyTempFolder or C:\My Folder)"
        if ($OutputFolder -eq "" -or !(Test-Path -Path $OutputFolder))
        {
            Write-Host "'" $OutputFolder "' is not a valid folder. Please, enter a valid folder location" -ForegroundColor Yellow
        }
    }
    #find the highest version of SQLDumper.exe on the machine
    $NumFolder = dir "c:\Program Files\microsoft sql server\1*" | Select-Object @{name = "DirNameInt"; expression={[int]($_.Name)}}, Name, Mode | Where-Object Mode -Match "da*" | Sort-Object DirNameInt -Descending
    for($j=0;($j -lt $NumFolder.Count); $j++)
    {
        $SQLNumfolder = $NumFolder.DirNameInt[$j]   #start with the highest value from sorted folder names - latest version of dumper
        $SQLDumperDir = "c:\Program Files\microsoft sql server\"+$SQLNumfolder.ToString()+"\Shared\"
        $TestPathDumperDir = $SQLDumperDir+"sqldumper.exe"
    
        $TestPathResult = Test-Path -Path $SQLDumperDir
    
        if ($TestPathResult -eq $true)
        {
            break;
        }
    }
    #build the SQLDumper.exe command e.g. (Sqldumper.exe 1096 0 0x0128 0 c:\temp\)
    $cmd = "$([char]34)"+$SQLDumperDir + "sqldumper.exe$([char]34)"
    $arglist = $SqlPidInt.ToString() + " 0 " +$DumpType +" 0 $([char]34)" + $OutputFolder + "$([char]34)"
    Write-Host "Command for dump generation: ", $cmd, $arglist -ForegroundColor Green
    #do-we-want-multiple-dumps section
    Write-Host ""
    Write-Host "This utility can generate multiple memory dumps, at a certain interval"
    Write-Host "Would you like to collect multiple memory dumps?" -ForegroundColor Yellow
    #validate Y/N input
    while (($YesNo -ne "y") -and ($YesNo -ne "n"))
    {
        $YesNo = Read-Host "Enter Y or N>"
        if (($YesNo -eq "y") -or ($YesNo -eq "n"))
        {
            break
        }
        else
        {
            Write-Host "Not a valid 'Y' or 'N' response"
        }
    }
    #get input on how many dumps and at what interval
    if ($YesNo -eq "y")
    {
        while(($isIntValDcnt -eq $false))
        {
            Write-Host "How many dumps would you like to generate for this SQL Server?" -ForegroundColor Yellow
            $DumpCountStr = Read-Host ">"
    
            try
            {
                $DumpCountInt = [convert]::ToInt32($DumpCountStr)
                $isIntValDcnt = $true
            }
            catch [FormatException]
             {
                 Write-Host "The value entered for dump count '",$DumpCountStr,"' is not an integer"
             }
        }
        while(($isIntValDelay -eq $false))
          {
              Write-Host "How frequently (in seconds) would you like to generate the memory dumps?" -ForegroundColor Yellow
              $DelayIntervalStr = Read-Host ">"
    
              try{
                      $DelayIntervalInt = [convert]::ToInt32($DelayIntervalStr)
                      $isIntValDelay = $true
                  }
              catch [FormatException]
                  {
                       Write-Host "The value entered for frequency (in seconds)'",$DelayIntervalStr,"' is not an integer"
                  }
          }
        Write-Host "Generating $DumpCountInt memory dumps at a $DelayIntervalStr-second interval" -ForegroundColor Green
        #loop to generate multiple dumps
        $cntr = 0
        while($true)
        {
            Start-Process -FilePath $cmd -Wait -Verb runAs -ArgumentList $arglist
            $cntr++
            Write-Host "Generated $cntr memory dump(s)." -ForegroundColor Green
            if ($cntr -ge $DumpCountInt)
              {
                  break
              }
            Start-Sleep -S $DelayIntervalInt
        }
        #print what files exist in the output folder
        Write-Host ""
        Write-Host "Here are all the memory dumps in the output folder '$OutputFolder'" -ForegroundColor Green
        $MemoryDumps = $OutputFolder + "\SQLDmpr*"
        Get-ChildItem -Path $MemoryDumps
        Write-Host ""
        Write-Host "Process complete"
    }
    else #produce just a single dump
    {
        Start-Process -FilePath $cmd -Wait -Verb runAs -ArgumentList $arglist
        #print what files exist in the output folder
        Write-Host ""
        Write-Host "Here are all the memory dumps in the output folder '$OutputFolder'" -ForegroundColor Green
        $MemoryDumps = $OutputFolder + "\SQLDmpr*"
        Get-ChildItem -Path $MemoryDumps
        Write-Host ""
        Write-Host "Process complete"
    }
    Write-Host "For errors and completion status, review SQLDUMPER_ERRORLOG.log created by SQLDumper.exe in the output folder '$OutputFolder'. `Or if SQLDumper.exe failed look in the folder from which you are running this script"
    
  • Führen Sie es über die Eingabeaufforderung mit dem folgenden Befehl als Administrator aus:

    Powershell.exe -File SQLDumpHelper.ps1
    
  • Oder führen Sie es über Windows PowerShell Konsole aus, und führen Sie es mithilfe des folgenden Befehls als Administrator aus:

    .\SQLDumpHelper.ps1
    

Hinweis

Wenn Sie noch nie auf Ihrem System PowerShell-Skripts ausgeführt haben, wird möglicherweise die Fehlermeldung angezeigt: Datei ...SQLDumpHelper.ps1 kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist."

Sie müssen die Möglichkeit aktivieren, sie mit den folgenden Schritten ausführen zu können:

  1. Starten Windows PowerShell Konsole mit der Option "Als Administrator ausführen". Nur Mitglieder der Gruppe "Administratoren" auf dem Computer können die Ausführungsrichtlinie ändern.

  2. Aktivieren Sie die Ausführung von nicht signierten Skripts mit dem folgenden Befehl:

    Set-ExecutionPolicy RemoteSigned
    

    Hinweis

    Auf diese Weise können Sie nicht signierte Skripts ausführen, die Sie auf Ihrem lokalen Computer erstellen, und signierte Skripts aus dem Internet ausführen.