Sqldumper.exe ツールを使用して、SQL Server でダンプ ファイルを生成します

この記事では、SQL Server に含まれるSqldumper.exe ツールの一般的なガイドラインについて説明します。 このツールは、さまざまな種類のダンプ ファイルを生成するために使用されます。

元の製品バージョン: SQL Server 2019、SQL Server 2017、SQL Server 2016、SQL Server 2014、SQL Server 2012、SQL Server 2008、SQL Server 2005
元の KB 番号: 917825

まとめ

Sqldumper.exe ツールは Microsoft SQL Server に含まれています。 SQL Server と関連プロセスのメモリ ダンプ ファイルが、デバッグ用に生成されます。 この記事では、Sqldumper.exeを使用して Watson エラー報告またはデバッグ タスクのダンプ ファイルを生成する方法について説明します。

この記事では、ダンプ ファイルを生成する他の 2 つの方法についても説明します。

  • 添付の PowerShell スクリプト は、SQLDumper.exe のコマンド ライン オプションを自動化します。
  • DBCC STACKDUMP Transact-SQL (T-SQL) コマンドを使用して、SQL Server でダンプ ファイルを生成できます。

Sqldumper.exeを手動で実行する方法

SQL Server が最初にツールをインストールしたフォルダーから、Sqldumper.exe ツールを実行します。

既定では、Sqldumper.exeのインストール パスは <SQLServerInstall Drive>:\Program Files\Microsoft SQL Server\90\Shared\SQLDumper.exe です。 <SQLServerInstall Drive> は、SQL Server をインストールしたドライブのプレースホルダーであることに注意してください。

Sqldumper.exe ツールを使用してダンプ ファイルを生成するには、次の手順に従います。

  1. >SQLServerInstall Drive:\Program Files\Microsoft SQL Server\number\Shared フォルダーを開きます。

    このフォルダー パスでは、 <number> は次のいずれかのバージョンのプレースホルダーです。

    • SQL Server 2019 用の 150
    • SQL Server 2017 の場合は 140
    • SQL Server 2016 の場合は 130
    • SQL Server 2014 用は 120
    • SQL Server 2012 の 110
    • SQL Server 2008 の 100
    • SQL Server 2005 用は 90
  2. Dbghelp.dll ファイルがこのフォルダーにあることを確認してください。

  3. スタート>ファイル名を指定して実行 を選択し、「cmd」と入力して、OK を選択します。

  4. コマンド プロンプトで、次のコマンドを入力して Enter キーを押します。

    cd <SQLServerInstall Drive>:\Program Files\Microsoft SQL Server\<number>\Shared
    

    注

    このフォルダー パスでは、<number> は、前述のように SQL Server のバージョンに応じて変わるのと同じプレースホルダーです。

  5. 特定の種類のダンプ ファイルを生成するには、コマンド プロンプトで対応するコマンドを入力し、Enter キーを押します:

    • フル ダンプ ファイル

      Sqldumper.exe <ProcessID> 0 0x01100
      
    • ミニダンプ ファイル:

      Sqldumper.exe <ProcessID> 0 0x0120
      
    • 間接的に参照されるメモリを含むミニ ダンプ ファイル (これは推奨されるオプションであり、メモリ ダンプ ファイルを自動生成するときに SQL Server によって既定で使用されます)。

      Sqldumper.exe <ProcessID> 0 0x0128
      
    • フィルター処理されたダンプ ファイル:

      Sqldumper.exe <ProcessID> 0 0x8100
      

    注

    <ProcessID> は、ダンプ ファイルを生成する Windows アプリケーションのプロセス識別子のプレースホルダーです。

Sqldumper.exe正常に実行されると、ツールがインストールされているフォルダーにダンプ ファイルが生成されます。

Sqldumper.exe が生成するダンプ ファイルには、SQLDmpr<xxxx>.mdmp のようなファイル名パターンがあります。

このパターンでは、<xxxx> は、同じフォルダー内にある類似したファイル名の他のファイルに基づいて決まる連番です。 指定したパターンに一致するファイルがフォルダー内にある場合は、作成日時を比較して目的のファイルを見つけることを検討してください。

Microsoft Windows アプリケーション プロセス識別子を取得する方法

Sqldumper.exe ツールを使用してダンプ ファイルを生成するには、ダンプ ファイルを生成する Windows アプリケーションのプロセス識別子が必要です。 プロセス識別子を取得する方法を次に示します。

  1. Ctrl + Alt + Delete キーを押し、タスク マネージャー を選択します。
  2. [ Windows タスク マネージャー ] ダイアログ ボックスで、[ プロセス ] タブを選択します。
  3. View メニューで 列の選択 を選択します。
  4. [列の選択] ダイアログ ボックスで、[PID (プロセス識別子)] チェック ボックスをオンにし、[OK] を選択します。
  5. ダンプ ファイルを生成する Windows アプリケーションのプロセス識別子をメモします。 SQL Server アプリケーションの場合は、 Sqlservr.exe プロセスのプロセス識別子をメモします。
  6. タスク マネージャー を閉じてください。

