特定のエンティティのみに関する監査ログ データを削除することはできますか? 巨大な監査ログがあり、特定のエンティティのログ データを削除して削減したいと考えていましたが、他のエンティティのログは保持したいと考えています。
2 に答える
エンティティ タイプごとに監査ログ エントリを削除する方法はサポートされていません。監査による削除をサポートする唯一の方法は、日付によるものです (つまり、X 日付より古いすべてのレコード)。 *注意: SQL 環境によっては、使用可能な終了日が監査ログ パーティションの終了日に制限される場合があります。*
とはいえ、この要件を満たすためのサポートされていない方法があります。重要: CRM サーバーをオフラインにし、データベースをバックアップし、復元を試行する前にテストします。これは、Dynamics CRM 2011 SQL データベースでサポートされているアクションに反するため、私が提案することに対するサポートはありません。
監査ログはテーブルに格納されますdbo.AuditBase
。このテーブルには拡張ベースがないため、監査エントリごとに考慮すべきレコードは 1 つだけです。
ObjectTypeCode
エンティティのが必要になります。次のスクリプトを実行して、データベースからこれを取得できます。
SELECT [EntityId],[Name],[ObjectTypeCode]
FROM [].[MetadataSchema].[Entity] ORDER BY Name
これでObjectTypeCode
、以下のスクリプトの xxxx を値に置き換えて、スクリプトを実行するだけです。
DELETE FROM [].[dbo].[AuditBase] WHERE ObjectTypeCode = xxxx
特定のエンティティ タイプの監査レコードが削除されました。
あなたが探しているものではないことは承知していますが、特定の日付より前のすべての監査データを削除するために呼び出すことができるDeleteAuditDataRequest API メッセージがあります。
特定のレコードを削除する限り、できるとは思いません。次のコードを試すと、次のエラーが表示されます。'Delete' メソッドはタイプ 'audt' のエンティティをサポートしていません。
orgService.Delete("audit",auditId);
オンプレミス環境の場合は、DB に直接アクセスでき、監査レコードをアーカイブしたり、SQL 経由で削除したりできます。
それが役立つことを願っています。