データベース管理者用の診断接続Diagnostic Connection for Database Administrators

適用対象: ○SQL Server ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

SQL ServerSQL Server では、サーバーへの標準の接続が確立できないときに、管理者向けの特殊な診断接続が用意されています。provides a special diagnostic connection for administrators when standard connections to the server are not possible. 診断接続を使用することにより、 SQL ServerSQL Server が標準の接続要求に応答していない場合でも、管理者は SQL ServerSQL Server にアクセスして診断クエリを実行し、問題のトラブルシューティングを行うことができるようになります。This diagnostic connection allows an administrator to access SQL ServerSQL Server to execute diagnostic queries and troubleshoot problems even when SQL ServerSQL Server is not responding to standard connection requests.

この DAC (専用管理者接続) では、暗号化やその他の SQL ServerSQL Serverのセキュリティ機能がサポートされます。This dedicated administrator connection (DAC) supports encryption and other security features of SQL ServerSQL Server. DAC で実行できるのは、ユーザー コンテキストを別の管理者ユーザーに変更する操作のみです。The DAC only allows changing the user context to another admin user.

SQL ServerSQL Server は DAC の正常な接続を試みますが、極端な状況においては失敗する場合もあります。makes every attempt to make DAC connect successfully, but under extreme situations it may not be successful.

適用対象: SQL ServerSQL Server (SQL Server 2008:SQL Server 2008 から SQL Server 2017SQL Server 2017)、SQL データベースSQL DatabaseApplies to: SQL ServerSQL Server ( SQL Server 2008:SQL Server 2008 through SQL Server 2017SQL Server 2017), SQL データベースSQL Database.

DAC による接続Connecting with DAC

また、既定では、サーバーで実行されているクライアントからしか接続できません。By default, the connection is only allowed from a client running on the server. remote admin connections オプションを指定した sp_configure ストアド プロシージャを使用して構成しない限り、ネットワーク接続は許可されません。Network connections are not permitted unless they are configured by using the sp_configure stored procedure with the remote admin connections option.

DAC を使用して接続できるのは、 SQL ServerSQL Server sysadmin ロールのメンバーのみです。Only members of the SQL ServerSQL Server sysadmin role can connect using the DAC.

DAC は、 sqlcmd コマンド プロンプト ユーティリティで特殊な管理者スイッチ (-A) を指定することによって使用できます。The DAC is available and supported through the sqlcmd command-prompt utility using a special administrator switch (-A). sqlcmd を使用する方法については、「sqlcmd でのスクリプト変数の使用」を参照してください。For more information about using sqlcmd, see Use sqlcmd with Scripting Variables. また、sqlcmd -S admin:<instance_name> という形式で、インスタンス名に admin: というプレフィックスを指定して接続することもできます。You can also connect prefixing admin: to the instance name in the format sqlcmd -S admin:<instance_name>. また、[SQL Server Management Studio]SQL Server Management Studio クエリ エディターから admin:<instance_name> に接続して DAC を開始することもできます。You can also initiate a DAC from a [SQL Server Management Studio]SQL Server Management Studio Query Editor by connecting to admin:<instance_name>.

制限Restrictions

