การสำรองและคืนค่าฐานข้อมูลเซิร์ฟเวอร์ SQL 10-20 สู่สถานะ ~ แบบซิงโครนัส


15

ฉันต้องการสำรองฐานข้อมูล 10-20 SQL Server 2008 R2 ที่มีขนาดระหว่าง 10-50 GB ในขณะที่พวกเขาออนไลน์และใช้พร้อมกันโดยแอปองค์กรเดียว ฉันต้องการกู้คืนพวกเขากลับสู่สถานะที่ถูกซิงโครไนซ์กับฐานข้อมูลทั้งหมดเป็นส่วนใหญ่ วัตถุประสงค์คือเพื่อรวบรวมข้อมูลการผลิตสำหรับสภาพแวดล้อม QA / DEV

ฉันต้องการอย่างยิ่งที่จะไม่เรียกใช้ฐานข้อมูลในการกู้คืนเต็มรูปแบบและมาพร้อมกับวิธีการสำรองข้อมูลที่ทุ่มเทให้กับการเก็บข้อมูลสำหรับสภาพแวดล้อม QA และยังคงเป็นอิสระจากกระบวนการสำรองข้อมูลหลักซึ่งไม่ได้อยู่ในการควบคุมของฉัน

สำหรับลูกค้าของฉันจะใช้เวลา 1-2 ชั่วโมงในการเก็บสำรองข้อมูลทั้งหมด 20 ครั้งที่ ~ 30 GB ต่อครั้ง สิ่งนี้ทำให้การสำรองข้อมูลเต็มรูปแบบไม่สามารถยอมรับได้เนื่องจากฐานข้อมูลจะถูกซิงโครไนซ์มากเกินไปเมื่อทำงานในการกู้คืนอย่างง่าย

ฉันกำลังมองหาความคิดที่ดีกว่าสิ่งเหล่านี้:

IDEA 1: snapshot ระดับ SAN ของดิสก์ VM xcopy MDFs / LDF จากภาพรวม

เมื่อไฟล์ที่คัดลอกถูกแนบไปกับอินสแตนซ์ของเซิร์ฟเวอร์ที่แตกต่างกันกระบวนการกู้คืนของมันควรจะสร้างฐานข้อมูลที่สอดคล้องกัน
Googling เชื่อฉันว่านี่เป็นความคิดที่ดีอย่างน้อยเพราะฉันอาจได้รับ desync เทียบกับ master / msdb / etc

IDEA 2: จัดทำข้อมูลสำรองที่ซับซ้อนและซิงค์คืนค่าในฐานข้อมูลทั้งหมด

สิ่งนี้ต้องการให้ฉันเรียกใช้ฐานข้อมูลในการกู้คืนแบบเต็มซึ่งฉันไม่ต้องการ เริ่มการสำรองข้อมูลแบบขนานสำหรับฐานข้อมูลทั้งหมดก่อนถึงกำหนดส่ง (T0) เมื่อถึง T0 แล้วให้สำรองข้อมูลบันทึกทั้งหมด (ควรใช้เวลาไม่กี่นาที) ใช้การสำรองข้อมูลจำนวนมหาศาลและพยายามคืนค่า & บันทึกย้อนกลับไปข้างหน้า / ย้อนกลับเพื่อรับสถานะที่สอดคล้องกันค่อนข้างทั่วฐานข้อมูลเทียบกับ T0
สิ่งนี้ต้องการการวางแผนและการเขียนสคริปต์จำนวนมากเพื่อให้มีการใช้อย่างน่าเชื่อถือดังนั้นฉันจะพยายามอย่างสุดความสามารถเพื่อหลีกเลี่ยง

ฉันไม่มีโซลูชันอื่นอีกหรือไม่