または、SQL Server エラー ログ ファイルを使用して、コンピューター上で実行されている SQL Server アプリケーションのプロセス識別子を取得します。 SQL Server エラー ログ ファイルの一部は、次の例のようになります。

2021-09-15 11:50:32.690 Server       Microsoft SQL Server 2019 (RTM-CU12) (KB5004524) - 15.0.4153.1 (X64)
    Jul 19 2021 15:37:34
    Copyright (C) 2019 Microsoft Corporation
    Enterprise Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 19043: ) (Hypervisor)
2021-09-15 11:50:32.690 Server       UTC adjustment: -5:00
2021-09-15 11:50:32.690 Server       (c) Microsoft Corporation.
2021-09-15 11:50:32.690 Server       All rights reserved.
2021-09-15 11:50:32.690 Server       Server process ID is 7028.

Server process IDの後に表示される番号は、Sqlservr.exe プロセスのプロセス識別子です。

メモリ ダンプ ファイルの出力パス

SQLDumper.exeは、例外、アサート、応答しないスケジューラなどの特定の問題を解決するためにメモリ ダンプが必要な場合に、主に SQL Server プロセスのメモリ ダンプ ファイルを生成します。 このような場合、SQL Server はSQLDumper.exeを呼び出して、そのプロセスのメモリ ダンプ ファイルを生成します。 既定では、メモリ ダンプ ファイルは SQL インスタンス MSSQL\LOG\ ディレクトリに格納されます。

既定のパスを変更する方法

たとえば、ダンプ ファイルのサイズが大きすぎる場合は、次の手順に従ってパスを変更できます。

  1. [SQL Server 構成マネージャー] を開きます。
  2. SQL Server Servicesで、調査中の SQL Server インスタンスを見つけます。
  3. そのエントリを右クリックし、プロパティ を選択して、[詳細設定] タブに移動します。
  4. そのダンプ ディレクトリを目的のパスに変更し、 OK を選択します。
  5. 新しい設定を有効にするには、可能であれば SQL Server を再起動してください。

Sqldumper.exe ツールを手動で使用して任意の Windows アプリケーションのダンプ ファイルを生成する場合、ダンプ ファイルは、Windows アプリケーションが現在使用しているメモリと同じ大きさになる可能性があります。 Sqldumper.exeがダンプ ファイルを書き込むドライブに十分なディスク領域があることを確認します。

コマンドでカスタム出力フォルダーを指定する

Sqldumper.exe ツールがダンプ ファイルを書き込むディレクトリを指定できます。 Sqldumper.exeを実行する前に、ディレクトリが既に存在している必要があります。 そうでない場合、Sqldumper.exe の実行は失敗します。 ダンプ ファイルの場所として UNC(ユニバーサル ネーミング規則)パスを使用しないでください。 次の手順では、ミニ ダンプ ファイルの場所を指定する方法の例を示します。

  1. スタート>ファイル名を指定して実行 を選択し、「cmd」と入力し、OK を選択します。

  2. コマンド プロンプトで、次のコマンドを入力して Enter キーを押します。

    cd <SQLServerInstall Drive>:\Program Files\Microsoft SQL Server\<number>\Shared
    
  3. コマンド プロンプトで、次のコマンドを入力して Enter キーを押します。

    Sqldumper.exe ProcessID 0 0x0128 0 <MdumpPath>
    

    注

    <MdumpPath> は、Sqldumper.exe ツールでダンプ ファイルを書き込む場所として指定するディレクトリのプレースホルダーです。 既定では、ファイルは現在のフォルダーに書き込まれます。

完全ダンプ ファイルまたはフィルター処理されたダンプ ファイルを生成するように指定した場合、Sqldumper.exe によるダンプ ファイルの生成には数分かかる場合があります。 所要時間は、次の変数によって異なります。

  • 現在 Sqlservr.exe が使用しているメモリの量。
  • ツールがダンプ ファイルの保存に使用するドライブの書き込み速度

この間、Sqldumper.exe ツールはコマンドを処理しません。 サーバーが応答を停止していることがわかります。 さらに、クラスターのフェールオーバーが発生する可能性があります。

アクセス許可の要件

Sqldumper.exeを実行するには、次のいずれかの方法を使用して Windows にサインインする必要があります。

  • コンピューター上の管理者のグループのメンバーであるアカウントを使用します。
  • SQL Server サービスが実行されているのと同じユーザー アカウントを使用します。

Sqldumper.exe ツールがリモート デスクトップまたはターミナル サービスを介して正常に動作するには、コンソール モードでリモート デスクトップまたはターミナル サービスを起動する必要があります。 たとえば、コンソール モードでリモート デスクトップを起動するには、スタート>ファイル名を指定して実行 を選択し、「mstsc /console」と入力して、OK を選択します。 ターゲット サーバーが Windows 2000 を実行している場合、/console オプションはサイレントに無視されます。 リモート デスクトップ経由でサーバーに接続できますが、コンソール セッションは使用されません。