DAC の唯一の目的は、ごくまれな状況でサーバーの問題を診断することであるので、この接続には次のようないくつかの制限があります。Because the DAC exists solely for diagnosing server problems in rare circumstances, there are some restrictions on the connection:

  • 接続に使用できるリソースを確保するために、DAC は 1 つの SQL ServerSQL Serverのインスタンスにつき 1 つしか許可されません。To guarantee that there are resources available for the connection, only one DAC is allowed per instance of SQL ServerSQL Server. DAC 接続が既にアクティブな場合は、DAC を使用して接続する新たな要求は、エラー 17810 で拒否されます。If a DAC connection is already active, any new request to connect through the DAC is denied with error 17810.

  • リソースに限りがあるので、 SQL Server ExpressSQL Server Express はトレース フラグ 7806 を使用して開始されない限り、DAC ポートでリッスンしません。To conserve resources, SQL Server ExpressSQL Server Express does not listen on the DAC port unless started with a trace flag 7806.

  • DAC では、まずログインに関連付けられた既定のデータベースへの接続が試行されます。The DAC initially attempts to connect to the default database associated with the login. 既定のデータベースに正常に接続されたら、master データベースに接続できます。After it is successfully connected, you can connect to the master database. 既定のデータベースがオフライン状態であるか、または別の原因で使用できない場合、接続の際にエラー 4060 が返されます。If the default database is offline or otherwise not available, the connection will return error 4060. ただし、master データベースへ接続するために、次のコマンドを使用する代わりに既定のデータベースをオーバーライドすると成功します。However, it will succeed if you override the default database to connect to the master database instead using the following command:

    sqlcmd -A -d mastersqlcmd -A -d master

    DAC を使用するときは、master データベースに接続することをお勧めします。これは、 データベース エンジンDatabase Engine のインスタンスが起動すると master を使用できることが保証されているためです。We recommend that you connect to the master database with the DAC because master is guaranteed to be available if the instance of the データベース エンジンDatabase Engine is started.

  • SQL ServerSQL Server では、DAC で複数のクエリやコマンドを並列実行することは禁止されています。prohibits running parallel queries or commands with the DAC. たとえば、DAC で次のいずれかのステートメントを実行すると、エラー 3637 が生成されます。For example, error 3637 is generated if you execute either of the following statements with the DAC:

    • RESTORERESTORE

    • BACKUPBACKUP

  • DAC では、使用できるリソースが制限されます。Only limited resources are guaranteed to be available with the DAC. リソースを集中的に消費するクエリ (Do not use the DAC to run resource-intensive queries (for example. 大きなテーブルでの複雑な結合など) や、ブロックされる可能性があるクエリの実行には DAC を使用しないでください。a complex join on large table) or queries that may block. これは、DAC によって既存のサーバーの問題が悪化するのを防ぐためです。This helps prevent the DAC from compounding any existing server problems. ブロックする可能性があるクエリを実行しなければならない場合、ブロッキングが発生する状況を回避するには、可能な限りそのクエリをスナップショット ベースの分離レベルで実行します。この分離レベルで実行できない場合は、トランザクションの分離レベルを READ UNCOMMITTED に設定するか、LOCK_TIMEOUT の値を 2,000 ミリ秒などの短い値に設定します。または、両方の設定を行います。To avoid potential blocking scenarios, if you have to run queries that may block, run the query under snapshot-based isolation levels if possible; otherwise, set the transaction isolation level to READ UNCOMMITTED and set the LOCK_TIMEOUT value to a short value such as 2000 milliseconds, or both. これにより、DAC セッションがブロックされるのを防ぐことができます。This will prevent the DAC session from getting blocked. ただし、 SQL ServerSQL Server の状態によっては、ラッチで DAC セッションがブロックされることがあります。However, depending on the state that the SQL ServerSQL Server is in, the DAC session might get blocked on a latch. Ctrl キーを押しながら C キーを押して DAC セッションを終了できることがありますが、終了できないこともあります。You might be able to terminate the DAC session using CTRL-C but it is not guaranteed. このような場合は、 SQL ServerSQL Serverの再起動が唯一の選択肢になります。In that case, your only option may be to restart SQL ServerSQL Server.

  • SQL ServerSQL Server では、DAC による接続とトラブルシューティングを確実に行うために、限定されたリソースを確保して DAC で実行されるコマンドを処理します。To guarantee connectivity and troubleshooting with the DAC, SQL ServerSQL Server reserves limited resources to process commands run on the DAC. 通常、次に示す単純な診断関数とトラブルシューティング関数を実行する場合には、この限定されたリソースだけで十分です。These resources are typically only enough for simple diagnostic and troubleshooting functions, such as those listed below.

