SQL Databaseに対して実行された操作に関する情報を出力する:SQL Server動的管理ビューレファレンス(38)
「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「動的管理ビュー」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。今回は、Azure SQL Databaseに対して実行された操作に関する情報の出力について解説します。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で使用可能な動的管理ビューについて、動作概要や出力内容などを紹介していきます。今回は動的管理ビュー「sys.dm_operation_status」における、Azure SQL Database(SQL Database)に対して実行された操作に関する情報の出力について解説します。対応バージョンは「Azure SQL Database」です。
概要
「Azure Portal」や「SQL Server Management Studio」から、SQL Databaseに対してさまざまな操作を実施できます。「sys.dm_operation_status」はSQL Databaseに対して実行された操作に関する情報を出力します。現在は、SQL Databaseに関する操作のみ出力されます。
出力内容
列名 | データ型 | 説明 |
---|---|---|
session_activity_id | uniqueidentifier | 操作ID |
resource_type | int | 操作が実行される対象のリソースの種類。次のいずれかになる 0=SQL Database |
resource_type_desc | nvarchar(2048) | 操作が実行される対象のリソースの種類の説明。次のいずれかになる Databaseのみ |
major_resource_id | sql_variant | 操作が実行される対象のSQL Databaseやサーバの名前 |
minor_resource_id | sql_variant | 内部使用のみ |
operation | nvarchar(60) | SQL Databaseに対して実行される操作 |
state | tinyint | 操作の状態。次のいずれかになる 0=保留 1=実行中 2=完了 3=失敗 4=取り消し |
state_desc | nvarchar(120) | 操作の状態の説明。次のいずれかになる PENDING=操作はリソースまたはクォータが利用可能になるのを待機 IN_PROGRESS=操作が開始され、実行中 COMPLETED=操作が正常に完了 FAILED=操作が失敗 CANCELLED=ユーザーの要求によって操作が停止 |
percent_complete | int | 操作が完了した割合。有効な値がない場合は次のいずれかになる 0=操作が開始されていない 50=実行中 100=操作が完了 |
error_code | int | 失敗した操作中に発生したエラーを示すコード |
error_desc | nvarchar(2048) | 失敗した操作中に発生したエラーの説明 |
error_severity | int | 失敗した操作中に発生したエラーの重大度レベル |
error_state | int | 将来使用するために予約されている |
start_time | datetime | 操作が開始した時点のタイムスタンプ |
last_modify_time | datetime | 最後に変更された時点のタイムスタンプ |
動作例
SQL Databaseに関する操作が記録されるため、コンテキストがユーザーデータベースの場合は1行も出力されず、コンテキストを「master」に切り替えて実行する必要があります。SQL Databaseに対して変更や再作成などの操作を実施し、「sys.dm_operation_status」を実行します(図1)。
「operation」列では操作の概要が出力されますが、どのような「ALTER」操作を実施したかなど、詳細なコマンドまでは出力されません。実行中の操作は「state」列が「1」、「state_desc」列が「IN_PROGRESS」として出力され、「percent_complete」列で大まかな進捗(しんちょく)を確認できます。SQL Databaseに対して「ALTER DATABASE」などを実行し、クエリの結果としては「コマンドは正常に完了しました」と出力されたとしても、内部でエラー終了している場合があります(図2)。
そのため「sys.dm_operation_status」の出力結果から「state」列が「3」、「state_desc」列が「FAILED」と表示されている行が存在しないか確認し、存在する場合には「error_code」列や「error_desc」列でエラーの詳細を確認する必要があります。
※本Tipsは、「Azure SQL Database(V12)」での動作を想定して解説しています。
筆者紹介
椎名 武史(しいな たけし)
日本ユニシス株式会社所属。Microsoft MVP for Data Platform(2017〜)。入社以来 SQL Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。SQL Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。
伊東 敏章(いとう としあき)
日本ユニシス株式会社所属。入社以来SQL Server一筋で評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。社内のプログラミングコンテストで4回の優勝経験も持つ。趣味は輪行で週末は自転車を持っての旅行。目標は色々な日本百選を制覇すること。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- SQL Serverの動的管理ビューとは?
「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「動的管理ビュー」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。 - 「DMV(Dynamic Management View)」でパフォーマンス遅延の「原因」を調べる
本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「処理遅延の原因を追求する“DMVの使い方”」を説明します。 - SQL Serverの動きを制御する「トレースフラグ」とは何か
「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「トレースフラグ」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。初回は「トレースフラグとはそもそも何か」を解説します。