การสำรอง SQL DB บ่อยขึ้น


10

ขณะนี้ฉันมีงานที่กำหนดเวลาไว้ซึ่งจะปิดไฟทุกคืนเวลา 2:00 น. ที่เรียก SQLCMD.exe และส่งสคริปต์. sql เพื่อเรียกใช้การสำรองข้อมูล (แสดงด้านล่าง) เราเป็น บริษัท เล็ก ๆ ที่มีความต้องการเพิ่มขึ้นเนื่องจากการเติบโตที่สำคัญในด้านธุรกิจ การสูญเสียข้อมูล 1 วัน ณ จุดนี้จะมีราคาหลายหมื่นดอลลาร์เทียบกับสองร้อยครั้งในปีที่แล้ว จนกว่าฉันจะสามารถย้ายแพลตฟอร์ม DB นี้ไปยังโซลูชันอื่นที่มีการทำมิเรอร์ข้อมูลกับความซ้ำซ้อนที่สำคัญเช่น SQL Azure สิ่งที่ดีที่สุดที่ฉันสามารถทำได้เพื่อรับการสำรองข้อมูลบ่อยขึ้นคืออะไร สคริปต์ด้านล่างนี้บังคับให้ฐานข้อมูลออฟไลน์หรือไม่ ฉันสามารถเรียกใช้สคริปต์นี้กับผู้ใช้โต้ตอบกับฐานข้อมูลได้หรือไม่

USE CompanyCRM;
GO
BACKUP DATABASE CompanyCRM
TO DISK = 'D:\CRMBackups\CompanyCRMCRM.Bak'
   WITH FORMAT,
      MEDIANAME = 'CompanyCRM_Backup',
      NAME = 'Full Backup of CompanyCRM';
GO

ปรับปรุง

ว้าวเห็นได้ชัดว่าเป็นชุมชน DBA ที่อุทิศตนมากกว่านี้ ขอบคุณสำหรับคำติชม สิ่งเดียวที่ขาดหายไปคือ "ชำนาญ" ฉันได้แสดงคำสั่ง SQL ด้านบนที่ฉันใช้เพื่อทำการสำรองข้อมูลรายวัน แต่ตัวอย่างการสำรองข้อมูลบันทึกเพิ่มเติมคือ MIA นี่ไม่ใช่ DB ขนาดใหญ่ซึ่งปัจจุบันรันบน SQLExpress เมื่อฉันพูด HA หรือ SQL Azure ฉันหมายถึงสถาปัตยกรรมโดยเฉพาะที่เราไม่ได้เป็นธุรกิจขนาดเล็ก อินสแตนซ์นี้กำลังทำงานบนเซิร์ฟเวอร์ของเราเท่านั้น หากเซิร์ฟเวอร์นั้นล่มเวลาในการกู้คืนของเราจะกลายเป็นจุดผสาน นี่คือเหตุผลที่ SQL Azure กลายเป็นที่ดึงดูด


แก้ไขคำตอบของฉันในการอัปเดตของฉันหวังว่าจะเป็นประโยชน์

คำตอบ:


5

แก้ไขจากการอัปเดตของคุณ

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

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

คำสั่งสำรองข้อมูลต่าง:


USE CompanyCRM; 
GO 
BACKUP DATABASE CompanyCRM 
   TO DISK = 'D:\CRMBackups\CompanyCRMCRM_diff.Bak'    
WITH FORMAT, DIFFERENTIAL,
MEDIANAME = 'CompanyCRM_Backup',       
NAME = 'Full Backup of CompanyCRM'; 
GO 

1
@Shawn: OP กล่าวว่า "การสูญเสียข้อมูล 1 วัน ณ จุดนี้จะมีค่าใช้จ่ายหลายหมื่นดอลลาร์เทียบกับสองร้อยครั้งในปีที่แล้ว" ซึ่งเขาบอกว่าเขาสามารถสูญเสียข้อมูล 1 วันไปได้!
แมเรียน

8
  • การสำรองข้อมูลใน SQL Server ไม่รบกวน นั่นคือฐานข้อมูลยังคงใช้งานได้ อ่านเอกสาร
  • ทำการสำรองข้อมูลเต็มรูปแบบทุกวันตามด้วยการจัดส่ง (คัดลอกออก) สำรองข้อมูล LOG (อีกครั้งเอกสารมี ... เอกสารประกอบ) มากขึ้นเป็นประจำทุก 15 นาทีหรือมากกว่านั้น

4
ฉันคิดว่าการสำรองข้อมูลเป็นสิ่งที่คุณไม่ต้องการวิธีการ แต่การอ่านเอกสารฉบับเต็ม - เป็นเรื่องสำคัญทางธุรกิจและเป็นเรื่องจริงจัง - สำคัญ ไม่ทำอาหารสไตล์ไข่ จ้างมืออาชีพ
TomTom

2
น่าเสียดายที่ฉันไม่สามารถโหวตคำตอบลงบนเว็บไซต์นี้ ...
RSolberg

1
@RSolberg: คำตอบของ TomTom นั้นถูกต้องพร้อมกับคำแนะนำอื่น ๆ ที่คุณได้รับแล้ว ฉันขอแนะนำให้คุณไม่คาดหวังว่าผู้เผชิญเหตุคนใดคนหนึ่งจะแสดงไวยากรณ์พื้นฐานของการสำรองข้อมูลให้คุณจริงๆ แม้ว่าฉันจะเห็นชอว์นก็ใจดีพอที่จะทำเช่นนั้นได้ ในการออกแบบกลยุทธ์การสำรองข้อมูลนั้นไม่เพียงพอ คุณต้องจับคู่กับกลยุทธ์ RESTORE เพื่อให้ทุกอย่างใช้ได้เมื่อคุณต้องการ
แมเรียน