Sqldumper.exeの実行後に現在のフォルダーにダンプ ファイルが生成されていない場合は、ツールによって生成されたコマンド ライン出力を調べて、障害の原因の可能性を特定してください。 この情報は、現在のディレクトリの Sqldumper_errorlog.log ファイルにも記録されます。 次の 2 つのエラー メッセージとその原因を示します。

メッセージ 原因
"OpenProcess failed 0x57 - パラメーターが正しくありません" Sqldumper.exe ユーティリティに無効なプロセス ID が渡されました。
スレッド ID の値が無効です - <無効なパラメーター> パラメーター エラー 無効なパラメーターが Sqldumper.exe ユーティリティに渡されました。

次のいずれかのエラー メッセージが生成された場合は、このメッセージを無視しても問題ありません。

  • ミニダンプ 6 中に発生した不明なコールバック タイプ
  • minidump 7 の処理中に不明なコールバックの種類です

ダンプ生成の影響

ユーザー モード プロセスのダンプ ファイルが要求されると (この記事で説明するように、スコープ外のオペレーティング システム カーネル ダンプとは対照的に)、ターゲット プロセス (ここではSQLServer.exe) は、ダンプ コンテンツをそのファイル ターゲットにシリアル化するためにかかる期間、一時停止されます。

フリーズとは、Windows クラスタリングの IsAlive and Looks Alive の実装などのリソース ポーリング メカニズムを含め、プロセスがユーザー要求や内部操作を実行できないことを意味します (その状況の処理方法の詳細については、「クラスター フェールオーバーでのメモリ ダンプ」セクションを参照してください)。 ウォールクロック時間に依存するタイムアウトも、フリーズのために超過する可能性があります。

前のステートメントに基づいて、凍結の期間はここで重要な要因であり、次の点によって左右されます。

  • 選択したダンプの種類。
  • メモリ内の SQL Server プロセスのサイズは、既定のパラメーターで実行されている 1 つのアクティブなインスタンスの場合、多くはサーバーの合計物理 RAMに近くなります。
  • ダンプのターゲットとして使用されるディスクのパフォーマンス。

さらに、ディスク上のダンプ ファイルのサイズも考慮する必要があります。特に、複数のダンプが発生する可能性がある場合や、大容量の既定以外のダンプの種類を選択する場合は重要です。 Dump の種類を確認して、想定される内容を確認してください。 既定では、一部のダンプ方法では、SQL Server インスタンスの \Log フォルダーにダンプが作成されます。既定の単純な構成では、このフォルダーは SQL Server のシステム ディスクであると同時に、データ + ログ ディスク上にもあります。 そのディスクが飽和状態になると、SQL Server やシステムの可用性に重大な影響を与えます。

クラスター化システムへの影響を管理する

このプロセスは、ダンプの生成中に一時的に中断されます。 これは、SQL Server サービスの可用性に影響を与え、Always On コンテキスト (フェールオーバー クラスター インスタンスと可用性グループの両方) でリソースのフェールオーバーをトリガーする場合があります。 異なるプロセスのダンプ生成は、リソースに異なる影響を与えます。 ダンプ生成の影響 と ダンプの種類 のセクションをよくお読みください。

フェールオーバー クラスター化されたインスタンスまたは SQL Server の可用性グループ (AG) インスタンスで SQL Server ダンプをキャプチャすると、ダンプの完了に時間がかかりすぎる場合、クラスター化された SQL Server または AG が別のノードにフェールオーバーする可能性があります。 これは、大量の RAM を使用するシステムや、フィルター処理されたメモリ ダンプまたはフル メモリ ダンプを生成する場合に特に問題になる可能性があります。 フェールオーバーを防ぐには、ダンプ ファイルをキャプチャする前に、次の設定を使用してください。 変更は、ダンプ ファイルを取得した後に元に戻すことができます。

  • フェールオーバー クラスター化インスタンス (FCI) の場合:
    • クラスター管理者で SQL Server リソースを右クリックし、ポリシー タブで リソースが失敗した場合は再起動しない を選択します。
    • Properties タブで、HealthCheck Timeout を大きくします。 たとえば、プロパティ値を 180 秒以上に設定します。 このタイムアウトに達すると、ポリシー リソースが失敗しても再起動しない は無視され、リソースが再起動されます。
    • Properties タブで、FailureConditionLevel 値を 0 に変更します。
  • AG の場合は、次のすべての設定を適用してください。
    • すべてのレプリカでセッション タイムアウトを増やしてください (たとえば、120 秒)。 SQL Server Management Studio (SSMS) で、構成するレプリカを右クリックし、 Properties を選択します。 Session timeout (seconds) フィールドを 120 秒に変更します。 詳細については、「 可用性レプリカ (SQL Server) のセッション タイムアウト期間を変更する」を参照してください。
    • すべてのレプリカの自動フェールオーバーを手動フェールオーバーに変更します。 SSMS でレプリカを右クリックし、プロパティ を選択して、プロパティ タブで、すべてのレプリカの 自動フェールオーバー を手動フェールオーバーに変更します。詳細については、「可用性レプリカ (SQL Server) のフェールオーバー モードを変更する」を参照してください。
    • LeaseTimeout を 60,000 ms (60 秒) に増やし、HealthCheckTimeout を 90,000 ミリ秒 (90 秒) に変更します。 クラスター管理者で AG リソースを右クリックし、プロパティを選択して、プロパティ タブに切り替え、両方の設定を変更します。 詳細については、「 HealthCheckTimeout プロパティ設定の構成」を参照してください。

