SQL Server 2008の変更を追跡する

すべてのDBMS開発者は遅かれ早かれ、データベースアクセスとサーバーイベント全般を追跡するタスクに直面すると思います。 もちろん、ツールを選択する(または自分で作成する)前に、DBMS開発者自身が提供するソリューションに注意を払う必要があります。 SQL Server 2008でこの問題を解決した経験を共有したいと思います。

現在、SQL Server 2008にはこのようなソリューションが4つあります(SQL Server 2011のこの分野での大きな変更は予想されていません)。 これらのツールの一部は以前のバージョンから、一部は2008年に登場しました。これらのツールは多くの点で重複しているため、特定の問題を解決するために1つ(または複数)のツールを選択するのは容易ではありません。 これを支援するために、例を使用して各ツールの概要を説明します。

1. CT(変更追跡)。


多くの場合、CDC(Change Data Capture)と混同されます。 しかし、これらのツールは、目的と実装の両方で異なります。 CTは変更の事実(どの行で、どのデータが変更されたか(C R UD))を追跡するように設計されていますが、CDCは変更の履歴(削除された行を含む行のすべてのバージョン)を保持します。 実装に関しては、CDCはトランザクションログの読み取りに基づいており(非同期)、CTは同期して動作します。
変更の追跡が有効になっている各テーブルに対して、変更された行のID、変更された列を識別するためのビットマスク、操作の種類が格納されるシステムテーブルが作成されます。
CTを有効にするには、データベースレベルで特定のテーブルに対して有効にする必要があります。
ALTER DATABASE ChangeTracking SET change_tracking = ON <br/>
( change_retention = 10 minutes, auto_cleanup = ON ) <br/>
<br/>
ALTER TABLE Orders enable change_tracking WITH ( track_columns_updated = ON )
ALTER DATABASE ChangeTracking SET change_tracking = ON <br/>
( change_retention = 10 minutes, auto_cleanup = ON ) <br/>
<br/>
ALTER TABLE Orders enable change_tracking WITH ( track_columns_updated = ON )

優れた記事の詳細(パラメーターの説明、使用例、詳細情報)。

2. CDC(変更データキャプチャ)


変更されたデータを追跡するためのツール。 CTとの主な違いは、非同期実装(上記の説明)と変更された(C R UD)データのすべてのバージョンの保存です。 CDCは、cdcス​​キーマのシステムテーブルを使用して、変更されたデータを保存します。 CDCがアクティブになっている各テーブルに対して、タイプcdc.dbo_Orders_CT(テーブルdbo.Orders用)の名前でテーブルが作成されます。

画像

CDCをアクティブにするには、特定のテーブルのデータベースレベルでアクティブにする必要があります。
EXEC sys. sp_cdc_enable_db <br/>
<br/>
EXEC sys. sp_cdc_enable_table <br/>
@source_schema = N 'dbo' ,<br/>
@source_name = N 'Orders' ,<br/>
@role_name = N 'cdc' ,<br/>
@capture_instance = N 'dbo_Orders' ,<br/>
@supports_net_changes = 1 ,<br/>
@index_name = 'id_idx' ,<br/>
@captured_column_list = null,<br/>
@ FILEGROUP_NAME = null;
EXEC sys. sp_cdc_enable_db <br/>
<br/>
EXEC sys. sp_cdc_enable_table <br/>
@source_schema = N 'dbo' ,<br/>
@source_name = N 'Orders' ,<br/>
@role_name = N 'cdc' ,<br/>
@capture_instance = N 'dbo_Orders' ,<br/>
@supports_net_changes = 1 ,<br/>
@index_name = 'id_idx' ,<br/>
@captured_column_list = null,<br/>
@ FILEGROUP_NAME = null;


純粋に実用的な観点からすると、CDCの大きなマイナス点は、変更の著者を修正することが不可能であることです。 もちろん、デフォルト値suser_sname()を使用してcdc.dbo_Orders_CTシステムテーブルに列を追加する手間はありません(実際、これは機能します)。