2
@RSolberg: ขอโทษที่ทำให้คุณผิดหวัง สิ่งนี้ไม่ได้ตั้งใจ แต่ชุมชนนี้ไม่ช่วยได้อย่างไร คุณมีคำตอบที่ดีและถูกต้อง (และความคิดเห็น) ข้อความของคุณคือ: "การสูญเสียข้อมูล 1 วัน ณ จุดนี้จะมีราคาหลายหมื่นดอลลาร์เทียบกับสองร้อยครั้งในปีที่แล้ว" ดังนั้นคุณจึงจำเป็นต้องมีกลยุทธ์การสำรองข้อมูลและการคืนค่าที่แน่นหนาดังนั้นคุณจะไม่ไปถึงที่นั่น กลยุทธ์ที่แข็งแกร่งมาจากการรู้พื้นฐานที่ดี ซึ่งมาจากการอ่านและทำความเข้าใจในคู่มือ ขออภัยถ้าคุณเข้าใจสิ่งอื่น!
แมเรียน

2
ฉันเห็นด้วยกับ @RSolberg ว่าคำตอบส่วนใหญ่ที่นี่ไม่แสดง "วิธี" ที่จะทำ แต่นั่นก็เป็นเพราะคำถามนั้นยังขาดรายละเอียดบางอย่าง "อะไร" คุณไม่เข้าใจรัสเซล คุณต้องบอกเราเพิ่มเติมเกี่ยวกับสิ่งที่คุณต้องการ แต่ฉันเห็นด้วยกับคุณว่าเว็บไซต์ที่นี่ไม่ควรจะเกี่ยวกับ "RTFM n00b" นอกจากนี้เมื่อคุณชี้ให้เห็นคุณมี 10k ในStack Overflowดังนั้นคุณจึงเข้าใจการตั้งค่าสถานะความคิดเห็นที่หยาบคายหรือก่อกวน ในอนาคตคุณควรทำอย่างนั้นเร็วกว่าที่จะเดือดพล่าน
jcolebrand

6

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

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

หากคุณสามารถสูญเสียข้อมูลมูลค่า 5 นาทีคุณอาจต้องการสำรองข้อมูลเต็มรูปแบบทุกวันและสำรองข้อมูลบันทึกธุรกรรมทุก 5 นาที หากคุณสูญเสียข้อมูลมูลค่า 15 นาทีคุณจะต้องสำรองข้อมูลทั้งหมดและสำรองข้อมูลบันทึกธุรกรรมทุก 15 นาที

ตัวเลือกอื่นจะทำการสำรองข้อมูลรายสัปดาห์แบบเต็มสำรองข้อมูลรายวันและสำรองข้อมูลบันทึกธุรกรรมทุก ๆxนาทีตามที่ฉันพูดถึงข้างต้น

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

การสำรองข้อมูลทั้งหมดที่ใช้ฐานข้อมูล BACKUP และคำสั่ง BACKUP LOG นั้นเสร็จสิ้นทางออนไลน์และจะไม่หยุดไม่ให้ผู้ใช้เข้าถึงฐานข้อมูล


จริง ๆ แล้วฉันสามารถประเมินจำนวนข้อมูลที่เราสามารถสูญเสียได้ ธุรกิจขนาดเล็กต้องการคนที่สวมหมวกหลายใบเนื่องจาก CIO I มักจะเกี่ยวข้องกับการตัดสินใจทางธุรกิจทุกวัน
RSolberg

1
นั่นจะทำให้การสนทนาสั้นลงมาก
mrdenny

3

สมมติว่าคุณมีสถานการณ์ทางธุรกิจทั่วไปโดยมีช่วงเวลาที่คึกคักที่สุดคือ 09.00 น. - 17.00 น. วันจันทร์ถึงวันศุกร์ จากนั้นฉันจะแนะนำ: สำรองข้อมูลทั้งหมดในคืนวันอาทิตย์ สำรองข้อมูลต่างกันเวลา 8:00 น., 18:00 น. และ 1 น. (เพื่อลดเวลาการกู้คืน) บันทึกการสำรองข้อมูลทุกชั่วโมงหรือขึ้นอยู่กับสิ่งที่ธุรกิจของคุณต้องการ

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

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


2

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


แท็กหายไปนี่ไม่ใช่ฐานข้อมูลขนาดใหญ่ มันกำลังทำงานบนอินสแตนซ์ SQLExpress
RSolberg

1
หมื่นดอลลาร์ทำงานบน Express? ! ที่น่าสนใจ
Andrei Rînea

ไม่ได้จริงๆ ขึ้นอยู่กับสิ่งที่คุณจัดเก็บ (ไม่มีข้อความไม่มีไบนารี) - นั่นคือ 10 กิกะไบต์ของข้อมูล คุณสามารถใช้ระบบบัญชีสำหรับ บริษัท ขนาดใหญ่ - บริษัท ขนาดใหญ่อย่างจริงจัง - ใน 10 กิกะไบต์ ร้านค้าออนไลน์ที่มียอดสั่งซื้อ 100,000 คำสั่งต่อวันสามารถทำร้านค้าได้อย่างง่ายดายใน 10 กิกะไบต์
TomTom

1

คุณสามารถคลาวด์ซิงก์โฟลเดอร์สำรองของคุณในเวลากลางคืนเพื่อจัดเก็บนอกสถานที่ได้หรือไม่? เนื่องจากฉันค่อนข้างแน่ใจว่านี่เป็น บริษัท ด้านการดูแลสุขภาพมีความปลอดภัยเพียงพอสำหรับการปฏิบัติตามข้อกำหนดของ HiPA หรือไม่ หรืออาจเป็นเพียงแค่การเข้ารหัสซุปเปอร์?

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


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