Làm cách nào tôi có thể truy vấn các ảnh chụp nhanh cơ sở dữ liệu hiện có trong máy chủ SQL?


12

Tôi đang cố gắng tạo một truy vấn t-sql có thể xác định liệu một cơ sở dữ liệu đã cho có bất kỳ ảnh chụp nhanh cơ sở dữ liệu nào được tạo từ nó hay không.

Ví dụ: nếu tôi tạo một ảnh chụp nhanh như thế này:

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

Có cách nào tôi có thể truy vấn sự tồn tại của ảnh chụp nhanh đó một lần nữa không? Tôi có thể thấy rằng nó xuất hiện trong sys.database, nhưng tôi không thể tìm thấy bất kỳ thông tin nào có thể giúp tôi xác định rằng đó là ảnh chụp nhanh cơ sở dữ liệu được tạo từ DatabaseA.

Object Explorer của SQL Server Management Studio đặt nó trong thư mục 'Chụp ảnh cơ sở dữ liệu' để rõ ràng có một số cách để phân biệt chúng với các cơ sở dữ liệu thông thường.


4
Vui lòng bắt đầu sử dụng sys.databasesthay vì sys.sysdatabasesnhư sau này không được chấp nhận .
Jon Seigel

@JonSeigel tốt để biết. Đã sửa.
Jesse Taber

Câu trả lời:


16

Cơ sở dữ liệu ảnh chụp nhanh sẽ có một mục nhập sys.databases.source_database_id, vì vậy bạn có thể sử dụng một cái gì đó như sau để kiểm tra ảnh chụp nhanh hiện tại. Tương tự, bạn có thể sử dụng cùng một kiểm tra cho DROPảnh chụp nhanh hiện có trước khi tạo mới.

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   
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.