- 很多時候我們不小心錯誤delete了一下,或者update一下怎麼辦,或者直接把資料庫刪除了,怎麼辦呢,是不是就一定沒有辦法呢?下面讓我來教大家我現學現賣的兩招。
- 當我們不小心刪除表怎麼辦?
做之前我們要設定資料庫復原模式:
設定成完整,不要是簡單模式。
首先我們建立一個表:插入幾條資料
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的資料。
如果這個數值對不上,我們自求多福吧,恢複不了了。。。。