天天看點

FIREBIRD的備份工具(NBACKUP)介紹

nbackup介紹

nbackup是Firebird 2.0新帶來的備份工具。它提供了gbak—Firebird以前就有的備份工具—所沒有的能力—但是并不取代後者。兩個程式都有其長處和短處;他們在一定的将來将共存一段時間。

nbackup功能—總體介紹

使用nbackup,你可以進行兩類不同的功能操作:

1. 建立和恢複完整的和增量的備份操作。一個增量備份隻包括自某一上次備份以後的變化。

2. 鎖定主資料庫檔案,然後你可以根據自己的選擇使用複制工具或者備份工具來備份。在這種模式下,nbackup不備份任何東西;它隻是建立了一個你自己可以安全地進行備份的條件。這裡也有一個恢複的環境。

兩個模式都可以在活動資料庫上操作,而不影響已經連接配接的使用者。産生的備份總是反應操作開始時資料庫的狀态。在這些方面,nbackup和gbak并無差别。

nbackup的優勢

. 兩個模式:高速(達到硬體和作業系統允許的速度),因為nbackup不注意實際的資料。在備份模式裡内容是原封不動地寫進備份檔案。

. 備份/恢複模式:節約了時間及磁盤空間:因為不需要每次都完整地備份。這在資料庫檔案大小達到G級别上時産生巨大的差異。

. 鎖定/解鎖模式:可自由選擇備份,複制,及/或壓縮工具。

nbackup的局限

. nbackup不象gbak那樣清掃(sweep)和壓縮你的資料庫檔案。

. 與gbak不一樣,你不能在nbackup循環中修改資料庫的擁有者。

. nbackup不能建立可移動的備份,即:你可以在不相容的平台或者另一個伺服器版本下恢複的那種備份。

. 在目前狀态下,nbackup不應該使用在多檔案資料庫上。

. nbackup隻能備份本地資料庫。

我們将在下面的章節中廣泛闡述nbackup的各種功能。

建立和恢複備份

首先,nbackup.exe位于你的Firebird檔案夾的bin自檔案夾裡。通常位置如C:\Program Files\Firebird\Firebird_2_0\bin(Windows)或者 /opt/firebird/bin(Linux)。與其他Firebird所有的工具一樣,nbackup沒有圖形界面,你需從指令行啟動它(或者從一個批處理檔案或者應用程式)。

完整備份

進行完整備份,要進行一個資料庫的完整備份,文法如下:

nbackup [-U <user> -P <password>] –B 0 <database> [<backupfiile>]

例如:

C:\Data> nbackup –B 0 inventory.fdb inventory_1-Mar-2006.nbk

說明:

. 參數 –B表示備份(嘿)。備份級别0表示完整備份。備份級别大于0用于增量備份,我們後面再讨論。

. 除了資料庫檔案名字,你也可以使用别名。

. 除了使用備份檔案名字,你也可以使用stdout.這會把備份輸出到标準輸出,在那裡你可以把它重定向到如磁盤機或者壓縮工具裡。

. –U(user)和-P(password)參數可以省略:

- 如果你以超級使用者登陸(root, administrator…)或者已經設定了環境變量ISC_USER和ISC_PASSWORD。

為了清晰和簡潔起見,例子中沒有使用這些參數。

. 不同的參數(-B, -U和-P)可以任何次序出現。當然每一個參數都應緊跟其響相應的變量。對于-B,有三個:備份級别,資料庫檔案和備份檔案,按這個順序。

. 如果-B參數最後出現,你可以省略備份檔案名。這時nbackup将按照資料庫檔案名,備份級别和目前日期和時間設定一個檔案名。如果同一分鐘内兩個相同級别的備份指令執行時會導緻名稱沖突(引起備份失敗)。

内部工作的一個說明

注:下面所述内容不是使用nbackup必須的知識。隻是一個簡單的(不完整的)對nbackup –B執行時内部到底發生了什麼的說明

1. 首先,主資料庫檔案被更改一個内部狀态标志後鎖定。從這一刻開始,任何及所有對資料庫的更改都暫時寫到一個臨時檔案裡-差異檔案或者增量檔案

2. 然後是進行實際的備份操作。這不是一個直接的檔案複制;恢複也必須使用nbackup來進行。

3. 在備份操作完成後,增量檔案裡的内容被內建到主資料庫檔案裡。然後資料庫被解鎖(标志恢複到"正常"),增量檔案被删除。

步驟1和3是由兩個新的SQL語句:ALTER DATABASE BEGIN BACKUP和ALTER DATABASE END BACKUP.于字面意思相反,這兩個指令根本不進行實際的備份操作;他們隻是建立了主資料庫檔案可以被安全地備份的條件。實際上,你不需要自己執行這兩個指令,nbackup會替你在正确的時間執行他們。

恢複一個完整備份

一個完整備份如下方法恢複:

nbackup [-U <user> -P <password>] –R <database> [<backupfile>]

