程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> sql server復災 你懂了嗎?

sql server復災 你懂了嗎?

編輯:關於SqlServer
  1. 很多時候我們不小心錯誤delete了一下,或者update一下怎麼辦,或者直接把數據庫刪除了,怎麼辦呢,是不是就一定沒有辦法呢?下面讓我來教大家我現學現賣的兩招。
  2. 當我們不小心刪除表怎麼辦?

做之前我們要設置數據庫恢復模式:

設置成完整,不要是簡單模式。

首先我們創建一個表:插入幾條數據

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的數據。

如果這個數值對不上,我們自求多福吧,恢復不了了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved