Sybase提供了兩種不同類型的恢復:一類是系統自動完成的軟件系統故障恢復。另一類是需要手工完成的介質故障恢復。
自動恢復是系統本身提供的防止系統失敗的一種保護措施。每次Sybase重啟時都要運行自動恢復機制。自動控制恢復機制確保在系統癱瘓前完成的事務都寫到數據庫設備上,而未完成的事務都被回退。
人工恢復是事先通過數據庫備份工具命令或在線數據流式管理軟件將數據庫備份到磁帶設備,然後通過對應的恢復命令和模式恢復數據庫。
Sybase的傳統備份與恢復
下面我們首先通過討論如何定期備份數據庫來了解Sybase數據庫的傳統備份與恢復方法。
對於Sybase數據庫,一旦硬件或系統出現故障,當且僅當數據庫備份及其事務日志的備份存在的情況下才能恢復數據庫。
備份的任務通常由系統管理員或數據庫所有者承擔。然而,備份數據庫或事務日志的權限可由數據庫所有者傳遞給其它用戶。
制定一個備份時間表是非常重要的。很難確定備份數據及其日志的“最佳”時間表。事實上,備份的頻率決定恢復的質量。如果出現介質故障,可能丟失最大的數據量。對於大型的更新頻繁的數據庫,通常每天要做多次日志備份和至少一次數據庫的備份。
在數據庫活動時可以備份數據庫或事務日志。這種類型的備份(Sybase獨有的特性),稱為動態卸出。動態卸出使備份變得方便,並使連續不斷的操作成為可能。
動態卸出會部分降低Sybase的速度。
備份設備的選擇
Sybase的備份設備列在系統表master..sysdevices中,可執行命令:
Select * From master..sysdevices Where name like ”%dump%“.
來查看設備狀況。
如果status列出的值是16或者24(表示設備是卸出設備),那麼cntrltype列的值表示卸出設備的類型。卸出設備的值可以是:2~8。
2:表示數據是通過磁盤字節流接口卸出的。卸出設備可以是磁盤、部分磁盤,或操作系統文件。在不指明卸出設備時,默認為操作系統文件。
3~8:表示磁帶卸出設備。
要增加卸出設備,可用系統過程sp_addumpdevice。語法為:
對磁帶設備:
sp_addumpdevice ”type“,device_ name, physicalname,cntrltype{,skip|noskip},size
對磁盤設備:
sp_addumpdevice ”disk“,device_ name,physicalname,cntrltype
將數據直接備份至磁帶,可以保證數據的離線異地保存,但備份時間會延長。還可以采取先將數據庫備份至本地磁盤,再在機器不繁忙時將備份備至磁帶。
使用DUMP備份數據庫
備份數據庫時會備份此數據庫的全部——它的系統表、用戶定義的目標,以及事務日志。數據庫卸出的格式是特殊的,它只能用Sybase裝載程序裝入(即用LOAD DATABASE 命令)。
對於master數據庫或其數據與日志放在同一邏輯設備上的小型數據庫(小於4M)使用DUMP DATABASE 命令備份數據庫和事務日志。
對於大型數據庫而言,應當把數據與事務日志放在不同的數據庫設備上。(在建數據庫時用CREATE DATABASE ON ……LOG ON……來實現)這樣可以作到單獨備份數據與日志。
除了按計劃備份數據庫外,在對數據庫作大量修改之前或在對數據庫作了不記日志的操作(如執行了DUMP TRAN WITH NO_LOG)之後,都要對數據庫作備份。
命令的使用
DUMP DATABASE 的語法:
DUMP DATABASE database_name to dump_device DUMP DATABASE database_name to dump_device1 stripe on dump_device2 stripe on device3 ...{stripe on...}
數據庫備份時會產生多個文件,做恢復時的文件個數要與之對應。
備份事務日志
當數據與日志是放在不同的設備時,可用DUMP TRANsaction
命令單獨備份日志。卸出日志要比備份數據庫花更少的時間和存儲空間。與備份數據庫相同,日志的備份同樣可在數據庫活動時發生。
日志在備份後將會被刪除,所以在下一次數據庫備份之前的日志備份需要連續保存才會有意義。
命令的使用:
DUMP TRANsaction database_name [to dump_device] [WITH TRUNCATE_ONLY|WITH NO_LOG|WITH NO_TRUNCATE]
注意:DUMP DATABASE只備份數據庫,並不清除日志,若不使用DUMP
TRAN命令刪除日志,日志會越來越大。
Sybase數據庫在線流式備份和恢復
⒈啟動在線備份
可以執行整個數據庫服務器或特定數據庫的在線備份
以model 庫為例:
# nsrsybsv -Uname -PpassWord -lFull -s NetWorker_Server_Name Sybase:/SQL_SERVER_NAME/model
⒉采用Schedule備份
(1)Full backup: dump database, dump the transaction log for the database, trancates the tracsaction log (2)Incremental:dump transaction log, trancates the tracsaction log
注意此方式要求:
數據庫和事物日志建立在不同設備上;
不選擇 select into/bulk copy 選項;
不選擇truncate log on checkpoint 選項
⒊數據庫的恢復
* 必須使用nsrsybrc 來做;
* 如果想恢復數據到新的數據庫,必須先使用 for load 選項創建新庫;
* nsrsybrc
不創建數據庫,如果必要,應該先創建數據庫再使用nsrsybrc程序。Sybase建議保留數據庫定義和設備分配的硬拷貝,以便於再建。
point-in-time 恢復:
#setenv NSR_SERVER networker_servername #nsrsybrc -Usa -PpassWord -t ”09/11/02 03:33“ -dSybase:/SQL_SERVER_NAME/database
* 恢復到新的數據庫。
* 建立新的數據庫和舊數據庫擁有相同的設備分配。
* 設置NSR_SERVER, NSR_CLIENT 環境變量以節省恢復時間:
nsrsybrc -Usa -PpassWord -dSYBASE:/SERVER_NAME/NEW_DATABASE Sybase:/SERVER_ NAME/OLD_DATABASE
⒋災難恢復
如果主磁盤包括SQL_server 和NetWorker客戶程序遭到損壞。
(1) 重新安裝NetWorker 客戶端程序,數據庫Server 軟件,BSMS模塊。
(2) 使用打印出的數據庫設備分配重新創建數據庫。
(3) 恢復master庫:
* 重建丟失的master設備,使用“buildmaster”;
* 單用戶模式運行數據庫服務器;
* 重建一些master的額外設備;
* 確信數據庫服務器在sysservers表中有正確的Sybase Backup Server 名字;
* 裝入master數據庫:
# nsrsybrc -Uusername -PpassWord Sybase:/SQL_Server_name/master
* 該命令恢復master庫並關閉數據庫服務器;
* 如果必要,在數據庫關閉時重新建立設備配置參數數目;
* 重啟數據庫服務器;
* 如果在最後一次DUMP後對系統目錄信息作過改動,此時恢復改變。
(4) 恢復model庫;
* 刪除或重建master設備上的其他數據庫。
(5) 恢復非master 設備上的數據庫
* 得到每個數據庫設備的當前日志備份;
* 檢查每個設備上數據庫的空間用法, 例如:
select * from sysdatabases select * from sysusages select * from sysdevices
* 一旦得到每個設備上所有數據庫的信息,卸掉每個數據庫,指整個數據庫都在主庫設備上;
dbcc dbrepai (database_name, dropdb)
* 根據缺少的設備,在sysdevices文件中手工刪除相應的行,即刪掉失敗的設備;
* 單用戶模式重啟數據庫;
* 初始化新設備;
* 依次重建數據庫;
* 重啟數據庫,保證數據庫不在單用戶模式;
* 恢復數據庫:
# nsrsybrc -Uusername -PpassWord Sybase:/SQL_SERVER_NAME/database
注釋:普通Sybase數據庫的備份可采用dump命令來實現數據庫的備份。對於商用或比較重要的數據庫可采用在線數據流的備份模式,以加快數據備份和恢復速度,增強數據庫備份和恢復的可管理性。