PS1:ฉันจะรักความสามารถในการใช้ภาพรวมฐานข้อมูล แนวคิดคือการเริ่มต้นสแนปชอตในแต่ละฐานข้อมูล (ซึ่งควรอยู่ในไม่กี่วินาที) จากนั้นสำรองข้อมูลทั้งหมดอย่างต่อเนื่องตามลำดับในนาที / ชั่วโมงต่อไปนี้ จากนั้นคืนค่าทั้งหมดเหล่านั้นบนเซิร์ฟเวอร์ที่แตกต่างกันและเปลี่ยนกลับเป็นภาพรวม AFAIK สถานการณ์นี้เป็นไปไม่ได้เนื่องจากไม่สามารถสำรองสแน็ปช็อตพร้อมกับฐานข้อมูล พวกเขาสามารถย้อนกลับได้ในสถานที่เท่านั้นบนเซิร์ฟเวอร์ที่พวกเขาถูกสร้างขึ้น นอกจากนี้พวกเขาต้องการ Enterprise Edition ซึ่งฉันไม่มีสำหรับลูกค้าทุกคน

PS2:หากคุณรู้จักโซลูชันของ บริษัท อื่นที่สามารถสร้างการสำรองข้อมูลแบบ cross-db ที่ตรงกันได้โปรดพูดถึงมัน


SQL Server รุ่นใดสำหรับสถานการณ์นี้ที่มีเอดิชัน? ขนาดฐานข้อมูลที่เรากำลังพูดถึงอยู่ที่นี่ประมาณเท่าไหร่?
KASQLDBA

คำตอบ:


12

ฉันต้องการสำรองข้อมูล 10-20 SQL Server dbs ที่ใช้พร้อมกันโดยแอปองค์กรเดียวในขณะที่พวกเขาออนไลน์ในลักษณะที่จะคืนค่าพวกเขากลับสู่สถานะที่มีการซิงโครไนซ์กับ dbs ทั้งหมดเป็นส่วนใหญ่

สิ่งที่คุณกำลังมองหาคือการสำรองข้อมูลที่สอดคล้องกันในฐานข้อมูลลูกค้าของคุณทั้งหมดคุณควรใช้การสำรองข้อมูลแบบเต็มพร้อมกับMarked Transactions(เน้นการเพิ่มตัวหนา):

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

ป้อนคำอธิบายรูปภาพที่นี่

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

ฉันต้องการโซลูชันสำหรับ SQL Server รุ่น 2008 R2 และใหม่กว่า ขนาดของ DB สูงถึง 50 GB ต่อเดซิเบลและเวลาในการสำรองข้อมูลทั้งหมดมีแนวโน้มมากกว่า 1-2 ชั่วโมง

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

คุณควรใช้การบีบอัดการสำรองข้อมูลเช่นเดียวกับการเปิดใช้งานเริ่มต้นไฟล์ทันที

เอ่ยถึง


1
เพียงเล็กน้อยการnot usingบีบอัดข้อมูลสำรองสามารถเพิ่มความเร็วในการสำรองข้อมูลได้มากขึ้น ... หากคุณมีพื้นที่เก็บข้อมูลสำหรับมัน

4
ในการจัดเก็บที่ช้ากว่าฉันสงสัยว่าค่าใช้จ่ายในการบีบอัดจะมากกว่าความเป็นธรรมเนื่องจากเวลาที่บันทึกใน I / O จะมีค่าเกินกว่าเวลาพิเศษที่ใช้ใน CPU ในการจัดเก็บที่เร็วกว่าข้อดีของการบีบอัดนั้นมีน้ำหนักมากขึ้นกับพื้นที่เก็บข้อมูล
Aaron Bertrand

@ShawnMelton ฉันจะเห็นด้วยกับคุณ แต่เมื่อโอนข้อมูลสำรองข้อมูลสำรองที่ถูกบีบอัดจะเร็วกว่ามากในการถ่ายโอน การสำรองข้อมูลจะรวดเร็วโดยไม่ต้องบีบอัด (ขึ้นอยู่กับระบบย่อยของหน่วยเก็บข้อมูล) แต่เมื่อคิดถึงการได้รับประโยชน์จากการบีบอัดฉันมักจะเปิดเครื่องในสภาพแวดล้อมของฉัน
Kin Shah

