SQL Server復(fù)災(zāi) 你懂了嗎?
1.很多時(shí)候我們不小心錯(cuò)誤delete了一下,或者update一下怎么辦,或者直接把數(shù)據(jù)庫(kù)刪除了,怎么辦呢,是不是就一定沒(méi)有辦法呢?下面讓我來(lái)教大家我現(xiàn)學(xué)現(xiàn)賣(mài)的兩招。
2.當(dāng)我們不小心刪除表怎么辦?
做之前我們要設(shè)置數(shù)據(jù)庫(kù)恢復(fù)模式:
設(shè)置成完整,不要是簡(jiǎn)單模式。
首先我們創(chuàng)建一個(gè)表:插入幾條數(shù)據(jù)
- 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
我們現(xiàn)在有五條數(shù)據(jù)了,我們對(duì)數(shù)據(jù)做一個(gè)備份
做任何差異備份,和日志之前,一定要做一個(gè)完整備份。
我們?cè)俨迦胍粭l數(shù)據(jù)
- INSERT INTO dbo.A1
- ( ID )
- VALUES ( 6)
- SELECT * FROM dbo.A1
我們看看現(xiàn)在有六條數(shù)據(jù)了。
關(guān)鍵來(lái)了:不小心
數(shù)據(jù)刪除了,一條也沒(méi)有了怎么辦?
不要慌趕快備份啊。備份數(shù)據(jù)之后,我們開(kāi)始來(lái)恢復(fù),記住一定要備份在恢復(fù)之前哦。這里要做的是日志備份,做完日志備份再恢復(fù)數(shù)據(jù)。
這里要注意時(shí)間,我們要選擇恢復(fù)時(shí)間,也就是在你刪除的前一刻,然后我們看看6條數(shù)據(jù)又回來(lái)了。
3. 我們刪除表數(shù)據(jù)可以恢復(fù),萬(wàn)一你把數(shù)據(jù)庫(kù)服務(wù)down掉,然后刪除了數(shù)據(jù)庫(kù)文件沒(méi)了呢?
先建表插入數(shù)據(jù)如下:
現(xiàn)在有五條數(shù)據(jù),然后完整備份,再插入一條數(shù)據(jù)。
現(xiàn)在有6條數(shù)據(jù),做個(gè)日志備份
#p#
再插入一條數(shù)據(jù)
然后把數(shù)據(jù)庫(kù)服務(wù)停掉,然后我們把數(shù)據(jù)庫(kù)文件移除掉。
然后把數(shù)據(jù)庫(kù)文件放到一個(gè)新建的文件夾里面去,但是日志文件還在的,如果日志文件也沒(méi)有了,那就求蒼天保佑吧,這也是我們把數(shù)據(jù)文件和日志文件分開(kāi)的好處之一。
然后我們?cè)賳?dòng)服務(wù)
這個(gè)時(shí)候test1數(shù)據(jù)庫(kù)在,但是你打開(kāi)的時(shí)候一定會(huì)報(bào)錯(cuò)的。
那么恢復(fù)之前我們需要做一個(gè)日志尾備份,因?yàn)閿?shù)據(jù)庫(kù)不能用,所以我們要用。
- backup log test1 to disk='c:\test1.bak' with no_truncate;
我們查看一下我們的備份。
恢復(fù)之前要做一下查看。
檢查備份完整性
- restore verifyonly from disk='c:\test1.bak' ;
查看備份文件數(shù)目
- restore filelistonly from disk='c:\test1.bak' ;
查看備份記錄次數(shù)
- restore headeronly from disk='c:\test1.bak' ;
我們會(huì)發(fā)現(xiàn)這里的備份次數(shù)比備份文件夾多了一個(gè)記錄,這是為什么呢?
是因?yàn)槲覀冏隽艘粋€(gè)日志尾備份。
好了我們來(lái)恢復(fù)數(shù)據(jù)吧。
然后我們恢復(fù)一個(gè)數(shù)據(jù)庫(kù)test2出來(lái)了,然后查詢數(shù)據(jù)
這里我們只有六條數(shù)據(jù)了,而不是七條數(shù)據(jù),有數(shù)據(jù)丟失了怎么辦呢?
原因在:我們可以看到上面我們后臺(tái)查出的是三條備份次數(shù),但是結(jié)果只有兩個(gè)備份文件記錄,那是不是我們***的日志尾沒(méi)有了呢?
不是的這時(shí)候我們要手動(dòng)備份了
- 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是和我們查出來(lái)的 1 2 3 對(duì)應(yīng)的。
誒,怎么test2還在還原呢?
哦,原來(lái)***一個(gè)是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
哦,數(shù)據(jù)回來(lái)了,看看有七條了。
看到這里你是否有收獲呢?
***我們看一份數(shù)據(jù)
這個(gè)數(shù)據(jù)是不是很有規(guī)律啊?
我們可以看到日志備份databasebackuplsn字段數(shù)據(jù)都是***份完整備份的checkpoitlsn的數(shù)據(jù)。
如果這個(gè)數(shù)值對(duì)不上,我們自求多福吧,恢復(fù)不了了。。。。
有錯(cuò)誤的地方歡迎大家拍磚,希望交流和共享。
原文鏈接:http://www.cnblogs.com/MR_ke/archive/2011/06/12/2078927.html
【編輯推薦】