SQL Server への影響を軽減するための製品の機能強化

ダンプ ファイルのサイズやメモリ ダンプの生成時間を短縮するために、SQL Server の最新バージョンに 4 つの主要な機能強化が追加されました。

ビットマップのフィルタリング機構

SQL Server によってビットマップが割り当てられ、フィルター処理されたダンプから除外するメモリ ページをそのビットマップで追跡します。 Sqldumper.exe はビットマップを読み取り、他のメモリ マネージャー メタデータを読み取ることなくページをフィルターで除外します。 ビットマップがそれぞれ有効または無効になっている場合、SQL Server エラー ログに次のメッセージが表示されます。

Page exclusion bitmap is enabled. および Page exclusion bitmap is disabled.

  • SQL Server 2016

    SQL Server 2016 SP2 CU13 以降では、ビットマップ フィルター処理は既定で有効になっています。

  • SQL Server 2017

    • これは、RTM から CU15 までは使用できません。
    • SQL Server 2017 CU16 では、T8089 によるビットマップ フィルター処理を有効にし、T8089 をオフにすることで無効にすることができます。
    • SQL Server 2017 CU20 以降では、ビットマップ フィルター処理は既定で有効になっています。 トレース フラグ T8089 は適用されなくなり、オンにすると無視されます。 ビットマップ フィルタリングは T8095 を介して無効にすることができます。
  • SQL Server 2019

    これは、SQL Server 2019 RTM では既定で有効になっています。 T8095 を使用して無効にすることができます。

同じ問題での繰り返しダンプの除去

同じ問題で繰り返されるメモリ ダンプは排除されます。 スタック署名を使用すると、SQL エンジンは例外が既に発生しているかどうかを把握し、既に発生している場合は新しいメモリ ダンプを生成しません。 これは、アクセス違反、スタック オーバーフロー、アサート、インデックス破損の例外に適用されます。 これにより、メモリ ダンプで使用されるディスク領域が大幅に削減され、ダンプを生成するためにプロセスが一時的にフリーズすることはありません。 これは SQL Server 2019 で追加されました。

エラーログで出力が短縮される

1 件のメモリ ダンプによって SQL Server エラー ログに生成されるコンテンツは、圧倒的な量になるだけでなく、すべての情報をエラー ログのテキスト形式にシリアル化するために必要な時間が原因で、メモリ ダンプを生成するプロセスを遅くすることもできます。 SQL Server 2019 では、ダンプ生成時のエラー ログに格納されているコンテンツが大幅に削減され、次のようになります。

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.

以前の SQL Server では、たとえば、ユーザーによって手動ダンプがトリガーされたときに、各セッションまたはスレッドの情報が出力されていました。

メモリ ダンプの並列圧縮

ダンプをより高速に生成し、サイズを小さくするために、圧縮メモリ ダンプ機能は、 SQL Server 2022 CU8 および SQL Server 2019 CU23 で導入されました。 アクティブ化すると、Sqldumper.exeは複数のスレッドを作成してプロセスのメモリを同時に読み取り、圧縮してからダンプ ファイルに保存します。 このマルチスレッドの並列圧縮により、ファイル サイズが削減され、完全ダンプとフィルター処理されたダンプで使用される場合のダンプ プロセスが高速化されます。

トレース フラグ 2610 を有効にすると、圧縮メモリ ダンプを有効にできます。

DBCC TRACEON (2610,-1)
GO
DBCC STACKDUMP with FILTERED_DUMP
GO
DBCC TRACEOFF (2610,-1)

または、sql Server インスタンスにスタートアップ パラメーターとして -T2610 を追加して、常に圧縮メモリ ダンプを作成することもできます。

Sqldumper.exeを手動で実行する場合は、 -zdmp パラメーターを使用して圧縮メモリ ダンプをキャプチャできます。 例えば:

Sqldumper.exe <ProcessID> 0 0x8100 0 d:\temp -zdmp

-cpu:X パラメーターを使用して、圧縮ダンプの作成に Sqldumper.exe が使用できるコア数を制限することもできます。ここで、X は CPU の数です。 このパラメーターは、コマンド ラインからSqldumper.exeを手動で実行する場合にのみ使用できます。

Sqldumper.exe <ProcessID> 0 0x8100 0 d:\temp -zdmp -cpu:8

メモリ ダンプの作成を妨げるか遅延する要因

