Khôi phục dữ liệu sau khi xóa trong SQL Server

--Tạo một DBName mới
USE master
GO
IF DB_ID('TestDB') IS NOT NULL
DROP DATABASE TestDB
GO
CREATE DATABASE TestDB
GO


--Tạo 1 bảng mới trong DB vừa tạo
USE TestDB
GO
CREATE TABLE dbo.Table1(ID INT IDENTITY, Ten VARCHAR(30) )
GO
INSERT INTO dbo.Table1(Ten)
SELECT 'Nguyen Van A' UNION ALL
SELECT 'Nguyen Van B' UNION ALL
SELECT 'Nguyen Van C'
GO


--Thực hiện full backup: lúc 2:52 ph
BACKUP DATABASE TestDB TO DISK = 'D:\Temp\TestDB.bak' WITH INIT
GO


--Thêm dữ liệu mới sau khi full backup: 3h15
INSERT INTO dbo.Table1(Ten)
SELECT 'Nguyen Van D'
UNION ALL
SELECT 'Nguyen Van E'
GO


--Thời điểm nào đó nhỡ tay xóa nhầm dữ liệu: 3h18
DELETE FROM dbo.Table1
GO


--Đóng kết nói DB (không cho ai connect ngoài mình ra, để đảm bảo k có cập nhật gì tới db)
ALTER DATABASE TestDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
--Sau đó ghi lại thời điểm xảy ra sự cố: 2011-06-15 15:12:28.950
SELECT GETDATE()
GO


--Việc tiếp theo là backup log:
BACKUP LOG TestDB TO DISK = 'D:\Temp\TestDB.trn' WITH INIT
GO


--Sau đó khôi phục lại database theo thứ tự bản full backup trước rồi đến bản log backup:
USE master
GO
RESTORE DATABASE TestDB FROM DISK = 'D:\Temp\TestDB.bak' WITH NORECOVERY –dòng này nhớ chạy nhớ chờ 1 lúc cho xong mới chạy dòng tiếp theo:
GO
RESTORE DATABASE TestDB FROM DISK = 'D:\Temp\TestDB.trn' WITH STOPAT='2011-06-15 15:16:00'
GO


--Giờ thì select xem đã lấy được dữ liệu chưa nhé?
SELECT * FROM Table1


--Bước cuối cùng là chuyển lại database sang chế độ bình thường
ALTER DATABASE TestDB SET MULTI_USER