C:\DATA> nbackup –R inventory.fdb inventory_1-Mar-2006.nbk

注:

. 你不用指定一個備份級别

. 恢複時,-R參數必須最後一個出現,理由後面會清楚。

. 如果指定的資料庫已經存在,而且沒有任何條件,它将被毫無提示地覆寫!如果有使用者連接配接,備份将失敗,你會得到一個錯誤資訊。

. 這裡也一樣,你可以省略備份檔案名。如果你省略了,nbackup會提示你給予一個。但是,目前這個功能是沒有(至少在Windows環境下),如果你這樣指定備份檔案,你會得到一個錯誤資訊,然後備份失敗。

增量備份

進行增量備份

要進行一個增量(差異)備份,我們指定一個大于0的備份級别。一個N級的增量備份總是包含自從最近的N-1級的備份以後的變化。

完整備份(級别0)一天後,你進行一個級别1增量備份:

C:\Data> nbackup –B 1 inventory.fdb inventory_2-Mar-2006.nbk

這個備份隻包含最近一天的變化。

一天以後你又進行了一個1級增量備份:

C:\Data> nbackup –B 1 inventrory.fdb inventory_3-Mar-2006.nbk

這個備份包含最近2天的變化,從完整備份開始,而不是從前一個1級備份開始。

幾個小時後,我們進行了一個2級備份:

C:\Data> nbackup –B 2 inventory.fdb inventory_3-Mar-2006_2.nbk

這個最新的備份,隻包含最近的1級備份後的變化,就是說最近幾個小時的變化。

恢複增量備份

當恢複增量備份時,你需要指定整個增量備份檔案鍊,從0級至你希望恢複的那一個。資料庫總是從頭開始建立的,一步一步的。(就是因為是一步一步增加直到資料庫恢複完成,産生了"增量備份"這個名詞。)

正規文法如下:

nbackup [-U <user> -P <password>]

-R <database> [<backup0> [<backup1> […]]]

是以從前面的例子上恢複一個2級備份的情況如下:

C:\Data> nbackup –R inventory.fdb inventory_1-Mar-2006.nbk

Inventory_3-Mar-2006.nbk inventory_3-Mar-2006_2.nbk

當然指令行在這裡因為排版的原因分行了,實際操作時,需要輸入整個語句,到最後才輸入enterEnter鍵。

注(在恢複完整備份的說明的基礎上):

. 因為事先不知道-R開關後面跟多少個檔案名(因為我們恢複時不指定級别),nbackup假設-R後所有的變量都是備份檔案的名字。因為這個原因,檔案名列對後不能跟其他參數(-U,-P)。

. 備份級别沒有一個正式的限制,但是實際操作中,超過3或者4是很少見的。

不相連的連結

如果你不小心漏了一個檔案,或者指定了一個不屬于同一系列的檔案會發生什麼情況呢?你可以想象在上面的例子中錯誤地指定了inventory_2-Mar-2006.nbk而不是inventory_3-Mar-2006.nbk。兩個都是1級備份檔案,是以兩種情況下都獲得一個挺好的"0,1,2"級别系列。但是我們的2級檔案是基于March 3的1級備份的增量備份,而不是March 2的增量備份。幸運的是這樣的錯誤永遠不會導緻一個錯誤的資料庫恢複。每一個備份檔案都有一個獨特的ID。更進一步的是,每一個1級或者更進階的備份檔案都包含它所基于的備份的ID。恢複時,nbackup檢查這些ID;如果鍊中某處連結不相連,操作被取消,你會得到一個錯誤資訊。

一個實際運用

一個基于nbackup的增量備份計劃可能象這樣的:

. 每個月進行一次完整備份(0級别);

. 每個星期一個1級;

. 每天一個2級備份;

. 每小時一個3級備份。

隻要所有的備份都保留者,你可以把資料庫恢複到過去任意一個小時的狀态。對于每個恢複操作,最多使用4個備份檔案。當然,你也可以這樣規劃,在非高峰時間進行更大的,更耗時的備份。這樣的話,0級和1級别粉可以在周末進行,而2級的則可以在晚上進行。

如果你不想把所有的東西都永久儲存,你還可以增加一個删除計劃:

. 3級備份可以在8天後删除;

. 2級備份可以在一個月後删除;

. 1級的可以在6個月後删除;

. 完整備份2年後删除,但每年的第一個仍然保留。

當然這隻是一個例子。對個例來說什麼管用還要依據應用,資料庫的大小,它的活動程度等等。

到此,你已經了解了使用nbackup進行和恢複完整的或者增量的備份所需要的所有知識了。隻需要進一步閱讀一下,就可以選擇你想用的工具操作你的Firebird資料庫(見鎖定和解鎖),或者你希望覆寫變化檔案預設的名稱或位置(見設定變化檔案)

如果你沒有了解那些的欲望:祝你在使用nbackup的過程中順利!

鎖定和解鎖

