次の方法で共有


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 フォルダーを<開きます<

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

    • 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. [Start Run]\(実行の開始\)> を選択し、「cmd」と入力し、[OK] を選択します

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

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

    注:

    このフォルダー パスでは、前に説明したように、 <数値> は 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. [ 表示 ] メニューの [列の選択] を 選択します
  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 Configuration Manager を開きます
  2. [ SQL Server サービス] で、調査中の SQL Server インスタンスを見つけます。
  3. そのエントリを右クリックし、[ プロパティ] を選択し、[ 詳細設定 ] タブに移動します。
  4. そのダンプ ディレクトリを目的のパスに変更し、[OK] を選択します
  5. 新しい設定を有効にするには、SQL Server を再起動します (可能な場合)。

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

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

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

  1. [Start Run]\(実行の開始\)> を選択し、「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 - パラメーターが正しくありません" 無効なプロセス ID が Sqldumper.exe ユーティリティに渡されました。
"スレッド ID の値が無効です - <パラメーターパラメーター> エラーが無効です" 無効なパラメーターが Sqldumper.exe ユーティリティに渡されました。

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

  • "ミニダンプ 6 中の不明なコールバックの種類"
  • "ミニダンプ 7 中の不明なコールバックの種類"

ダンプ生成の影響

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

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

前のステートメントに基づいて、ここでの固定の期間は重要な要素であり、次の要因によって駆動されます。

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

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

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

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

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

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

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

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

同じ問題に対する繰り返しダンプの削除

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

エラー ログの短い出力

単一のメモリ ダンプから 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 2019CU23 で圧縮メモリ ダンプ機能が導入されました。 アクティブ化されると、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 種類のダンプを生成できます。

参照メモリを使用したミニ ダンプ

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

注:

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

完全ダンプ

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

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

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 のクラスター構成

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

  1. [Start Run]\(実行の開始\)> を選択し、「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 ミリ秒 から MAXDWORD までです。MAXDWORD は、DWORD データ型 (4294967295) の範囲内の最大値を表します。

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

cluster resource "SQL Server" /priv

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

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

  1. [Start Run]\(実行の開始\)> を選択し、「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

注:

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

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
    

    注:

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