理論上は、DAC で並列に実行する必要のない Transact-SQLTransact-SQL ステートメントはすべて実行できますが、次の診断コマンドとトラブルシューティング コマンド以外は使用しないことを強くお勧めします。Although you can theoretically run any Transact-SQLTransact-SQL statement that does not have to execute in parallel on the DAC, we strongly recommend that you restrict usage to the following diagnostic and troubleshooting commands:

  • 基本的な診断を行うための動的管理ビューのクエリ。たとえば、ロックの状態を確認する sys.dm_tran_locks、キャッシュの正常性を確認する sys.dm_os_memory_cache_counters、アクティブなセッションと要求を確認する sys.dm_exec_requestssys.dm_exec_sessions などです。Querying dynamic management views for basic diagnostics such as sys.dm_tran_locks for the locking status, sys.dm_os_memory_cache_counters to check the health of caches, and sys.dm_exec_requests and sys.dm_exec_sessions for active sessions and requests. リソースを集中的に消費する動的管理ビュー (たとえば、sys.dm_tran_version_store ではバージョン ストアの完全なスキャンが実行され、集中的に I/O が行われる可能性があります) や複雑な結合を使用する動的管理ビューは使用しないようにしてください。Avoid dynamic management views that are resource intensive (for example, sys.dm_tran_version_store scans the full version store and can cause extensive I/O) or that use complex joins. パフォーマンスへの影響に関する詳細については、特定の 動的管理ビューのリファレンスを参照してください。For information about performance implications, see the documentation for the specific dynamic management view.

  • カタログ ビューのクエリ。Querying catalog views.

  • DBCC FREEPROCCACHEDBCC FREESYSTEMCACHEDBCC DROPCLEANBUFFERSDBCC SQLPERF などの基本的な DBCC コマンド。Basic DBCC commands such as DBCC FREEPROCCACHE, DBCC FREESYSTEMCACHE, DBCC DROPCLEANBUFFERS, and DBCC SQLPERF. DBCC CHECKDBDBCC DBREINDEXDBCC SHRINKDATABASE などのリソースを集中的に消費するコマンドは実行しないでください。Do not run resource-intensive commands such as DBCC CHECKDB, DBCC DBREINDEX, or DBCC SHRINKDATABASE.

  • Transact-SQLTransact-SQL KILL*<spid>* コマンド。KILL*<spid>* command. SQL ServerSQL Serverの状態によっては、KILL コマンドは必ずしも成功しません。この場合、 SQL ServerSQL Serverを再起動するしか方法がありません。Depending on the state of SQL ServerSQL Server, the KILL command might not always succeed; then the only option may be to restart SQL ServerSQL Server. 次に一般的なガイドラインをいくつか示します。The following are some general guidelines:

    • SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>というクエリを実行し、SPID が実際に強制終了されたかどうかを確認します。Verify that the SPID was actually killed by querying SELECT * FROM sys.dm_exec_sessions WHERE session_id = <spid>. 行が返されなかった場合は、セッションが強制終了されたことを示します。If it returns no rows, it means the session was killed.

    • セッションが依然として確立されている場合は、クエリ SELECT * FROM sys.dm_os_tasks WHERE session_id = <spid>を実行して、このセッションに割り当てられたタスクがあるかどうかを確認します。If the session is still there, verify whether there are tasks assigned to this session by running the query SELECT * FROM sys.dm_os_tasks WHERE session_id = <spid>. タスクが存在する場合は、セッションが現在強制終了中である可能性が高くなります。If you see the task there, most likely your session is currently being killed. この処理には非常に長い時間がかかるため、成功しない場合があることに注意してください。Note that this may take considerable amount of time and may not succeed at all.

    • このセッションに関連付けられている sys.dm_os_tasks にタスクが存在しないが、KILL コマンドの実行後に sys.dm_exec_sessions に依然としてセッションが存在する場合は、使用できるワーカーがないことを示します。If there are no tasks in the sys.dm_os_tasks associated with this session, but the session remains in sys.dm_exec_sessions after executing the KILL command, it means that you do not have a worker available. 現在実行中のタスク ( sessions_id <> NULLを指定して sys.dm_os_tasks ビューに一覧されるタスク) のいずれかを選択し、そのタスクに関連付けられているセッションを強制終了して、ワーカーを解放します。Select one of the currently running tasks (a task listed in the sys.dm_os_tasks view with a sessions_id <> NULL), and kill the session associated with it to free up the worker. 1 つのセッションを強制終了するだけでは不十分で、複数のセッションを強制終了する必要が生じる場合があります。Note that it may not be enough to kill a single session: you may have to kill multiple ones.