@ คินฉันไม่คิดว่าการทำธุรกรรม m เป็นวิธีการแก้ปัญหาที่นี่เพราะ: A) ดูเหมือนว่าพวกเขาไม่ได้ออกแบบมาเพื่อทำงานบนเซิร์ฟเวอร์ที่แตกต่างจากเซิร์ฟเวอร์ที่สำรองข้อมูลไว้ บางคนได้รับมันโดยการคืนค่าแถวให้เป็น logmarkhistory แต่ฉันไม่สามารถใช้พฤติกรรมที่ไม่มีเอกสาร B) ฉันไม่สามารถเปลี่ยนรหัสสำหรับแอพของฉันเพื่อเพิ่มการรองรับสำหรับธุรกรรม m ฉันจะต้องเริ่มต้นธุรกรรม m พิเศษจากสคริปต์สำรองของฉันและหากฉันเข้าใจถูกต้องพวกเขาจะหยุดการทำธุรกรรมใหม่ทั้งหมดจนกว่ารายการที่เก่ากว่าเครื่องหมายจะถูกส่ง สิ่งนี้มีผลต่อความพร้อมใช้งานของแอพซึ่งเป็นตัวอุดหลัก
Bogdan

3
มันค่อนข้างชัดเจนว่าคุณกำลังขออะไรอยู่ที่นี่ ก่อนอื่นคุณมีสภาพแวดล้อมในการกู้คืนที่สมบูรณ์จากนั้นคุณมีลูกค้าหลายรายด้วยกลยุทธ์การสำรองข้อมูลของตนเอง คุณไม่ต้องการเปลี่ยนเลเยอร์ของแอปพลิเคชันคุณไม่ต้องการใช้การสำรองข้อมูลของ SQL และคุณไม่ต้องการการจำลองแบบระดับบล็อกใด ๆ แต่คุณคาดหวังวิธีแก้ปัญหา ความต้องการเปลี่ยนไปทุกอย่างที่เกี่ยวข้องกับ 'งาน' ที่เกิดขึ้นจริงถูกปฏิเสธ น่าเสียดายที่เราไม่มีเว็บไซต์ magic.stackexchange.com
Tom V - ลอง topanswers.xyz

7

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

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

มันอาจเป็นวิธีแก้ปัญหาของวงดนตรี แต่จะตรงตามข้อกำหนดและค่อนข้างง่ายและราคาไม่แพง

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

โปรดอ่านสิ่งที่MrDenny พูดถึงเกี่ยวกับเรื่องนี้


ขอให้เรายังคงอภิปรายนี้ในการแชท
bogdan

1

ภายใต้สถานการณ์ที่คุณระบุไว้คุณได้ดูข้อมูลสำรอง VSS ผ่านผู้ให้บริการ VSS ที่เป็นบุคคลที่สามหรือ Microsoft หรือไม่ คุณสามารถทำการสำรองข้อมูล COPY_ONLY ซึ่งจะไม่ทำลายห่วงโซ่การกู้คืนการผลิตของคุณและคุณควรจบด้วยการสำรองข้อมูลของฐานข้อมูลทั้งหมดที่คุณสามารถกู้คืนจากที่อื่นภายในระยะเวลาที่เหมาะสม โปรดทราบว่าการสำรองข้อมูล VSS มีกลไกและข้อผิดพลาดบางอย่างเหมือนกันกับภาพรวมฐานข้อมูลซึ่งฐานข้อมูลที่ใช้งานอยู่มากอาจทำให้เกิดปัญหาพื้นที่ดิสก์เนื่องจากไฟล์ที่กระจัดกระจายที่ใช้ ลองดูที่ทรัพยากร TechNet กับบริการนักเขียนของ SQL ที่นี่และสำรองข้อมูล VSS ของ SQL Server ที่นี่

