ฉันจะค้นหาสแน็ปช็อตฐานข้อมูลที่มีอยู่ในเซิร์ฟเวอร์ SQL ได้อย่างไร


12

ฉันกำลังพยายามสร้างแบบสอบถาม t-sql ที่สามารถตรวจสอบว่าฐานข้อมูลที่กำหนดมีสแนปชอตฐานข้อมูลใด ๆ ที่สร้างขึ้นจากมันหรือไม่

ตัวอย่างเช่นถ้าฉันจะสร้างสแนปชอตแบบนี้:

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

มีวิธีที่ฉันสามารถสอบถามการมีอยู่ของภาพรวมนั้นอีกครั้งในภายหลังหรือไม่ ฉันเห็นว่ามันปรากฏใน sys.database แต่ไม่พบข้อมูลใด ๆ ที่จะช่วยฉันพิจารณาว่าเป็นสแนปชอตของฐานข้อมูลที่สร้างขึ้นจาก DatabaseA

Object Explorer Studio ของ SQL Server Management วางไว้ใต้โฟลเดอร์ 'Snapshots ฐานข้อมูล' ดังนั้นจึงมีวิธีที่แตกต่างจากฐานข้อมูลปกติอย่างชัดเจน

คำตอบ:


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   
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.