SQL Server中災難時備份結尾日誌(Tail of log)的兩種方法

來源:互聯網
上載者:User
簡介

   

    在資料庫資料檔案因各種原因發生損壞時,如果記錄檔沒有損壞。可以通過備份結尾日誌(Tail of log)使得資料庫可以恢複到災難發生時的狀態。

    例如:

    

     中。在DB_1中做了完整備份,在Log_1,Log_2處做了記錄備份。在Log_2備份之後不久,發生了故障。從Log_2備份到災難發生時之間的日誌。就是結尾日誌(Tail of log)。如果不能備份尾端日誌,則資料庫只能恢複到Log_2備份的點。尾端日誌期間所做的改動全部丟失。更詳細的概念可以查看我之前關於日誌的博文。

     下面我們分別來看在SQL Server執行個體運行良好和SQL Server執行個體崩潰狀態下,備份結尾日誌方法。

SQL Server執行個體運行正常時,結尾日誌的備份

    下面來類比一次災難下結尾日誌的備份:

   

    現在資料庫TestBackUp有了一個完整備份和一個記錄備份,而最後那條”記錄備份後的測試資料”是在上次記錄備份之後的,被結尾日誌所包含。

    接下來類比資料庫檔案所在磁碟損壞(記錄檔完好)

    1.停掉Server SQL服務

    2.刪除資料庫檔案(MDF檔案)

   

     此時在SSMS中訪問資料庫TestBackUp會出現不可用:

    

     此時,因為SQL Server執行個體可用,通過在T-SQL語句指定NO_TRUNCATE選項(必須指定,否則無法備份尾端日誌),備份尾端日誌:

   

     依次進行完整備份恢複,和兩次交易記錄恢複,可以看到資料已經成功恢複到災痛點:

   

 

當SQL Server執行個體崩潰時,結尾日誌的備份

    此時由於各種原因,所處的SQL Server執行個體也崩潰,無法通過T-SQL來備份結尾日誌。此時資料庫檔案損壞,而交易記錄檔保持正確。

    假設情況和上面例子一樣,此時我手裡有一個完整備份(TestBackUp_FULL.bak)和一個記錄備份(TestBackUp_log1.bak),還有一個記錄檔(ldf)。

    這時我將這幾個檔案拷貝到其他擁有SQL Server執行個體的機器上。

    建立一個和原資料庫名一樣的資料庫。設定為離線:

   

    刪除建立資料庫的MDF檔案。

    將需要備份的資料庫的記錄檔替換掉原有的LDF檔案。

    此時直接備份結尾日誌,成功:

   

    原有Sql server執行個體恢複後一次恢複完整備份和兩個記錄備份。成功恢複到災難發生點。

 

總結

    我相信看到這篇文章的人都不希望碰到用到上面兩種方法的情況。但是,墨菲定律(事情如果有變壞的可能,無論這種可能性有多小,它總會發生)是殘酷的,事先練習一下總是比真正遇到情況用生產資料練習愜意的多:-)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.