遅延を引き起こしたり、メモリ ダンプの作成を妨げる要因は次のとおりです。

  • メモリ ダンプが書き込まれる IO パスのパフォーマンスが低いです。 このような場合は、ディスク I/O パフォーマンスを調査して解決することが、次の論理的な手順です。
  • ウイルス対策またはその他の監視ソフトウェアがSQLDumper.exeに干渉しています。 場合によっては、サードパーティ製ソフトウェアが ReadProcessMemory 関数を迂回する場合があります。 これにより、ダンプ期間が大幅に長くなる可能性があります。 これらの問題のほとんどを解決するには、干渉するソフトウェアを無効にするか、SQLDumper.exe を除外リストに追加してください。

ダンプの種類

次のメソッドを使用して、3 種類の異なるダンプ(mini ダンプ、フル ダンプ、フィルター処理されたダンプ)を生成できます。

参照メモリを含むミニ ダンプ

この種類のメモリ ダンプは、プロセスのすべてのアクティブなスレッド ("スレッド スタック") のスナップショットであり、スレッド スタックによって参照されるメモリの限られた抽出と、その他の主要なプロセスまたはスレッド データも含みます。 通常、サイズは数メガバイトであり、生成が高速です (1 秒未満から数秒)。 (何百もの CPU によって間接的に SQL Server プロセス内で膨大な数のスレッドが駆動される) さらに大規模なサーバー システムでも、20 ~ 30 MB を超えることはめったにありません。ミニ ダンプのサイズは、SQL Server プロセスのサイズが大きくなっても増加しません。 このダンプの種類は、例外、スケジューラの問題、ラッチの問題、データベースの破損、アサートの発生時にメモリ ダンプを自動的に生成するときに SQL Server で使用される既定の種類です。

注

SQL Server は、組み込みのインストルメンテーションの一部として、特定の状況で自動化された "診断ミニ ダンプ" を生成します。 したがって、この操作は、SQL Server が必要に応じて自動的にトリガーできるほど安全であると見なされます。

完全ダンプ

完全メモリ ダンプは、アクティブなターゲット プロセス領域の完全なコピーです。 そのため、すべてのスレッド状態、すべてのプロセスに割り当てられたメモリ、読み込まれたすべてのモジュールが含まれます。 したがって、完全ダンプのサイズは、SQL Server プロセスとほぼ同じです。これは、総システム RAM とほぼ同じ大きさになる可能性があります。 1 つの SQL Server インスタンス専用の大規模なサーバーでは、それは数百ギガバイト以上の 1 つのファイルを意味する場合があります。 言うまでもなく、このようなファイルは生成に長い時間がかかるので、長時間のフリーズを引き起こします。 ダンプのファイル ターゲットのディスク パフォーマンスは、フリーズ時間に大きく影響します。 この種類のダンプは、以下で説明するように、現在では SQL Server ではほとんど使用されません。

フィルタリングされたダンプ

SQL Server を実行している一般的なサーバーの RAM サイズが着実に増加するにつれて、完全ダンプは扱いにくくなります。 したがって、フィルター処理されたダンプが実装されています。 フィルター処理されたダンプは完全ダンプのサブセットであり、SQL Server メモリの大きな領域がその場で除外され、ディスクに書き込まれません。 通常、除外されたメモリはトラブルシューティングに付加価値を提供しません。 たとえば、データ/インデックス ページや、Hekaton データ ページやログ プール メモリなどの一部の内部キャッシュがあります。 このフィルター処理されたダンプの結果、完全ダンプよりもファイルが小さくなりますが、ダンプは引き続きほぼすべての有用性を保持します。 フィルター処理されたダンプは、ミニ ダンプでは十分でない大多数の状況で、完全ダンプに取って代わり、優先されるオプションになりました。 完全ダンプと比べて縮小率は変動する場合がありますが、それでもかなり大きなファイルであり、多くの場合、SQL Server プロセス サイズの 30 ~ 60% です。 したがって、最悪の場合は完全ダンプと同等のサイズを想定しておくと、十分な安全マージンを確保できます。 フィルター処理されたダンプは、すべてのケースで完全なダンプよりも必ずしも高速に生成できるとは限りません。これは、回避された IO の数に関連する利益がフィルター ロジックの実装に必要な時間を超えているかどうかの問題です (ディスク速度と CPU/RAM 速度がそれに影響します)。

次のクエリを使用して、フィルター処理されたダンプ サイズの大まかな見積もりを取得できます。 ほとんどのデータページまたはインデックスページはダンプから除外されますが、排他的にラッチされ、変更中のページは省略されません。

SELECT SUM(pages_kb)
FROM sys.dm_os_memory_clerks
WHERE type != 'MEMORYCLERK_SQLBUFFERPOOL'

Sqldumper.exeを使用して、任意の Microsoft Windows アプリケーションの必要に応じてダンプ ファイルを生成できるため、フィルター処理されたダンプ オプションの使用を検討できます。 ただし、フィルター処理されたダンプ ファイルは、SQL Server のコンテキストでのみ適用可能で意味があります。 ミニダンプ、完全ダンプ ファイル、または SQL Server 以外のアプリケーションのダンプを正常に生成できます。

