สแน็ปช็อตฐานข้อมูล SQL Server สำหรับการทดสอบการรวม


14

ฉันกำลังพยายามกำหนดวิธีการทำงานกับฐานข้อมูลทดสอบ (ใน SQL Server) สำหรับการทดสอบการรวมระบบของเรา

ความคิดของฉันคือการทำตามขั้นตอนเหล่านี้ในการเปิดตัวชุดทดสอบการรวมระบบ:

  • สร้างฐานข้อมูลที่ว่างเปล่าโดยสิ้นเชิง
  • เรียกใช้สคริปต์ "สร้างวัตถุฐานข้อมูล" เพื่อสร้างวัตถุฐานข้อมูลที่เกี่ยวข้องทั้งหมด (ตารางมุมมองลำดับ ฯลฯ )
  • กรอก "ฐานข้อมูล" (ค่าการค้นหา ฯลฯ )
  • ถ่ายภาพฐานข้อมูลที่เรียกว่า(db)_Basis"เส้นฐาน" สำหรับการทดสอบการรวมระบบในอนาคต

ตอนนี้ก่อนทุกคลาสการทดสอบ (ที่มีการทดสอบ 1-n) ฉันวางแผนที่จะทำการ "กู้คืนจากสแน็ปช็อต" เพื่อกลับไปยังสถานะ "ว่าง" ที่กำหนดไว้อย่างดีไม่มากก็น้อย ทำงานเหมือนจับใจจนถึงตอนนี้

อย่างไรก็ตามมีชุดของการทดสอบการรวมที่จำเป็นต้องใช้ในฐานข้อมูลการทดสอบขนาดใหญ่ - ดังนั้นฉันหวังว่าจะทำสิ่งนี้ก่อนที่จะทำการติดตั้งการทดสอบแต่ละชุด

  • กู้คืนฐานข้อมูลจากส(db)_Basisแน็ปช็อต
  • แทรกข้อมูล 50'000 + แถวเหล่านั้นลงในฐานข้อมูล
  • สร้างสแน็(db)_With_Testdataปช็อตอื่น

จากนั้นสำหรับการทดสอบแต่ละครั้งให้รีเซ็ตฐานข้อมูลเป็น(db)_With_Testdataเวอร์ชันสแน็ปช็อตที่กำหนดไว้อย่างดีรันการทดสอบตรวจสอบผลลัพธ์และอื่น ๆ

ปัญหาคือ: ฉันดูเหมือนจะไม่สามารถมีสอง snapshots db ในเวลาเดียวกัน - เมื่อฉันฉันไม่สามารถคืนค่าฐานข้อมูลของฉันทั้งสอง .... ฉันได้รับข้อผิดพลาดนี้:

ข่าวสารเกี่ยวกับ 3137, ระดับ 16, สถานะ 4,
ฐานข้อมูลLine 9 ไม่สามารถเปลี่ยนกลับได้ อาจระบุชื่อหลักหรือชื่อสแน็ปช็อตอย่างไม่เหมาะสมสแน็ปช็อตอื่นทั้งหมดไม่ได้ถูกทิ้งหรือมีไฟล์ขาดหายไป

ข่าวสารเกี่ยวกับ 3013 ระดับ 16 สถานะ 1 บรรทัดที่ 9
ฐานข้อมูลการคืนค่าถูกยกเลิกอย่างผิดปกติ

นั่นเป็นวิธีการที่ snapshot ของฐานข้อมูล SQL Server ทำงานจริงหรือ ดูเหมือนว่าจะ จำกัด อย่างมาก ..... ฉันจะเข้าใจถ้าฉันไม่สามารถย้อนกลับไปยังต้นฉบับดั้งเดิม (db) _Basis "snapshot ได้ - แต่เพียงเพราะตอนนี้ฉันมีสอง snapshot ฉันไม่สามารถกลับไปที่ล่าสุดได้ ?!?!?


ส่วนแทรก 50,000 แถวใช้เวลานานเท่าใด คุณสามารถนำสิ่งนั้นมาใช้ใหม่ได้ไหม
RBarryYoung

คำตอบ:


12

น่าเสียดายที่มันเกิดจากการออกแบบ

นำมาจากหน้า BOL " เปลี่ยนฐานข้อมูลกลับไปเป็น Snapshot ฐานข้อมูล ":

ข้อ จำกัด และข้อ จำกัด

