資源描述:
《sql server數(shù)據(jù)庫備份和恢復(fù)的原理》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、SqlServer數(shù)據(jù)庫備份和恢復(fù)的原理本文與您探討為什么SqlServer有完整備份、差異備份和事務(wù)日志備份三種備份方式,以及為什么數(shù)據(jù)庫又有簡單模式、完整模式和大容量日志模式這三種恢復(fù)模式。本文內(nèi)容適用于2005以上所有版本的SqlServer數(shù)據(jù)庫。單就操作過程而言,SqlServer中數(shù)據(jù)庫備份和恢復(fù)過程是相當(dāng)簡單的,可以通過ManagementStudio的圖形界面進(jìn)行操作,也可以使用幾句T-SQL語句完成。但要明白備份恢復(fù)的整個過程,定制符合系統(tǒng)需求數(shù)據(jù)庫備份方案,卻需要知曉數(shù)據(jù)庫的實
2、現(xiàn)原理。備份和恢復(fù)是數(shù)據(jù)庫的核心功能。1數(shù)據(jù)庫原理本節(jié)簡要討論了SqlServer數(shù)據(jù)庫的存儲的物理和邏輯結(jié)構(gòu),這是備份恢復(fù)過的理論基礎(chǔ)。1.1為什么使用數(shù)據(jù)庫為什么要使用數(shù)據(jù)庫,而不是使用一個文件,然后自己寫一些方法來保存數(shù)據(jù),那是因為使用數(shù)據(jù)庫我們就不用自己去實現(xiàn)下面這些算法上非常復(fù)雜的功能:a.高效一致的結(jié)構(gòu)化數(shù)據(jù)存取方法,進(jìn)行復(fù)雜的任意條件組合嵌套的數(shù)據(jù)查詢(關(guān)系數(shù)據(jù)庫管理系統(tǒng)甚至為實現(xiàn)這一功能專門設(shè)計了一種語言:SQL)b.保障數(shù)據(jù)操作的原子性和完整性c.確保在服務(wù)器斷電、網(wǎng)絡(luò)中斷、服務(wù)
3、器崩潰、客戶端崩潰的情況下,故障恢復(fù)后數(shù)據(jù)仍然是完整的d.在服務(wù)器被完全物理摧毀的情況下,快速在新的服務(wù)器上使用遠(yuǎn)程設(shè)備上的備份將數(shù)據(jù)恢復(fù)到災(zāi)難發(fā)生之前的狀態(tài)e.隨時將數(shù)據(jù)恢復(fù)到任意時刻或任意一個操作之前...a主要是功能和性能bcde四條都可以歸結(jié)為完整性。數(shù)據(jù)庫系統(tǒng)的核心目標(biāo)就是:在實現(xiàn)功能需求的基礎(chǔ)上,保證數(shù)據(jù)完整性和數(shù)據(jù)存取性能。1.2SqlServer存儲的物理結(jié)構(gòu)和邏輯結(jié)構(gòu)1.2.1如何實現(xiàn)完整性經(jīng)過很多理論研究和實踐,目前公認(rèn)的最有效的實現(xiàn)完整性的方法是:將數(shù)據(jù)的存儲分為數(shù)據(jù)和事務(wù)日
4、志,在存取過程中使用鎖來控制并發(fā)訪問。數(shù)據(jù)是實時狀態(tài)。事務(wù)日志記錄了數(shù)據(jù)發(fā)生變化的過程,對于數(shù)據(jù)庫數(shù)據(jù)的任何一個改變,都被作為一條記錄寫在了事務(wù)日志文件中。事務(wù)是指一組操作要么全部成功要么全部不執(zhí)行。任何數(shù)據(jù)更改操作在寫入到數(shù)據(jù)文件中之前,必須先將更前后的數(shù)據(jù)寫入事務(wù)日志文件中,這樣當(dāng)事務(wù)由于用戶取消、數(shù)據(jù)邏輯錯誤或軟硬件故障中斷時能夠正確的回滾或前滾到正確的狀態(tài)。通過鎖控制多用戶對同一數(shù)據(jù)的并發(fā)訪問。這是事務(wù)系統(tǒng)最基本的原理,大多數(shù)關(guān)系數(shù)據(jù)庫系統(tǒng)和面向?qū)ο驨oSQL數(shù)據(jù)庫系統(tǒng)都采用這種方法。Sq
5、lServer也不例外,每個SqlServer數(shù)據(jù)庫由數(shù)據(jù)文件(*.mdf)和事務(wù)日志文件(*.ldf)構(gòu)成。SqlServer包括了從行到表,從頁面到文件的各種粒度的鎖。1.2.2如何實現(xiàn)高性能在計算機(jī)數(shù)據(jù)存取過程中,保障性能的算法最終都可以歸結(jié)為:索引和緩存。從實現(xiàn)層面到應(yīng)用層面,SqlServer都在建立管理各種索引和各種緩存。對于需要隨機(jī)存取的數(shù)據(jù),分頁是最自然的索引方法,同時能夠方便的進(jìn)行緩存,實現(xiàn)高效率的隨機(jī)存取。我們所熟悉的操作系統(tǒng)內(nèi)存管理系統(tǒng)、文件管理系統(tǒng)都采用了分頁的方法。在Sq
6、lServer中,對于數(shù)據(jù)文件mdf,主要是隨機(jī)存取,因此mdf以分頁的形式進(jìn)行組織管理,每個頁面8KB。還進(jìn)一步將8個相鄰的頁組成一個擴(kuò)展,方便管理,類似Windows中的簇。mdf中保存著多種類型的數(shù)據(jù),包括表數(shù)據(jù)、索引數(shù)據(jù)和大塊數(shù)據(jù)等等。每個頁面只保存一種數(shù)據(jù)。表中的每一條記錄都保存在一個表數(shù)據(jù)頁中,記錄不能跨頁,因此任何表中記錄的最大長度是略小于8KB(ntext之類的大塊列只計算引用的大小)的一個數(shù)值,略小是因為每個頁面需要一些空間來保存頁面自身的信息(頁頭)和記錄在頁面中的存儲位置。在
7、SqlServer中,對于事務(wù)日志文件ldf,主要是順序存取。在正常運行時,數(shù)據(jù)庫管理系統(tǒng)定期將日志順序?qū)懭氲絣df文件;在恢復(fù)時,順序讀取ldf文件。因此,日志文件不需要分頁,只要由一條條順序存儲的事務(wù)日志記錄構(gòu)成即可。日志記錄也有緩存,定期寫入到ldf文件。盡管數(shù)據(jù)庫系統(tǒng)是一個允許并發(fā)訪問的系統(tǒng),但是對事務(wù)日志的寫入是串行化的,不可以并發(fā),任何一個原子操作對應(yīng)的事務(wù)日志記錄在事務(wù)日志文件中都有其唯一的位置,也就是唯一的事務(wù)日志記錄編號,這個編號是一直增大的,不會重復(fù),越新的記錄編號越大,存儲位
8、置也越靠后。以上內(nèi)容總結(jié)自SqlServer的產(chǎn)品文檔SqlServerBooksOnline,如有興趣可以在里面了解更詳細(xì)的內(nèi)容。這些就是備份和恢復(fù)的基礎(chǔ)原理。2數(shù)據(jù)庫備份的實現(xiàn)如前所述,數(shù)據(jù)文件mdf保存了數(shù)據(jù)的實時狀態(tài),事務(wù)日志文件ldf記錄了數(shù)據(jù)庫中數(shù)據(jù)變化的過程。這個時候,我們要對數(shù)據(jù)庫進(jìn)行備份,自然而然就有兩個選擇:因為mdf文件中保存了數(shù)據(jù)庫中數(shù)據(jù)的實時狀態(tài),那么我們只要把mdf文件拷貝一份就實現(xiàn)了當(dāng)前時刻的數(shù)據(jù)庫備份。既然ldf文件中保存了數(shù)據(jù)庫中數(shù)據(jù)變化的整個過程