โดยค่าเริ่มต้นทุกคนRESTORE DATABASE
มาพร้อมกับการRECOVERY
ตั้งค่า ตัวเลือก 'NORECOVERY' โดยทั่วไปจะบอก SQL Server ว่าฐานข้อมูลกำลังรอไฟล์กู้คืนเพิ่มเติม (อาจเป็นไฟล์DIFFและLOGไฟล์และอาจรวมถึงไฟล์สำรองหางบันทึกหากเป็นไปได้) ตัวเลือก 'กู้คืน' เสร็จสิ้นธุรกรรมทั้งหมดและให้ฐานข้อมูลพร้อมที่จะทำธุรกรรม
ดังนั้น:
- หากฐานข้อมูลของคุณตั้งค่าด้วยแบบจำลองการกู้คืนSIMPLEคุณสามารถทำการกู้คืนแบบเต็มด้วย
NORECOVERY
ตัวเลือกเมื่อคุณมีการสำรองข้อมูลDIFF ไม่อนุญาตให้มีการสำรองข้อมูลLOGในฐานข้อมูลแบบจำลองการกู้คืนSIMPLE
- มิฉะนั้นถ้าฐานข้อมูลของคุณจะถูกตั้งค่ากับเต็มหรือBULK เข้าสู่ระบบรูปแบบการกู้คืนคุณสามารถดำเนินการเต็มรูปแบบเรียกคืนตามด้วย
NORECOVERY
ตัวเลือกแล้วทำการDIFFตามมาด้วยNORECOVERY
และที่สุดท้ายที่ดำเนินการเข้าสู่ระบบเรียกคืนด้วยRECOVERY
ตัวเลือก
โปรดจำไว้ว่าสุดท้ายคืน QUERY ต้องมีRECOVERY
OPTION อาจเป็นวิธีที่ชัดเจนหรือไม่ ใน therms ของ T-SQL สถานการณ์:
1
USE [master]
GO
RESTORE DATABASE Database_name
FROM DISK = N'\\path_of_backup_file.bak WITH FILE = 1, [REPLACE],NOUNLOAD,
RECOVERY -- This option could be omitted.
GO
ด้วยตัวเลือก REPLACE จะต้องใช้ด้วยความระมัดระวังเนื่องจากอาจทำให้ข้อมูลสูญหายได้
หรือถ้าคุณทำการสำรองข้อมูลแบบเต็มและ DIFF คุณสามารถใช้สิ่งนี้
USE [master]
GO
RESTORE DATABASE Database_name
FROM DISK = N'\\path_of_backup_file.bak' WITH FILE = 1,
NOUNLOAD,NORECOVERY
GO
RESTORE DATABASE Database_name
FROM DISK =N'\\path_of_**diff**backup_file.bak' WITH FILE = 1,
NOUNLOAD, RECOVERY
GO
2. USE [master]
GO
-- Perform a Tail-Log backup, if possible.
BACKUP LOG Database_name
GO
-- Restoring a FULL backup
RESTORE DATABASE Database_name
FROM DISK = N'\\path_of_backup_file.bak' WITH FILE = 1,
NOUNLOAD,NORECOVERY
GO
-- Restore the last DIFF backup
RESTORE DATABASE Database_name
FROM DISK = N'\\path_of_DIFF_backup_file.bak' WITH FILE = 1,
NORECOVERY,NOUNLOAD
GO
-- Restore a Log backup
RESTORE LOG Database_name
FROM DISK = N'path_of_LOG_backup_file.trn' WITH FILE = 2,
RECOVERY, NOUNLOAD
GO
แน่นอนคุณสามารถทำการกู้คืนด้วยตัวเลือกSTATS = 10ที่บอกให้ SQL Server รายงานทุก ๆ 10% ให้เสร็จสิ้น
หากคุณต้องการคุณสามารถสังเกตกระบวนการหรือคืนค่าในแบบสอบถามแบบเรียลไทม์ ดังต่อไปนี้:
USE[master]
GO
SELECT session_id AS SPID, command, a.text AS Query, start_time, percent_complete, dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time
FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a
WHERE r.command in ('BACKUP DATABASE','RESTORE DATABASE')
GO
หวังว่าความช่วยเหลือนี้
DROP DATABASE db
คำสั่งผ่าน SSMS และทำงานได้ (ก่อนหน้านี้ฉันใช้ SSMS จากเครื่องอื่นเพื่อออกคำสั่ง) ฉันคาดเดาโซลูชันอื่น ๆ ก็จะใช้ได้เช่นกัน