การย้อนกลับไม่ได้รับการสนับสนุนภายใต้เงื่อนไขต่อไปนี้:

  • ฐานข้อมูลต้องมีสแน็ปช็อตฐานข้อมูลเดียวเท่านั้นซึ่งคุณวางแผนจะเปลี่ยนกลับ
  • กลุ่มไฟล์แบบอ่านอย่างเดียวหรือบีบอัดใด ๆ ที่มีอยู่ในฐานข้อมูล
  • ขณะนี้ไฟล์ใด ๆ ที่ออฟไลน์ แต่ออนไลน์เมื่อสร้างสแน็ปช็อต

คุณสามารถปล่อยสแนปชอตแรก(db)_Basisได้ ฉันสามารถเข้าใจได้ว่าสิ่งนี้ดูเหมือนจะมีข้อ จำกัด มาก แต่ดูด้วยวิธีนี้: ภาพรวมเป็นไฟล์ที่กระจัดกระจายตามไฟล์ข้อมูลดั้งเดิมดังนั้นการเปลี่ยนกลับไปเป็นภาพรวมเฉพาะจะทำให้สแน็ปช็อตทั้งหมดเป็นโมฆะ . ข้อ จำกัด นั้นน่ารำคาญ แต่ก็ดูไม่สมเหตุสมผล


4

อีกมุมมองหนึ่งคือการสำรองข้อมูลและคืนค่าเนื่องจากคุณเพียงแค่สร้างฐานข้อมูลเปล่าและสคีมาด้วยค่าการค้นหาบางอย่าง

นอกจากนี้เพียงแค่แทรกแถว 50K ฐานข้อมูลจะไม่ใหญ่มาก หากคุณใช้การบีบอัดขนาดสำรองจะน้อยลงเช่นกัน

คุณสามารถมีงานตัวแทน TSQL หรือเพียงสคริปต์ (อาจเป็นคุณสามารถสร้างขั้นตอนการจัดเก็บและเพียงเรียกมันหลังจากการทดสอบของคุณขึ้นอยู่กับผลลัพธ์ที่คุณได้รับ)

  • การสำรองฐาน - (db)_Basis
  • ด้วยการสำรองข้อมูล testdata - (db)_With_Testdata

ให้สคริปต์การรวมของคุณทำงานและขึ้นอยู่กับผลลัพธ์สุดท้ายคุณสามารถเรียกใช้งานใดงานหนึ่งข้างต้นเพื่อเปลี่ยนกลับเป็นสิ่งที่คุณต้องการ

ผมรู้สึกว่าการสำรองข้อมูล / restore วิธีที่สง่างามมากในสถานการณ์ของคุณตั้งแต่คุณจะตีฐานข้อมูลข้อ จำกัด ภาพรวม นอกจากนี้ Paul Randal บล็อกเกี่ยวกับข้อผิดพลาดที่น่ารังเกียจในทุกรุ่นจนถึงและรวมถึง SQL Server 2012 (ไม่แน่ใจว่าได้รับการแก้ไขใน CU ภายหลัง)

เมื่อคุณย้อนกลับไปเป็นสแน็ปช็อตฐานข้อมูลไฟล์บันทึกธุรกรรมของฐานข้อมูลต้นทางจะถูกคัดลอกและแทนที่ด้วยไฟล์บันทึก 0.5MB ด้วย VLF 0.25MB สองรายการ


ใช่เราใช้การสำรอง / กู้คืน - แต่อยู่ในช่วง 5-7 วินาทีในขณะที่การกู้คืนจากสแน็ปช็อตฐานข้อมูลต่ำกว่า 1 วินาที - นั่นคือสาเหตุที่เรากำลังมองหาทางเลือกสำรอง / กู้คืน
marc_s

@marc_s ดีกับผม 5-7 วินาทีเป็นที่ยอมรับโดยไม่มีข้อ จำกัด และข้อบกพร่อง VS 1 วินาทีมีข้อ จำกัด และข้อบกพร่องที่เป็นไปได้ :-)
Kin ชาห์

สำหรับเราแล้วมันไม่เป็นที่ยอมรับ - เรากำลังมองหาวิธีแก้ปัญหาที่เร็วกว่า
marc_s

@marc_s ฉันเห็นว่าจุดของคุณไม่เป็นที่ยอมรับ แต่คุณกำลังตีข้อ จำกัด ที่ได้รับจากการออกแบบ คุณสามารถใช้เพียง 1 ภาพรวม แต่ยังต้องการการสำรองข้อมูลเพื่อย้อนกลับ ตัวเลือกเป็นของคุณ - ใช้สแนปชอตเดียวเช่นกับ testdata ของคุณและใช้การสำรองข้อมูลเพื่อกู้คืนไปยังฐานข้อมูล
Kin Shah
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.