DAC ポートDAC Port

SQL ServerSQL Server では、TCP ポート 1434 (使用可能な場合) または データベース エンジンDatabase Engine の起動時に動的に割り当てられる TCP ポートで DAC をリッスンします。listens for the DAC on TCP port 1434 if available or a TCP port dynamically assigned upon データベース エンジンDatabase Engine startup. エラー ログには、DAC がリッスンしているポート番号が含まれています。The error log contains the port number the DAC is listening on. 既定では、DAC リスナーはローカル ポートでの接続のみを受け入れます。By default the DAC listener accepts connection on only the local port. リモート管理接続をアクティブにするサンプル コードについては、「 remote admin connections サーバー構成オプション」を参照してください。For a code sample that activates remote administration connections, see remote admin connections Server Configuration Option.

リモート管理接続を構成すると、 SQL ServerSQL Server を再起動しなくても DAC リスナーが有効になり、クライアントからリモートで DAC に接続できるようになります。After the remote administration connection is configured, the DAC listener is enabled without requiring a restart of SQL ServerSQL Server and a client can now connect to the DAC remotely. SQL ServerSQL Server が応答しない場合でも、DAC リスナーを有効にしてリモート接続を受け入れることができます。これを行うには、まず DAC をローカルに使用して SQL ServerSQL Server に接続してから、sp_configure ストアド プロシージャを実行してリモート接続からの接続を受け入れます。You can enable the DAC listener to accept connections remotely even if SQL ServerSQL Server is unresponsive by first connecting to SQL ServerSQL Server using the DAC locally, and then executing the sp_configure stored procedure to accept connection from remote connections.

クラスター構成では、DAC は既定でオフになります。On cluster configurations, the DAC will be off by default. ユーザーは、sp_configure の remote admin connection オプションを実行すると、DAC リスナーを有効にしてリモート接続にアクセスできます。Users can execute the remote admin connection option of sp_configure to enable the DAC listener to access a remote connection. SQL ServerSQL Server が応答せず、DAC リスナーが有効になっていない場合は、DAC で接続するために SQL ServerSQL Server を再起動する必要が生じる場合があります。If SQL ServerSQL Server is unresponsive and the DAC listener is not enabled, you might have to restart SQL ServerSQL Server to connect with the DAC. この理由から、クラスター システムでは remote admin connections 構成オプションを有効にすることをお勧めします。Therefore, we recommend that you enable the remote admin connections configuration option on clustered systems.