SQL Server プロセスは、Sqldumper.exe ツールを内部的に呼び出して、プロセスで例外が発生したときにダンプ ファイルを生成します。 SQL Server は Sqldumper.exe にパラメーターを渡します。 トレース フラグを使用して、例外またはアサーションが発生したときに SQL Server が既定でツールに渡すパラメーターを変更できます。 これらのトレース フラグの範囲は 2540 から 2559 です。 これらのトレース フラグのいずれかを使用して、SQLDumper.exe が生成する既定のダンプの種類を変更できます (既定では、参照されるメモリを持つミニ ダンプです)。 例えば:

  • トレース フラグ 2551: フィルター処理されたメモリ ダンプを生成します。
  • トレース フラグ 2544: 完全メモリ ダンプを生成します。
  • トレース フラグ 8026: SQL Server では、ダンプを 1 回生成すると、その後ダンプ トリガーはクリアされます。

2 つ以上のトレース フラグがアクティブな場合は、最大メモリ ダンプを示すオプションが使用されます。 たとえば、トレース フラグ 2551 と 2544 を使用すると、SQL Server によって完全なメモリ ダンプが作成されます。

クラスター のフェールオーバー時にメモリ ダンプを生成する

クラスターのフェールオーバー シナリオでは、SQL Server リソース DLL は、トラブルシューティングに役立てるために、フェールオーバーが発生する前にダンプ ファイルを取得できます。 SQL Server リソース DLL で SQL Server リソースで障害が発生したと判断した場合、SQL Server リソース DLL では Sqldumper.exe ユーティリティを使用して、SQL Server プロセスのダンプ ファイルを取得します。 Sqldumper.exe ツールでダンプ ファイルが正常に生成されるようにするには、次の 3 つのプロパティを前提条件として設定する必要があります。

  • SqlDumperDumpTimeOut

    ユーザー指定のタイムアウト。リソース DLL は、リソース DLL が SQL Server サービスを停止する前に、ダンプ ファイルの作成が完了するまで待機します。

  • SqlDumperDumpPath

    Sqldumper.exe ツールによってダンプ ファイルが生成される場所。

  • SqlDumperDumpFlags

    Sqldumper.exe が使用するフラグ。

いずれかのプロパティが設定されていない場合、Sqldumper.exeはダンプ ファイルを生成できません。 リソースがオンラインになると、イベント ログとクラスター ログの両方に警告メッセージが記録されます。

SQL Server 2012 以降のバージョンでの SQLDumper のクラスター構成

ALTER SERVER CONFIGURATION (T-SQL) コマンドを使用して、これらのプロパティを変更できます。 例えば:

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;

または、PowerShell スクリプトを使用することもできます。 たとえば、名前付きインスタンス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

設定が適用されているかどうかを確認するには、次の PowerShell コマンドを実行します。

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

SQL Server 2008/2008 R2 または Windows 2012 以前での SQLDumper のクラスター構成

cluster resource コマンドを使用してクラスター フェールオーバーのSqldumper.exe ユーティリティプロパティを設定するには、次の手順に従います。

  1. スタート>ファイル名を指定して実行 を選択し、「cmd」と入力し、OK を選択します。
  2. プロパティごとに、コマンド プロンプトで対応するコマンドを入力し、 Enter キーを押します:
    • SqlDumperDumpFlags プロパティ

      特定のダンプ ファイルの SqlDumperDumpFlags プロパティを設定するには、コマンド プロンプトで対応するコマンドを入力し、Enter キーを押します:

      • すべてのスレッドの完全ダンプ ファイル

        • 既定のインスタンス

          cluster resource "SQL Server" /priv SqlDumperDumpFlags = 0x01100
          
        • 名前付きインスタンス

          cluster resource "SQL Server (INSTANCE1)" /priv SqlDumperDumpFlags = 0x01100
          
      • すべてのスレッド ミニダンプ ファイル

        • 既定のインスタンス

          cluster resource "SQL Server" /priv SqlDumperDumpFlags = 0x0120
          
        • 名前付きインスタンス

          cluster resource "SQL Server (INSTANCE1)" /priv SqlDumperDumpFlags = 0x0120
          
      • すべてのスレッドダンプファイルをフィルターしました

        • 既定のインスタンス

          cluster resource "SQL Server" /priv SqlDumperDumpFlags = 0x8100
          
        • 名前付きインスタンス

          cluster resource "SQL Server  (INSTANCE1)" /priv SqlDumperDumpFlags = 0x8100
          
    • SqlDumperDumpPath プロパティ

      cluster resource "SQL Server" /priv SqlDumperDumpPath = <DirectoryPath>
      

      注

      <DirectoryPath> は、ダンプ ファイルが生成されるディレクトリのプレースホルダーであり、引用符 (" ") で指定する必要があります。

    • SqlDumperDumpTimeOut プロパティ

      cluster resource "SQL Server" /priv SqlDumperDumpTimeOut = <Timeout>
      

      注

      <Timeout> は、タイムアウト (ミリ秒単位) のプレースホルダーです。