如果你希望使用自己的備份工具或者隻是想做一份拷貝,nbackup的鎖定-解鎖模式可以派上用場了。"鎖定"意味着主資料庫檔案暫時當機了,不是說不能對資料庫檔案進行任何更改。象在備份模式中一樣,變化被指向一個臨時的增量檔案:解鎖後增量檔案會别複合到主檔案中去。

提醒一下:nbackup.exe檔案位于你的Firebird檔案夾的bin子目錄裡。一般的位置是如: C:\Program Files\Firebird\Firebird_2_0\bin(windows)或者 /opt/firebird/bin(Linux)。沒有圖形界面;你必須從指令行啟動(或者從批處理檔案或者應用程式中)。

鎖定資料庫并自己備份

一個你用來進行自己的備份典型的會話是這樣的:

1. 使用 –L(鎖定)開關鎖定資料庫:

nbackup [-U <user> -P <password>] –L <database>

2. 現在按照你的想法複制/備份/壓縮資料庫檔案,使用你自己選擇的工具。單純複制一下檔案也是可以的。

3. 使用-N(解鎖)開關解鎖資料庫:

nbackup [-U <user> -P <password>] –N <database>

最後一個指令将使所有變化-寫在增量檔案裡- 複合到主檔案中去。你建立的備份檔案包含了資料庫在被鎖定的瞬間所有的資料,不管鎖定狀态持續了多久,也不管你在進行實際備份前等待了多久。

從一個nbackup –L建立的備份中恢複

一個鎖定的資料庫檔案的拷貝本身也是個鎖定的資料庫,是以你不能隻是複制回來然後直接使用它。如果你原來的資料庫檔案丢了或者損壞了,因而自己做的拷貝需要恢複(或者你需要在另一台機器上安裝),按如下方法操作:

1. 使用必要的工具,複制/恢複/解壓你自己制作的備份檔案

2. 現在使用-F(Fixup修正),而不是-N開關,解鎖資料庫:

nbackup –F <database>

為什麼有兩個解鎖開關,-N和-F?

. –N首先檢查-L鎖定後的變化複合到主資料庫檔案。然後,資料庫檔案恢複到正常的讀寫模式,并且臨時檔案被删除。

. –F 隻是改變自己恢複的資料庫狀态标志到"正常"。

是以,你可以使用:

. –N,在進行你的複制/備份操作後(逆轉前面所說的 -L);

. –F,在恢複一個你那樣制作的備份檔案後。

内幕

注:這一節不包含任何必須的知識,但提供一些額外的資訊,可以加深你了解不同的開關。

nbackup –L進行如下操作:

1. 連接配接到資料庫;

2. 啟動一個事務;

3. 調用ALTER DATABASE BEGIN BACKUP(這個語句在nbackup –B的額外資訊中讨論過);

4. 送出事務;

5. 斷開資料庫的連接配接。

nbackup –N遵照同樣的步驟,但第三步使用"… END BACKUP"。

nbackup –F 進行如下操作:

1. 恢複的資料庫被打開;

2. 在檔案裡,狀态标志被從鎖定狀态(nbak_state_stalled)修改至正常(nbak_state_normal);

3. 檔案又被關閉。

設定增量檔案

預設地,增量檔案存于資料庫檔案所在的檔案夾裡。檔案名和資料庫檔案相同,但字尾是.delta。一般沒有什麼理由去改變,但需要的時候也可以做到—雖然不是使用nbackup本身。使用任何一個可以允許你輸入自己SQL語句的客戶連接配接到資料庫,輸入以下指令:

alter database add difference file ‘path-and-filename’

定制的增量檔案是和資料庫檔案一體的,他儲存在系統表RDB$FILES裡。要恢複至預設狀态,輸入以下語句:

alter database drop difference file

A. 文檔曆史

确切的檔案曆史記錄在我們的CVS樹的manual子產品中,詳見http://sourceforge.net/cvs/?group_id=9028

修改曆史

0.1 21 Oct 2005 PV 第一版

1.0 1 Dec 2006 PV 在版資訊中删除了"Beta"記号。修改了使用nbackup –R互動指定備份檔案的警告。在文檔曆史中删除了"(或者将要)"。

将例子中的C:\Database修改為C:\Data,避免語句行跑出PDF的陰影部分。

增加了章節"設定增量檔案",并相應修改了"繼續閱讀"部分

B. 許可說明

本檔案的内容遵照Public Documentation License Version 1.0("許可");你隻能在遵守"許可"的情況下使用。"許可"的副本可在http://www.firebirdsql.org/pdfmanual/pdl.pdf(PDF)和http://www.firebirdsql.org/manual/pdl.html(html) 得到。

原始檔案名為: Firebird之nbackup工具。

原始檔案的起草者為:Paul Vinkenoog.

Copyright? 2005,2006. All Rights Reserved. 請聯系起草作者:paulvink at users dot sourceforge dot net.