กู้คืนฐานข้อมูลโดยใช้ GUI - ไฟล์ผิดเพื่อกู้คืน


20

ฉันแค่ล้อเล่นกับอินเทอร์เฟซกราฟิก SSMS และศึกษาตัวเลือกของงาน "กู้คืน"

สิ่งหนึ่งที่ฉันสังเกตเห็นคือเมื่อฉันคลิกที่ "สร้างสคริปต์" บรรทัดแรกของแบบสอบถามคือ:

 RESTORE DATABASE [MyDatabase] FROM  DISK = N'Server_Patch\Database_name_LOGSHIPPING.BKP' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 5 ( and a lot of log backups for point in time )

ตกลงไม่มีปัญหา แต่ฉันกำลังสำรองข้อมูลรายวันของฐานข้อมูลนี้ นี่Database_name_LOGSHIPPING.BKPคือชื่อของไฟล์ที่ฉันสร้างไว้สำหรับบันทึกการจัดส่งเมื่อหนึ่งเดือนที่แล้ว

ทำไมเมื่อฉันพยายามใช้อินเทอร์เฟซกราฟิก SSMS เพื่อคืนค่าการสำรองข้อมูลชี้ไปที่แฟ้มสำรองนี้ ฉันไม่ได้มีไฟล์นี้อีกต่อไป


ด้วยแบบสอบถามนี้จาก MSSQLTIPS ฉันสามารถดูการสำรองข้อมูลทั้งหมดจากฐานข้อมูลนี้:

SELECT 
CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server, 
msdb.dbo.backupset.database_name, 
msdb.dbo.backupset.backup_start_date, 
msdb.dbo.backupset.backup_finish_date, 
msdb.dbo.backupset.expiration_date, 
CASE msdb..backupset.type 
WHEN 'D' THEN 'Database' 
WHEN 'L' THEN 'Log' 
END AS backup_type, 
msdb.dbo.backupset.backup_size, 
msdb.dbo.backupmediafamily.logical_device_name, 
msdb.dbo.backupmediafamily.physical_device_name, 
msdb.dbo.backupset.name AS backupset_name, 
msdb.dbo.backupset.description 
FROM msdb.dbo.backupmediafamily 
INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id 
WHERE (CONVERT(datetime, msdb.dbo.backupset.backup_start_date, 102) >= GETDATE() - 7)   and  msdb..backupset.type ='D'
ORDER BY 
msdb.dbo.backupset.database_name, 
msdb.dbo.backupset.backup_finish_date 

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

มีอะไรผิดปกติหรือเปล่า ฉันไม่ได้ใช้ COPY เท่านั้น


EDIT2:

ฉันทำการสำรองข้อมูลด้วยตนเองทุกวันเพื่อทดสอบและด้วยวิธีนี้ SQL Server จะเลือกการสำรองข้อมูลเก่าที่ไม่มีอยู่อีกต่อไป เมื่อเรียกใช้RESTORE HEADERONLY...จะมีข้อความระบุว่า (ไม่มีอยู่จริง)


แก้ไข 3:

นี่คือการพิมพ์ GUI:

1 ป้อนคำอธิบายรูปภาพที่นี่ ว้าวว้าวว้าวรอสักครู่ !

ฐานข้อมูลนี้เป็นการกู้คืนจากเซิร์ฟเวอร์อื่น (เซิร์ฟเวอร์เดียวกัน, อินสแตนซ์ต่างกัน) Huuum ... ฉันคิดว่าปัญหาอยู่ที่นี่

พวกคุณเห็นบน "เซิร์ฟเวอร์" ในภาพที่สองได้ไหม? มันมี 2 เซิร์ฟเวอร์ ฉันใช้อันนี้กับอินสแตนซ์ชื่อ GDLIC2014

บท:

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

สคริปต์สำรอง:

DECLARE @Patch varchar(1000)

SELECT @Patch = (SELECT 'PATCH\FULL\DATABASE_ ' + convert(varchar(500),GetDate(),112) + '.bkp') 

BACKUP DATABASE DATABASE TO DISK=@Patch with compression

ด้วยแบบสอบถามเดียวกันจาก MSSQLTIPS ฉันสามารถค้นหาผลลัพธ์เหล่านี้โดยใช้โดยไม่มีช่วงวันที่:

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

สี่เหลี่ยมสีแดงเป็นการสำรองข้อมูลที่ไม่ถูกต้องจากอินสแตนซ์ที่เก่ากว่าสี่เหลี่ยมสีน้ำเงินเป็นการสำรองข้อมูลล่าสุดที่ใช้ (GUI ควรใช้งาน)

แก้ไข 4:

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