ツールが SQL Server プロセスのダンプ ファイルを生成するのにかかる時間は、コンピューターの構成によって異なります。 メモリの量が多いコンピューターの場合、時間はかなりのものになる可能性があります。 プロセスに必要な時間を見積もるには、Sqldumper.exe ツールを使用してダンプ ファイルを手動で生成します。 SqlDumperDumpTimeOut プロパティの有効な値は、10,000 ms から MAXDWORD.MAXDWORD です。MAXDWORD.MAXDWORD は、DWORD データ型 (4294967295) の範囲内の最大値を表します。

設定が有効になっていることを確認するには、次のコマンドを実行します。

cluster resource "SQL Server" /priv

クラスター フェールオーバーのSqldumper.exeプロパティを削除する

クラスター フェールオーバーのSqldumper.exe ツールのプロパティを削除するには、次の手順に従います。

  1. スタート>ファイル名を指定して実行 を選択し、「cmd」と入力し、OK を選択します。

  2. 特定のプロパティについては、コマンド プロンプトで対応するコマンドを入力し、 Enter キーを押します。

    • SqlDumperDumpFlags プロパティ

      • 既定のインスタンス

          cluster resource "SQL Server" /priv:SqlDumperDumpFlags /usedefault
        
      • 名前付きインスタンス

          cluster resource "SQL Server (INSTANCE1)" /priv:SqlDumperDumpFlags /usedefault
        
    • SqlDumperDumpPath プロパティ

      • 既定のインスタンス

        cluster resource "SQL Server" /priv:SqlDumperDumpPath /usedefault
        
      • 名前付きインスタンス

        cluster resource "SQL Server (INSTANCE1)" /priv:SqlDumperDumpPath /usedefault
        
    • SqlDumperDumpTimeOut プロパティ

      • 既定のインスタンス

        cluster resource "SQL Server" /priv:SqlDumperDumpTimeOut /usedefault
        
      • 名前付きインスタンス

        cluster resource "SQL Server (INSTANCE1)" /priv:SqlDumperDumpTimeOut /usedefault
        

DBCC STACKDUMP の使用方法

DBCC STACKDUMP コマンドは、SQL Server インスタンスのインストールの LOG ディレクトリにメモリ ダンプを作成するのに役立ちます。 既定では、このコマンドは、サイズが制限され、SQL Server プロセスの状態を反映するのに十分なミニダンプをすべてのスレッドで作成します。 SQL Server クライアントで次のコマンドを実行します。

DBCC STACKDUMP

SQL Server 2019 における DBCC STACKDUMP の機能拡張については、「SQL Server 2019 で導入された DBCC STACKDUMP 機能の拡張」を参照してください。

このメソッドでフィルター処理されたダンプを作成できるようにするには、次のコマンドを使用してトレース フラグ 2551 を有効にします。

DBCC TRACEON(2551, -1)
GO
DBCC STACKDUMP

完全ダンプを作成するには、トレース フラグ 2544 を使用します。

ダンプ ファイルを取得した後は、コマンド DBCC TRACEOFF (<TraceNumber>, -1); を使用してトレース フラグを無効にして、SQL Server のそれ以降のすべての自己診断ミニダンプをより大きなダンプに誤ってアップグレードしないようにする必要があります。 このコマンドでは、 <TraceNumber> は、2551 や 2544 など、以前に有効にしたトレース フラグです。 例えば:

DBCC TRACEOFF(2551, -1)

どのトレース フラグがアクティブなままかわからない場合は、次のコマンドを実行してください。

DBCC TRACESTATUS(-1)

空の結果セットは、トレース フラグがアクティブでないことを示します。 逆に、2551 がまだアクティブな場合は、次のように表示されます。

TraceFlag 状態 グローバル セッション
2551 1 1 0

注

DBCC TRACEONによって有効になっているtraceflagは、サービスの再起動後にリセット (削除) されます。

SQL Server 2019 で導入された拡張 DBCC STACKDUMP 機能

SQL Server 2019 CU2 以降では、 DBCC STACKDUMP コマンドが拡張され、ミニ、フィルター処理、完全ダンプなど、さまざまな種類のダンプの生成がサポートされました。 このコマンドにより、トレース フラグを使用する必要がなくなります。 また、メモリ ダンプとともに生成される他のテキスト ファイル内のテキスト出力を制限することもできます。 これにより、SQLDumper.exe がメモリ ダンプを生成するのにかかる時間で、明確なパフォーマンス向上が見られる可能性があります。

DBCC STACKDUMP WITH MINI_DUMP | FILTERED_DUMP | FULL_DUMP [, TEXT_DUMP = LIMITED | DETAILED]

TEXT_DUMP = LIMITEDが既定のオプションです。 SQLDump000X.txt ファイルで詳細な出力を受け取る場合は、TEXT_DUMP = DETAILEDを使用できます。

