SQL Server 2008 Express データベースのすべてのクエリをログに記録する方法
SQL Server 2008 Express データベースのすべてのクエリをログに記録する方法
SQL Server Profiler は、SQL Server インスタンスに対するすべての活動をトレースするツールです。 Profiler を使用して、すべてのクエリとその実行時間、ユーザー、データベースなどの情報を記録できます。
Profiler を使用してクエリをログに記録するには:
- SQL Server Management Studio (SSMS) を起動します。
- オブジェクト エクスプローラーで、サーバー インスタンス を展開します。
- セキュリティ フォルダを展開します。
- ログイン を右クリックし、新しいログイン を選択します。
- ログイン名とパスワードを入力します。
- データベース エンジン サービス に対する db_owner ロールをログインに割り当てます。
- SSMS を再起動します。
- スタート メニューで、SQL Server Profiler を選択します。
- 新しいトレース を選択します。
- 接続 タブで、サーバー名 と 認証 を入力します。
- イベント セレクション タブで、すべてのデータ変更イベント を選択します。
- トレース メニューで、トレースの開始 を選択します。
- すべてのクエリがログに記録されます。
拡張イベントを使用する
拡張イベントは、SQL Server 2008 で導入された新しいトレース メカニズムです。 Profiler よりも軽量で、より多くの情報を記録できます。
- 拡張イベント を選択します。
- セッション名とターゲット ファイルを入力します。
- クエリの開始 イベントと クエリの終了 イベントを有効にします。
トレース フラグは、SQL Server の動作を変更するために使用できるビット フラグです。 トレース フラグ 46 を使用して、すべてのクエリとその実行時間をログに記録できます。
- プロパティ を選択します。
- 詳細設定 タブを選択します。
- スタートアップ オプション グループで、トレース フラグ ボックスに 46 と入力します。
- OK をクリックします。
- SQL Server を再起動します。
- すべてのクエリと実行時間が Windows イベント ログに記録されます。
ログ ファイルには、すべてのクエリとその実行時間、ユーザー、データベースなどの情報が含まれています。 ログ ファイルを分析して、パフォーマンスの問題やセキュリティの問題を特定できます。
ログ ファイルを分析するには:
- ログ ファイルを開きます。
- クエリとその実行時間を分析します。
- 問題のあるクエリを特定します。
- 問題を解決します。
SQL Server Profiler を使用してクエリをログに記録する
USE AdventureWorks2012;
GO
-- Profiler トレースを開始します
EXEC sp_trace_create 'MyTrace', 1, 1;
GO
-- クエリを実行します
SELECT * FROM Person.Contact;
GO
-- Profiler トレースを停止します
EXEC sp_trace_stop;
GO
-- ログ ファイルを開きます
-- ログ ファイルは C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log\ にあります
拡張イベントを使用してクエリをログに記録する
USE AdventureWorks2012;
GO
-- 拡張イベント セッションを作成します
CREATE EVENT SESSION MySession
ON SERVER
ADD EVENT sqlserver.query_start(
ACTION(sqlserver.client_app_name, sqlserver.client_hostname, sqlserver.database_id,
sqlserver.execution_context_id, sqlserver.login_name, sqlserver.nt_username,
sqlserver.query_hash, sqlserver.query_plan_hash, sqlserver.query_sql_text,
sqlserver.session_id, sqlserver.timestamp, sqlserver.transaction_id))
ADD EVENT sqlserver.query_finish(
ACTION(sqlserver.client_app_name, sqlserver.client_hostname, sqlserver.database_id,
sqlserver.execution_context_id, sqlserver.login_name, sqlserver.nt_username,
sqlserver.query_hash, sqlserver.query_plan_hash, sqlserver.query_sql_text,
sqlserver.session_id, sqlserver.timestamp, sqlserver.transaction_id,
sqlserver.duration, sqlserver.cpu_time, sqlserver.logical_reads,
sqlserver.writes, sqlserver.row_count))
TARGET FILE = 'C:\MyTrace.xel';
GO
-- セッションを開始します
START EVENT SESSION MySession;
GO
-- クエリを実行します
SELECT * FROM Person.Contact;
GO
-- セッションを停止します
STOP EVENT SESSION MySession;
GO
-- ログ ファイルを開きます
-- ログ ファイルは C:\ にあります
トレース フラグを使用してクエリをログに記録する
-- トレース フラグ 46 を有効にします
DBCC TRACEON(46);
GO
-- クエリを実行します
SELECT * FROM Person.Contact;
GO
-- トレース フラグ 46 を無効にします
DBCC TRACEOFF(46);
GO
-- ログ ファイルを開きます
-- ログ ファイルは Windows イベント ログにあります
SQL Server 2008 Express データベースのすべてのクエリをログに記録する他の方法
第三者製ツールを使用する
SQL Server の活動をトレースする第三者製ツールが多数あります。 これらのツールは、Profiler や拡張イベントよりも多くの機能を提供する場合があります。
カスタム トレースを使用する
独自のトレース コードを作成して、すべてのクエリをログに記録できます。 これは、高度な要件がある場合に役立ちます。
データベース監査を使用する
SQL Server 2008 Express では、データベース監査を使用して、データベースに対するすべての操作をログに記録できます。 これは、セキュリティとコンプライアンスの要件を満たすのに役立ちます。
各方法の利点と欠点
方法 | 利点 | 欠点 |
---|---|---|
SQL Server Profiler | 使いやすい | 重量級 |
拡張イベント | 軽量 | 複雑 |
トレース フラグ | 軽 |
sql sql-server database