保存されたデータへのクエリの例と記事の詳細な説明。

3. SQL Server監査


サーバーへのすべてのイベントとリクエスト(selectを含む)を追跡するように設計された強力なツール。 このツールの範囲は非常に広く、プロファイリングからセキュリティに関連する問題、データベースの意図しない部分でのユーザーアクティビティの特定までです。
SQL Server Auditでは、監視対象イベントのフィルターを柔軟に構成できます。
監査を使用するには、サーバーレベルでアクティブ化する必要があります。
CREATE server audit ServerAudit<br/>
TO FILE ( filepath = `D:\Audit\`, maxsize = 1GB ) <br/>
WITH ( on_failture = CONTINUE ) <br/>
<br/>
ALTER server audit ServerAudit WITH ( STATE = ON )
CREATE server audit ServerAudit<br/>
TO FILE ( filepath = `D:\Audit\`, maxsize = 1GB ) <br/>
WITH ( on_failture = CONTINUE ) <br/>
<br/>
ALTER server audit ServerAudit WITH ( STATE = ON )

サーバーレベルで監査仕様(トレース)を作成する例:
CREATE server audit specification ServerAudit_Permissions<br/>
FOR server audit ServerAudit<br/>
ADD ( server_principal_change_group ) ,<br/>
ADD ( server_permission_change_group ) ,<br/>
ADD ( server_role_member_change_group ) ;<br/>
<br/>
ALTER server audit specification ServerAudit_Permissions<br/>
WITH ( STATE = ON ) ;
CREATE server audit specification ServerAudit_Permissions<br/>
FOR server audit ServerAudit<br/>
ADD ( server_principal_change_group ) ,<br/>
ADD ( server_permission_change_group ) ,<br/>
ADD ( server_role_member_change_group ) ;<br/>
<br/>
ALTER server audit specification ServerAudit_Permissions<br/>
WITH ( STATE = ON ) ;

データベースレベルで監査仕様を作成する例:
USE MyDb<br/>
CREATE DATABASE audit specification SA_MyDb_Orders <br/>
FOR server audit ServerAudit<br/>
ADD ( SELECT , UPDATE , INSERT , DELETE ON dbo. Orders BY PUBLIC ) ,<br/>
ADD ( SELECT , UPDATE , INSERT , DELETE ON dbo. OrderDetails BY PUBLIC )
USE MyDb<br/>
CREATE DATABASE audit specification SA_MyDb_Orders <br/>
FOR server audit ServerAudit<br/>
ADD ( SELECT , UPDATE , INSERT , DELETE ON dbo. Orders BY PUBLIC ) ,<br/>
ADD ( SELECT , UPDATE , INSERT , DELETE ON dbo. OrderDetails BY PUBLIC )

監査を調整するために、SQL Server Management Studioには便利なビジュアルインターフェイスがあります。

また、仕様c2の標準化された監査の手段があることに注意する必要があります(MSDNによると、米国の州の標準、標準へのリンクは見つかりませんでした)。
SP_CONFIGURE 'show advanced options' , 1 ;<br/>
RECONFIGURE ;<br/>
<br/>
SP_CONFIGURE 'c2 audit mode' , 1 ;<br/>
RECONFIGURE ;
SP_CONFIGURE 'show advanced options' , 1 ;<br/>
RECONFIGURE ;<br/>
<br/>
SP_CONFIGURE 'c2 audit mode' , 1 ;<br/>
RECONFIGURE ;

4. SQL Serverプロファイラー


このユーティリティは長い間誰もが慣れ親しんでいるので、今のところ私はそれにこだわらない。

ありがとう
もちろん、トピックに関心がない限り、各楽器について詳細に記述する計画です。

Source: https://habr.com/ru/post/J111207/


All Articles