特定のデータベースに、そこから作成されたデータベーススナップショットがあるかどうかを判断できるt-sqlクエリを作成しようとしています。
たとえば、次のようなスナップショットを作成するとします。
CREATE DATABASE [DatabaseA_Snapshot] ON
(NAME=DatabaseA, FileName='<whatever>')
AS SNAPSHOT OF [DatabaseA]
そのスナップショットの存在を後でもう一度クエリできる方法はありますか? sys.databasesに表示されることがわかりますが、DatabaseAから作成されたデータベーススナップショットであると判断するのに役立つ情報が見つかりませんでした。
SQL Server Management Studioのオブジェクトエクスプローラーは、 'データベーススナップショット'フォルダーの下に配置するため、これらを通常のデータベースと区別するいくつかの方法があります。
スナップショットデータベースのエントリはsys.databases.source_database_id
、次のようなものを使用して、現在のスナップショットを確認できます。同様に、新しいチェックを作成する前に、同じチェックを使用して既存のスナップショットをDROP
できます。
IF NOT EXISTS(
SELECT
*
FROM
sys.databases
WHERE
name = 'DatabaseA_Snapshot'
AND source_database_id IS NOT NULL
)
BEGIN
CREATE DATABASE [DatabaseA_Snapshot]
ON (NAME=DatabaseA, FileName='<whatever>')
AS SNAPSHOT OF [DatabaseA]
END