.txt ファイル内の出力が制限されたフィルター処理されたダンプを生成するには、次のコマンドを実行します。

DBCC STACKDUMP WITH FILTERED_DUMP , TEXT_DUMP = LIMITED

PowerShell スクリプトを使用して SQLDumper でダンプ ファイルを生成する方法

  • 次のコードを PS1 ファイルとして保存してください(例: SQLDumpHelper.ps1):

    コードの詳細

    $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!"
        return
    }
    
    # what product would you like to generate a memory dump
    while ($true)
    {
        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 -in 1,2,3,4,5)
        {
            break
        }
        Write-Host "`nPlease enter a valid number from list above!`n"
        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 currently 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 ($true)
        {
            Write-Host "Please enter the PID for the desired SQL service from list above" -ForegroundColor Yellow
            $SqlPidStr = Read-Host ">"
    
            if( $SqlPidStr -in $SqlTaskList.PID)
            {
                $SqlPidInt = [int]$SqlPidStr
                break
            }
        }
    
        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($true)
        {
            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 -in 1,2,3,4)
            {
                break
            }
            Write-Host "`nPlease enter a valid type of memory dump!`n"
            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($true)
        {
            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 -in 1,2)
            {
                break
            }
            Write-Host "`nPlease enter a valid type of memory dump!`n"
            Start-Sleep -Milliseconds 300
        }
    
        Write-Host ""
    
        switch ($SSASDumpTypeSelection)
        {
            "1" {$DumpType="0x0";break}
            "2" {$DumpType="0x34";break}
            default {"0x0120"; break}
        }
    }
    elseif ($ProductNumber -in 3,4,5)  # SSIS/SSRS/SQL Agent dump
    {
        # ask what type of SSIS memory dump
        while($true)
        {
            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 -in 1,2)
            {
                break
            }
            Write-Host "`nPlease enter a valid type of memory dump!`n"
            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
        }
    }
    
    # strip the last character of the Output folder if it is a backslash "\". Else Sqldumper.exe will fail
    if ($OutputFolder.Substring($OutputFolder.Length-1) -eq "\")
    {
        $OutputFolder = $OutputFolder.Substring(0, $OutputFolder.Length-1)
        Write-Host "Stripped the last '\' from output folder name. Now folder name is  $OutputFolder"
    }
    
    # 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"
    
        if (Test-Path -Path $SQLDumperDir)
        {
            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 (2 or more)?" -ForegroundColor Yellow
    
    # validate Y/N input
    while ($true)
    {
        $YesNo = Read-Host "Enter Y or N>"
    
        if ($YesNo -in "y","n")
        {
            break
        }
        Write-Host "Not a valid 'Y' or 'N' response"
    }
    
    # get input on how many dumps and at what interval
    if ($YesNo -eq "y")
    {
        [int]$DumpCountInt=0
        while (1 -ge $DumpCountInt)
        {
            Write-Host "How many dumps would you like to generate for this $ProductStr ?" -ForegroundColor Yellow
            $DumpCountStr = Read-Host ">"
    
            if ([int]::TryParse($DumpCountStr, [ref]$DumpCountInt) -and $DumpCountInt -gt 1)
            {
                break
            }
            Write-Host "Please enter a number greater than one." -ForegroundColor Red
        }
    
        [int]$DelayIntervalInt=0
        while ($true)
        {
            Write-Host "How frequently (in seconds) would you like to generate the memory dumps?" -ForegroundColor Yellow
            $DelayIntervalStr = Read-Host ">"
    
            if ([int]::TryParse($DelayIntervalStr, [ref]$DelayIntervalInt) -and $DelayIntervalInt -gt 0)
            {
                break
            }
            Write-Host "Please enter a number greater than zero." -ForegroundColor Red
        }
    
        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'.`nOr if SQLDumper.exe failed, look in the folder from which you are running this script."
    
  • 次のコマンドを使用して、管理者としてコマンド プロンプトから実行します。

    Powershell.exe -File SQLDumpHelper.ps1
    
  • または、Windows PowerShell コンソールを管理者として開き、次のコマンドを使用して実行します。

    .\SQLDumpHelper.ps1
    

注

システムで PowerShell スクリプトを実行したことがない場合は、次のエラー メッセージが表示されることがあります。

ファイル ...SQLDumpHelper.ps1 を読み込めません。このシステムではスクリプトの実行が無効になっているためです。

コマンドを実行する機能を有効にするには、次の手順に従います。

  1. 管理者として実行 オプションを使用して、Windows PowerShell コンソールを起動します。 実行ポリシーを変更できるのは、コンピューター上の管理者グループのメンバーだけです。

  2. 次のコマンドを使用して、署名されていないスクリプトの実行を有効にします。

    Set-ExecutionPolicy RemoteSigned
    

    注

    これにより、ローカル コンピューターで作成した署名されていないスクリプトと、インターネットから取得した署名済みスクリプトを実行できます。