ในการทำสิ่งนี้ผ่าน Windows Server Backup คุณจะทำตามขั้นตอนของตัวช่วยสร้างสำหรับการสำรองข้อมูลด้วยตนเองเพื่อให้แน่ใจว่าคุณเลือก VSS copy backup ในการตั้งค่ากำหนดเองภายใต้การตั้งค่า VSS นี่จะทำให้การสำรองข้อมูล Windows Server ของคุณไม่รบกวนการสำรองข้อมูลอื่น ๆ ที่เกิดขึ้นบนเซิร์ฟเวอร์ ดูการอ้างอิง Windows Server Backupสำหรับรายละเอียด


ฉันถือว่า VSS เป็นอีกทางเลือกหนึ่งในการถ่ายภาพดิสก์ที่ระดับไฮเปอร์ไวเซอร์ / SAN ฉันรวมกรณีเหล่านี้ไว้ในโซลูชันของฉัน (โพสต์ตอนนี้เป็นคำตอบเพิ่มเติม) สำหรับลูกค้าที่ใช้การกู้คืนอย่างง่าย
Bogdan

1

ฉันจะให้คะแนน @ Kin's เป็นคำตอบเพราะเป็นสิ่งแรกที่ตรงกับสิ่งที่คำถามถาม ฉันสิ้นสุดการค้นหาคำตอบเพิ่มเติมและฉันจะอธิบายด้านล่าง

สำหรับลูกค้าที่ใช้รูปแบบการกู้คืนอย่างง่ายฉันจะต้องใช้สำเนาของ MDF และ LDF ที่ดึงมาจากสแน็ปช็อตดิสก์ชั่วคราวที่ถ่ายที่ T0 ที่ระดับไฮเปอร์ไวเซอร์หรือระดับ SAN ฉันสามารถใช้สิ่งเหล่านี้เพื่อกู้คืน dbs ที่สถานะจาก T0

สำหรับลูกค้าที่ใช้รูปแบบการกู้คืนแบบเต็มฉันจะต้องการ:

  • คัดลอกจากกระบวนการสำรองข้อมูล MAIN ของการสำรองข้อมูลเต็มรูปแบบล่าสุดเสร็จสิ้นก่อนที่ T0 + จะมีการสำรองข้อมูลบันทึกธุรกรรมที่ตามมาซึ่งครอบคลุม T0 ฉันสามารถทำการกู้คืนเวลาเป็น T0 ได้

  • เข้าถึงเพื่อCOPY_ONLYสำรองข้อมูลสำรองของฉันเอง ฉันจะเริ่มต้นทั้งหมดในแบบคู่ขนานที่ T0 ซึ่งควรใช้เวลาไม่เกินสองสามวินาทีและเป็นข้อกังวลหลักของฉันที่ 1 จากนั้นในการกู้คืนฉันจะทำการกู้คืนจุดหนึ่งไปยังFirstLSNจากข้อมูลสำรองแต่ละครั้ง ความสวยงามของสิ่งนี้คือมันไม่ต้องการให้ฉันมีปฏิสัมพันธ์กับกระบวนการสำรองข้อมูลหลักซึ่งเป็นข้อกังวลอื่น ๆ ของฉันพวกเขาสามารถตัดทอนบันทึกได้ในขณะที่การCOPY_ONLYสำรองข้อมูลของฉันทำงานอยู่โดยไม่กระทบกับการเชื่อมโยงกัน


0

ฉันทำเช่นนี้ปีละหลายครั้งสำหรับ QA และสภาพแวดล้อมอื่น ๆ ที่เป็นสำเนาของการผลิต สำหรับการกู้คืนโหมดการกู้คืนเต็มรูปแบบเป็นสิ่งที่จำเป็นจริงๆและการกู้คืนจนถึงจุดที่ใช้งานได้ดี นอกจากนี้ยังมีการจำลองแบบจำนวนมากและหายากที่เรามีข้อผิดพลาด 'แถวไม่พบ' หลังจากเรียกคืนไปยังจุดในเวลา นอกจากนี้เรายังใช้วิธี SAN clone / snapshot สำหรับสำเนาของการผลิตที่ห่างไกลทางภูมิศาสตร์และยังใช้งานได้ดีสำหรับการซิงโครไนซ์ฐานข้อมูล

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