在sql server 2000中,有無數種備份數據庫的方法。無論你的數據庫有多大、改變是否頻繁,都有滿足你的要求的備份策略。讓我們看看幾種可以在不同環境下工作的基本備份策略。
本文假定你有備份數據庫的權限。也就是說,你要么是系統管理員,要么是db_owner或者backupadministrator。還有,我們還假定你的操作系統提供了訪問備份所需要的資源的權利,例如,訪問磁盤或者磁帶驅動器。
從哪兒開始
在你開始備份一個sql server數據庫之前,你需要知道該數據庫使用了哪個恢復模型。這里有三種不同的恢復模型:full、bulk_logged和simple。
full恢復模型向你提供了最大的恢復靈活性。新數據庫默認使用的就是這種恢復模型。利用這種模型,你可以恢復數據庫的一部分或者完全恢復。假設交易記錄(transactions log)還沒有被破壞,你還可以在失敗之前恢復出最后一次的已提交(committed)交易。在所有的恢復模型中,這種模型使用了最多的交易記錄空間,并輕微影響了sql server的性能。
bulk_logged恢復模型比full模型少了一些恢復選項,但是進行批操作(bulk operation)時它不會嚴重影響性能。在進行某些批操作時,由于它只需記錄操作的結果,因此它使用了較少的記錄空間。然而,用這種模型,你不能恢復數據庫中的特定標記,也不能僅僅恢復數據庫的一部分。
simple恢復模型是這三種模型中最容易實施的,它所占用的存儲空間也最小。然而,你只能恢復出備份結束時刻的數據庫。
為了找出你所用數據庫的恢復模型,可以運行下面的命令,該命令應該返回full、bulk_logged和simple這三個值中的某一個:
select dbpropertyex("database", "recovery")
為了改變數據庫的恢復選項,運行下面的命令:
alter database database name set recovery {full | simple | bulk_logged}
除數據之外,sql server備份還包括數據庫大綱(schema)和數據庫元數據(即數據庫文件、文件組和它們的位置)。sql server允許在備份時用戶依然使用數據庫,所以在備份期間發生的交易也記錄到備份中去了。
備份數據庫
為了備份數據庫,你可以運行backup命令。(你也可以使用sql enterprise manager。)在執行命令之前知道它的語法永遠是個好主意。backup命令有許多選項,它的基本語法是:
backup database { database_name }
to < backup_device > |
backup_device可以是磁盤或者磁帶——或者它也可以是一個用磁盤文件、磁帶或者已命名管道表示的邏輯上的備份設備。
如果你想做一個快速、一次性的備份,那么向下面那樣使用磁盤文件:
backup database northwind to disk = "c:/backup/northwind.bak"
如果你想把數據庫備份到另外一臺服務器上,可以使用unc名字:
backup database northwind to disk = "http://fileserver/shared/backup/northwind.bak"
如果想進行有規律、有計劃的備份,就需要使用邏輯備份設備。一個邏輯備份設備可以保存若干個數據庫備份并駐留在磁盤、磁帶或者已命名管道上。如果你使用磁帶設備,磁帶驅動器必須在同一臺物理服務器上。已命名管道可以利用第三方備份軟件。
為了創建邏輯備份設備,使用sp_addumpdevice系統保存過程。sql enterprise manager也可以用來創建備份設備。命令行語法如清單a所示。
清單b給出了一個在磁盤上創建邏輯備份設備的例子。
當備份設備創建完畢,northwind數據庫可以用下面的命令進行備份:
backup database northwind to diskbackup
頻繁變動的大數據庫的備份
現在,我已經演示了如何備份整個數據庫。然而,它只允許你恢復備份結束時刻的數據庫所保存的數據。如果數據庫很大并且頻繁變動,由于時間和空間的限制,頻繁進行全數據庫備份是不現實的。當數據庫失敗時,可能會造成大量數據丟失。
在這種情況下,有兩種提高可恢復性的途徑,這兩個途徑都要求全數據庫備份。而且這兩種方法都要求數據庫恢復模型為full或者bulk_logged。
第一種方法采用差異數據庫備份,它只捕獲并保存全數據庫備份后改變的數據。由于它的文件較小而且信息簡明,用它進行數據恢復的速度非常快。
下面的例子在一個名為diffbackupdevice的邏輯備份設備上創建了一個差異備份:
backup database northwind to diffbackupdevice with differential
第二個提高可恢復性的方法利用交易記錄備份,恢復可以在一個特定的時間點上完成。
你可能會問這怎么可能。記住,交易記錄的目的就是記錄發生在數據庫中所有交易。交易記錄允許commit和rollback正確工作。為了達到這個功能,該數據的變化前后的數值必須隨同操作類型、交易開始(時間)等一齊被記錄下來。
備份技巧
利用下面的列出的技巧來確保你不會在每周一次的數據庫備份過程中忘記關鍵步驟。
每周一次備份主數據庫。如果你創建、修改或者停止一個數據庫,添加新的sql server消息,添加或者停止連接服務器,或者添加記錄設備,那就進行手工備份。
每天備份一次msdb數據庫。它一般非常小,但很重要,因為它包含了所有的sql server工作、操作和計劃任務。
只有當你修改它時,才有必要備份模型數據庫。
用sql server agent來安排你的備份工作的時間表。
如果在你的生產(production)環境中有現成資源,備份生產數據庫到本地磁盤或者網絡服務器(用同一個開關)。然后,把備份文件/設備拷貝到磁帶上。在存在許多硬件故障(特別是在raid系統中)的情況下,磁盤常常是完好的(inact)。如果備份文件是在磁盤上,那么恢復時的速度會提高很多。
備份開發和測試數據庫至少要用到simple恢復模型。
除了有計劃的定時備份外,在進行未記錄的(nonlogged)批操作(如,批拷貝)、創建索引、或者改變恢復模型后要備份用戶數據庫。
如果你使用的是simple恢復模型,記住在截短(truncate)交易記錄之后備份你的數據庫。
用文檔記錄你的恢復步驟。至少要大概記錄這些步驟,注意所有的重要文件的位置。
在截短記錄之前,也就是所有的已提交(committed)交易從記錄中清空之前,所有的這些信息都保存在交易記錄中。在simple恢復模型中,記錄在一個checkpoint期間內截短(在sql server內存緩沖寫道磁盤時),它是自動發生的,但也可以手動執行。這也就是simple恢復模型不支持時間點(point-in-time)恢復的原因。在full和bulk_logged恢復模型下,當交易記錄被備份時,交易記錄被截短,除非你明確指出不進行截短。
為了備份交易記錄,使用backup log命令。其基本語法與backup命令非常相似:
backup log { database } to  下面是如何把交易記錄備份到一個名為logbackupdevice的邏輯設備上的例子:  backup transaction northwind to logbackupdevice  如果你不希望截短交易記錄,使用no_truncate選項,如下所示:  backup transaction northwind to logbackupdevice with no_truncate  只是基本知識  盡管我在本文中僅僅概述了數據庫恢復的基本知識,你還是可以通過這些技巧來找到正確的方向。那么,為了避免不必要的(丟失數據造成的)恐慌,你要做到每周備份主數據庫,每天備份msdb。  商業源碼熱門下載www.html.org.cn
新聞熱點
疑難解答