web-dev-qa-db-ja.com

削除されたすべてのデータベースを一覧表示する

SQL Serverに特定のテーブルが存在していたかどうかを確認する必要があります。 SQL Serverインスタンスで削除されたすべてのデータベースを一覧表示するために使用できる既存のスクリプトまたはメソッドはありますか?

6
Brian Mogambi

まあ、SQL Serverはその情報を保持していないため、everについてはわかりません永遠に。

また、テーブルとデータベースのどちらについて質問しているかは不明です。両方について触れたので、デフォルトのトレース( この質問に基づく )に対するクエリを次に示しますが、どちらかが返されますが、デフォルトのトレースが実行される限り戻ります。誰が何を、いつ、どこからドロップしたかを示します。

DECLARE @path nvarchar(260) = (SELECT 
    REVERSE(SUBSTRING(REVERSE([path]), 
    CHARINDEX(CHAR(92), REVERSE([path])), 260)) + N'log.trc'
  FROM sys.traces WHERE is_default = 1);

SELECT ObjectType,
       ObjectName, 
       DatabaseName, 
       LoginName, 
       HostName, 
       ApplicationName, 
       StartTime
  FROM sys.fn_trace_gettable(@path, DEFAULT)
  WHERE EventClass = 47 AND EventSubClass = 1
  ORDER BY StartTime DESC;

ObjectTypeの列挙型はここに記載されています ですが、フィルタリングする場合は、データベースにObjectType = 16964を、テーブルにObjectType = 8277を使用できます。

デフォルトのトレースは、新しいものを追加するときに、最も古い行/ファイルをロールオフしてパージします。それよりも前に戻る必要がある場合は、古いバックアップがある場合は、それを復元する必要があります。

18
Aaron Bertrand

SSMSで スキーマ変更履歴レポート を使用できます。

別のオプションは、説明されているように、デフォルトのトレースを直接クエリすることです here

これらはデフォルトの内部情報を使用し、その情報は一定期間のみ存在することに注意してください。サーバーが存在し始めてからの意味で、「これまでに存在した」または「すべての削除されたデータベース」に答えるのに役立ちません。最近行われたことを教えてくれます。

今後、この情報が重要な場合は、 server and database audits などを確認する必要があります。

9
spaghettidba