在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:ackupNorthwind.bak"
如果你想把數據庫備份到另外一台服務器上,可以使用UNC名字:
BACKUP DATABASE Northwind TO DISK = "\FILESERVERSharedBackupNorthwind.bak"
如果想進行有規律、有計劃的備份,就需要使用邏輯備份設備。一個邏輯備份設備可以保存若干個數據庫備份並駐留在磁盤、磁帶或者已命名管道上。如果你使用磁帶設備,磁帶驅動器必須在同一台物理服務器上。已命名管道可以利用第三方備份軟件。
為了創建邏輯備份設備,使用sp_addumpdevice系統保存過程。SQL Enterprise Manager也可以用來創建備份設備。命令行語法如清單A所示。
清單B給出了一個在磁盤上創建邏輯備份設備的例子。
當備份設備創建完畢,Northwind數據庫可以用下面的命令進行備份:
BACKUP DATABASE Northwind TO DiskBackup
頻繁變動的大數據庫的備份
現在,我已經演示了如何備份整個數據庫。然而,它只允許你恢復備份結束時刻的數據庫所保存的數據。如果數據庫很大並且頻繁變動,由於時間和空間的限制,頻繁進行全數據庫備份是不現實的。當數據庫失敗時,可能會造成大量數據丟失。
在這種情況下,有兩種提高可恢復性的途徑,這兩個途徑都要求全數據庫備份。而且這兩種方法都要求數據庫恢復模型為FULL或者BULK_LOGGED。