做之前我們要設置數據庫恢復模式:
設置成完整,不要是簡單模式。
首先我們創建一個表:插入幾條數據
CREATE DATABASE test1
CREATE TABLE A1
(
ID INT PRIMARY KEY
)
INSERT INTO dbo.A1 ( ID )
VALUES ( 0 )
INSERT INTO dbo.A1( ID )
VALUES ( 2)
INSERT INTO dbo.A1( ID )
VALUES ( 3)
INSERT INTO dbo.A1 ( ID )
VALUES ( 4 )
INSERT INTO dbo.A1( ID )
VALUES ( 5 )
SELECT * FROM dbo.A1
我們現在有五條數據了,我們對數據做一個備份
做任何差異備份,和日志之前,一定要做一個完整備份。
我們再插入一條數據
INSERT INTO dbo.A1
( ID )
VALUES ( 6)
SELECT * FROM dbo.A1我們看看現在有六條數據了。
關鍵來了:不小心
數據刪除了,一條也沒有了怎麼辦?
不要慌趕快備份啊。備份數據之後,我們開始來恢復,記住一定要備份在恢復之前哦。這裡要做的是日志備份,做完日志備份再恢復數據。
這裡要注意時間,我們要選擇恢復時間,也就是在你刪除的前一刻,然後我們看看6條數據又回來了。
3. 我們刪除表數據可以恢復,萬一你把數據庫服務down掉,然後刪除了數據庫文件沒了呢?
先建表插入數據如下:
現在有五條數據,然後完整備份,再插入一條數據。
現在有6條數據,做個日志備份
再插入一條數據
然後把數據庫服務停掉,然後我們把數據庫文件移除掉。
然後把數據庫文件放到一個新建的文件夾裡面去,但是日志文件還在的,如果日志文件也沒有了,那就求蒼天保佑吧,這也是我們把數據文件和日志文件分開的好處之一。
然後我們再啟動服務
這個時候test1數據庫在,但是你打開的時候一定會報錯的。
那麼恢復之前我們需要做一個日志尾備份,因為數據庫不能用,所以我們要用。
backup log test1 to disk='c:\test1.bak' with no_truncate;
我們查看一下我們的備份。
恢復之前要做一下查看。
檢查備份完整性
restore verifyonly from disk='c:\test1.bak' ;
查看備份文件數目
restore filelistonly from disk='c:\test1.bak' ;
查看備份記錄次數
restore headeronly from disk='c:\test1.bak' ;
我們會發現這裡的備份次數比備份文件夾多了一個記錄,這是為什麼呢?
是因為我們做了一個日志尾備份。
好了我們來恢復數據吧。
然後我們恢復一個數據庫test2出來了,然後查詢數據
這裡我們只有六條數據了,而不是七條數據,有數據丟失了怎麼辦呢?
原因在:我們可以看到上面我們後台查出的是三條備份次數,但是結果只有兩個備份文件記錄,那是不是我們最後的日志尾沒有了呢?
不是的這時候我們要手動備份了
RESTORE DATABASE [test2] FROM DISK = N'C:\test1.bak' WITH FILE = 1, NORECOVERY, replace
GO
RESTORE LOG [test2] FROM DISK = N'C:\test1.bak' WITH FILE = 2, NORECOVERY
GO
RESTORE LOG [test2] FROM DISK = N'C:\test1.bak' WITH FILE = 3, NORECOVERY
GO
注意:
restore headeronly from disk='c:\test1.bak' ;
上面file=1裡的1是和我們查出來的 1 2 3 對應的。
诶,怎麼test2還在還原呢?
哦,原來最後一個是NOrecovery我們改成Recovery
RESTORE DATABASE [test2] FROM DISK = N'C:\test1.bak' WITH FILE = 1, NORECOVERY, replace
GO
RESTORE LOG [test2] FROM DISK = N'C:\test1.bak' WITH FILE = 2, NORECOVERY
GO
RESTORE LOG [test2] FROM DISK = N'C:\test1.bak' WITH FILE = 3, RECOVERY
GO
哦,數據回來了,看看有七條了。
看到這裡你是否有收獲呢?
最後我們看一份數據
這個數據是不是很有規律啊?
我們可以看到日志備份databasebackuplsn字段數據都是第一份完整備份的checkpoitlsn的數據。
如果這個數值對不上,我們自求多福吧,恢復不了了。