DAC ポートは、起動中に SQL ServerSQL Server によって動的に割り当てられます。The DAC port is assigned dynamically by SQL ServerSQL Server during startup. 既定のインスタンスに接続する場合、DAC では SQL Server Browser サービスへの SSRP ( SQL ServerSQL Server Resolution Protocol) 要求が使用されません。When connecting to the default instance, the DAC avoids using a SQL ServerSQL Server Resolution Protocol (SSRP) request to the SQL Server Browser Service when connecting. まず、TCP ポート 1434 経由で接続が試行されます。It first connects over TCP port 1434. 接続が失敗した場合、ポートを取得するために SSRP 呼び出しが実行されます。If that fails, it makes an SSRP call to get the port. SQL ServerSQL Server Browser が SSRP 要求をリッスンしていない場合は、接続要求によってエラーが返されます。If SQL ServerSQL Server Browser is not listening for SSRP requests, the connection request returns an error. DAC がリッスンしているポート番号を確認するには、エラー ログを参照します。Refer to the error log to find the port number DAC is listening on. SQL ServerSQL Server がリモート管理接続を受け入れるように構成されている場合、次のように DAC を明示的なポート番号で開始する必要があります。If SQL ServerSQL Server is configured to accept remote administration connections, the DAC must be initiated with an explicit port number:

sqlcmd -S tcp:<server>,<port>sqlcmd -S tcp:<server>,<port>

SQL ServerSQL Server のエラー ログには DAC のポート番号が一覧されます。既定のポート番号は 1434 です。The SQL ServerSQL Server error log lists the port number for the DAC, which is 1434 by default. SQL ServerSQL Server がローカルの DAC 接続のみを受け入れるように構成されている場合は、次のコマンドを実行し、ループバック アダプターを使用して接続します。If SQL ServerSQL Server is configured to accept local DAC connections only, connect using the loopback adapter using the following command:

sqlcmd -S 127.0.0.1,1434sqlcmd -S 127.0.0.1,1434

ヒント

DAC を使用して Azure SQL データベースAzure SQL Database に接続するときに、-d オプションを使用して接続文字列でデータベース名も指定する必要があります。When connecting to the Azure SQL データベースAzure SQL Database with the DAC, you must also specify the database name in the connection string by using the -d option.

Example

この例では、管理者がサーバー URAN123 が応答していないことに気付き、その問題を診断します。In this example, an administrator notices that server URAN123 is not responding and wants to diagnose the problem. これを行うには、次のように、ユーザーが sqlcmd コマンド プロンプト ユーティリティをアクティブにし、DAC であることを示す URAN123 を指定して、サーバー -A に接続します。To do this, the user activates the sqlcmd command prompt utility and connects to server URAN123 using -A to indicate the DAC.

sqlcmd -S URAN123 -U sa -P <xxx> -A

これで、管理者はクエリを実行して問題を診断し、場合によっては応答していないセッションを終了させることができます。The administrator can now execute queries to diagnose the problem and possibly terminate the unresponsive sessions.

SQL データベースSQL Database の接続に関する類似の例では、-d パラメーターが含まれる次のコマンドを使用してデータベースを指定します。A similar example connecting to SQL データベースSQL Database would use the following command including the -d parameter to specify the database:

sqlcmd -S serverName.database.windows.net,1434 -U sa -P <xxx> -d AdventureWorks

sqlcmd でのスクリプト変数の使用Use sqlcmd with Scripting Variables
sqlcmd ユーティリティsqlcmd Utility
SELECT (Transact-SQL)SELECT (Transact-SQL)
sp_who (Transact-SQL)sp_who (Transact-SQL)
sp_lock (Transact-SQL)sp_lock (Transact-SQL)
KILL (Transact-SQL)KILL (Transact-SQL)
DBCC CHECKALLOC (Transact-SQL)DBCC CHECKALLOC (Transact-SQL)
DBCC CHECKDB (Transact-SQL)DBCC CHECKDB (Transact-SQL)
DBCC OPENTRAN (Transact-SQL)DBCC OPENTRAN (Transact-SQL)
DBCC INPUTBUFFER (Transact-SQL)DBCC INPUTBUFFER (Transact-SQL)
サーバー構成オプション (SQL Server)Server Configuration Options (SQL Server)
トランザクション関連の動的管理ビューおよび関数 (Transact-SQL)Transaction Related Dynamic Management Views and Functions (Transact-SQL)
トレース フラグ (Transact-SQL)Trace Flags (Transact-SQL)