sql server複災 你懂了嗎?

來源:互聯網
上載者:User
  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的資料。

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.