Як я можу запитувати наявні знімки бази даних на SQL-сервері?


12

Я намагаюся створити t-sql-запит, який би міг визначити, чи є в даній базі даних знімки, які були створені з неї.

Наприклад, якби я створив такий знімок:

CREATE DATABASE [DatabaseA_Snapshot] ON 
(NAME=DatabaseA, FileName='<whatever>') 
AS SNAPSHOT OF [DatabaseA]

Чи є спосіб я пізніше запитати про існування цього знімка? Я бачу, що він відображається в sys.databases, але я не зміг знайти жодної інформації, яка допомогла б мені визначити, що це знімок бази даних, створений із DatabaseA.

Провідник об’єктів SQL Server Management Studio, розміщуючи його в папці "Знімки баз даних", очевидно, існує певний спосіб відрізнити їх від звичайних баз даних.

Відповіді:


17

База даних знімків містить запис 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   
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.