SELECT TOP 100
s.database_name,
m.physical_device_name,
CAST(CAST(s.backup_size / 1000000 AS INT) AS VARCHAR(14)) + ' ' + 'MB' AS bkSize,
CAST(DATEDIFF(second, s.backup_start_date,
s.backup_finish_date) AS VARCHAR(4)) + ' ' + 'Seconds' TimeTaken,
s.backup_start_date,
CAST(s.first_lsn AS VARCHAR(50)) AS first_lsn,
CAST(s.last_lsn AS VARCHAR(50)) AS last_lsn,
CASE s.[type]
WHEN 'D' THEN 'Full'
WHEN 'I' THEN 'Differential'
WHEN 'L' THEN 'Transaction Log'
END AS BackupType,
s.server_name,
s.recovery_model
FROM msdb.dbo.backupset s
INNER JOIN msdb.dbo.backupmediafamily m ON s.media_set_id = m.media_set_id
WHERE s.database_name = DB_NAME() -- Remove this line for all the database
ORDER BY backup_start_date DESC, backup_finish_date
GO

EDIT5:

มีบางอย่างในการรีสตาร์ทส่วนหัวของฐานข้อมูล

(ฉันหมดความคิด)



1
คุณได้ตั้งค่าการติดตามแล้วเรียกใช้ผ่านตัวเลือก GUI เพื่อจับภาพว่า SSMS ได้รับข้อมูลหรือไม่ อาจจะเร็วกว่า ...
Steve Mangiameli

1
@RafaelPiccinelli - ฉันรู้สึกว่ามีบางสิ่งที่เรียบง่ายกำลังถูกมองข้าม แต่ไม่แน่ใจว่ามันคืออะไร คุณกู้คืนฐานข้อมูล msdb จากอินสแตนซ์ GDLIC2014 ดั้งเดิมหรือไม่ มีบางอย่างกำลังใช้สตริงการเชื่อมต่อหรือเส้นทางผิดหรือเปล่า? แน่นอนว่า SQL Server ไม่ได้สร้างข้อมูลสำหรับการสำรองและเรียกคืน (นอกจากนี้มันเป็นเรื่องที่น่าสนใจที่คุณจะกู้คืน _2.mdf, _3.mdf และ _4.mdf แต่ไม่ใช่. mdf หรือต่อท้ายแบบไม่ต่อท้าย)
RLF

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

สวัสดี @ ต่อต้านรหัสผ่านที่อ่อนแอ ไม่ไม่. ฉันไม่ได้ใช้ GUI ฉันค้นหาลำดับบันทึกและฉันทำงานกับมัน ฉันแค่อยากรู้เกี่ยวกับ GUI แต่จากนั้นฉันก็เห็นปัญหานี้ ฉันพยายามอยู่ห่างจาก GUI มากที่สุดเท่าที่จะทำได้
Racer SQL

คำตอบ:


1

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

หากคุณต้องการย้ายที่ผ่านมาคุณสามารถล้างประวัติสำรองของคุณผ่านทางEXEC [msdb].[dbo].[sp_delete_backuphistory] @oldest_date=getdate()(ขึ้นอยู่กับครั้งล่าสุดที่คุณเรียกใช้คุณอาจต้องการล้างข้อมูลในแต่ละครั้งในแต่ละเดือน) จากนั้นเลือกใหม่ทั้งหมดเป็นต้น จะสงสัยว่าสิ่งนี้จะรีเซ็ต GUI เพื่อใช้การสำรองข้อมูลที่เหมาะสมในอนาคต

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


สวัสดี @john ขอบคุณสำหรับคำตอบของคุณ .. ฉันทำ declare @data datetime set @data=getdate() EXEC msdb.dbo.sp_delete_backuphistory @oldest_date=@dataและลบประวัติแล้ว ฉันจะทำแบบทดสอบเพื่อดูว่ามันใช้ได้หรือไม่ ขอขอบคุณ.
Racer SQL

สวัสดี @RafaelPiccinelli มันเหมาะกับคุณหรือไม่?
Kefash

เฮ้ @Kefash ฉันคิดว่ามันไม่ทำงาน ฉันจำไม่ได้ตอนนี้ แต่ทุกครั้งที่ฉันได้รับคำตอบฉันลุกขึ้นโหวตทันทีและเลือกเป็นคำตอบ ฉันคิดว่ามันไม่ได้แก้ปัญหาของฉัน
Racer SQL

@ จอห์นฉันต้องการการแก้ไขสำหรับ sooo นี้ไม่ดี ปัญหาของคุณได้รับการแก้ไขในที่สุด?
Kefash

@RafaelPiccinelli ฉันจำเป็นต้องแก้ไขปัญหานี้เช่นเมื่อฉันต้องการกู้คืนไปยังจุดที่ต้องบอกว่าเพิ่มฐานข้อมูลลงใน HAG อาจเป็นเรื่องที่น่ารำคาญ ฉันรู้ว่าสิ่งนี้สามารถทำได้โดยไม่ต้องใช้ GUI แต่จะมีการบันทึกธุรกรรมทุก 10 นาที อะไรคือวิธีการอื่นของคุณ?
Kefash
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.