เกิดอะไรขึ้นระหว่างการสำรองข้อมูล SQL Server แบบสด


18

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

หากข้อมูลถูกแก้ไข (โดยการแทรกอัพเดตหรือลบ) ในขณะที่การสำรองข้อมูลกำลังทำงานอยู่การสำรองข้อมูลจะมีการเปลี่ยนแปลงเหล่านั้นหรือจะถูกเพิ่มลงในฐานข้อมูลในภายหลังหรือไม่

ฉันสมมติว่าไฟล์บันทึกมีบทบาทสำคัญที่นี่ แต่ฉันก็ไม่แน่ใจเหมือนกัน

แก้ไข: บันทึกย่อของฉันเกี่ยวข้องกับการสำรองฐานข้อมูลโดยใช้ SQL Server Agent และผลกระทบของการแก้ไขฐานข้อมูลในระหว่างกระบวนการนี้

คำตอบ:


24

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

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


1
โพสต์ที่ยอดเยี่ยมและลิงค์ช่วยเป็นตัวอย่างที่ดี ขอบคุณ
Sean Howat

รัดกุมมาก เยี่ยมมาก!
allen1

2

ในระหว่างการสำรองข้อมูลสแน็ปช็อตจะถูกสร้างขึ้นสำหรับฐานข้อมูลและข้อมูลจะถูกอ่านเพื่อสำรองจากสแน็ปช็อตนั้น การดำเนินงานฐานข้อมูลจริงที่แท้จริงจะไม่มีผลต่อการดำเนินการสำรองข้อมูล


1

คุณไม่สามารถคัดลอกได้เนื่องจากอาจมีการเปลี่ยนแปลงฐานข้อมูลกลางสำเนาตามที่คุณพูดถึงในคำถาม

จะต้องทำกับตัวแทนที่ตระหนักถึงการทำงานของฐานข้อมูลแล้วใช้ "snapshot" ผ่านฟังก์ชั่นระบบปฏิบัติการหรือสามารถใช้ยูทิลิตี้ในการถ่ายโอนฐานข้อมูลในสถานะที่ปลอดภัย (เช่น mysqldump หากใช้ mysql)

มิฉะนั้นคุณจะได้รับข้อมูลสำรองที่อาจเสียหายและคุณจะไม่ทราบจนกว่าคุณจะกู้คืน ฉันคิดว่า Joel และ Jeff เพิ่งพูดถึงมันเล็กน้อยในพอดคาสต์ StackOverflow ล่าสุด

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

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


นี่เป็นคำตอบทั่วไปมากขึ้น แต่ฉันลืมที่จะรวมว่าฉันทำงานผ่านตัวแทนเซิร์ฟเวอร์ SQL ในตอนแรก มันยังให้รายละเอียดที่ดีเกี่ยวกับสิ่งที่อาจเกิดขึ้นในระหว่างกระบวนการนี้แม้จะมีวิธีการดังนั้นก็ช่วยได้! ขอบคุณ
Sean Howat

0

มีหลายวิธีในการทำเช่นนี้ (โดยทั่วไปไม่คิดว่า MSSQL จะทำอย่างไร) เช่นการทิ้งฐานข้อมูลไปยังไฟล์ในขณะที่ผนวกการเปลี่ยนแปลงใด ๆ กับไฟล์บันทึกที่มีการคอมมิทหลังจากการถ่ายโอนข้อมูลเสร็จสมบูรณ์ - เพื่อใช้ประโยชน์จากระบบไฟล์ คุณสมบัติเช่น VSS บน Windows


นอกจากนี้ฐานข้อมูลที่เป็น MVCC ซึ่งมีพื้นฐานมาจากพื้นดินขึ้น (เช่น PostGres) สามารถใช้ชุดของพฤติกรรมนั้นเพื่อรักษาสแน็ปช็อตที่สำเนาสำรองจากในขณะที่ยังคงอนุญาตให้อัปเดตไปยัง datafiles โดยธุรกรรมที่เริ่มในระหว่างการสำรองข้อมูล อย่างที่คุณบอกว่ามีหลายวิธีวิธีหนึ่งที่ใช้ขึ้นอยู่กับการออกแบบหลักของเครื่องมือจัดเก็บข้อมูลและคุณสมบัติการประมวลผลธุรกรรม
David Spillett

-1

คุณสามารถทำสิ่งที่เรียกว่าการสำรองข้อมูลแบบคัดลอกเท่านั้น จะไม่ส่งผลกระทบต่อฐานข้อมูลขณะออนไลน์


สำเนาสำรองอย่างเดียวคืออะไร? มันเป็นยังไงบ้าง? มีข้อควรพิจารณาใด ๆ หรือไม่? มีลิงค์ไปสู่ตัวอย่างของสัตว์ร้ายตัวไหนที่กำลังวิ่งอยู่? หากคุณกำลังจะส่งคำตอบลองนึกภาพสิ่งที่อาจเป็นประโยชน์หากพบว่ามีคนมีคำถามนี้ใน 2-3 ปี
rnxrx
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.