Sybase數據庫備份與恢復
SQL Server提供了兩種不同類型的恢復:一類是系統自動完成的恢復;另一類是人工完成的恢復。
1.系統軟件故障恢復
系統自動恢復是在系統軟件出現故障的情況下通過重新啓動SQL Server進行恢復。
自動恢復從master數據庫開始,然後是model數據庫,再是temporary數據庫,最後是用戶數據庫。在每個數據庫上,恢復機制觀察事務日誌。如果日誌寫入比數據庫更近的數據,則向前恢復數據庫。如果事務尚未完成,則要回退它們。
所謂事務日誌就是一張系統表,syslogs。在這張表中記錄着對數據庫的更新請求,例如插入、修改和刪除。查詢操作不記入事務日誌中。
2.介質故障的恢復
一旦介質發生故障,只有通過以前備份的數據庫和事務日誌才能恢復數據庫,爲此我們需要經常備份數據庫和事務日誌。備份數據庫和事務日誌我們使用dump命令,而恢復數據庫和事務日誌我們使用load命令。
與創建數據庫需要一個數據庫設備類似,我們備份數據庫和事務日誌也需要一個卸出設備。增加卸出設備可以通過系統過程sp_addumpdevice來實現。卸出設備可以是磁盤、磁帶或操作系統文件。
sp_addumpdevice "type",device_name,physicalname
例:
sp_addumpdevice "disk", "db114", "/usr/Sybase/zyl114.bak",1
(1) 備份數據庫和事務日誌
備份數據庫的語法爲:
dump database database_name to dump_device
例如:
dump database tele114 to db114
備份事務日誌的語法爲:
dump transaction database_name to dump_device
[with truncate_only | with no_log | with no_truncate]
前兩項在日誌中刪除提交的事務,後一項不刪除。
在備份數據庫前的所有事務日誌備份都是沒有意義的。我們一般不經常備份數據庫,但我們要經常備份事務日誌。這是因爲備份事務日誌比備份數據庫需要更少的時間和存儲空間。
(2)恢復用戶數據庫
要恢復已被破壞的數據庫,可以按如下步驟進行:
· 用帶no_truncate選項的dump命令卸出用戶數據庫事務日誌。
· 用和被破壞的數據庫的同樣的結構建立一個新的數據庫。
· 用load命令重新裝入數據庫和事務日誌。
裝入數據庫的語法爲:
load database database_name
from file_name
裝入事務日誌的語法爲:
load transaction database_name
from file_name
例:數據庫備份
1> dump db_name to file_name
2> go
數據庫恢復
1> load db_name from file_name
2> go
日誌備份
1> dump transaction db_name to file_name
2> go
日誌恢復
1> load transaction db_name from file_name
2> go
日誌刪除
1> dump transaction db_name with truncate_only
2> Go
(3)master數據庫的恢復
A、保存系統表的拷貝:sysdatabases、sysdevices、sysusages、sysloginroles和Syslogins。
B、轉儲主設備上的用戶數據庫。
C、關閉SQL Server並使用buildmaster建立新的master數據庫或主設備。
Buildmaster -m ...僅重建master數據庫
Buildmaster ...重建主設備
D、已單用戶模式啓動SQL Server( Master-Recover
Startserver -f RUN_服務器名 -m
E、若master數據庫用alter database 命令擴展過,嚴格重建它在sysusages中的分配。
F、若Backup Server 的網絡名(接口文件中的名字)不是SYB_BACKUP,在sysservers中改動網絡名。
Update sysservers set srvnetname="PRODUCTION_BSRV" where srvname="SYB_BACKUP"
G、使用showserver查看,檢查確保Backup Server正運行,若有必要,重啓Bakup Server
H、裝載master的備份。
Load database master from 'master.bak'
Load database執行成功後,SQL Server 自動關閉。
I、若自master的上次轉儲以來增加過數據庫設備,執行disk reinit命令以重建sysdevices。
J、若執行了disk reinit,或自上次轉儲以來使用過create database或alter database,執行disk refit 重建sysusages和sysdatabases表,執行完畢後SQL Server自動關閉。
K、檢查一致性:比較sysusages和sysdatabases的備份和新的聯機版本,對每個數據庫執行dbcc checkalloc, 並檢查每個數據庫中重要的表;若發現錯誤重新執行disk reinit和disk refit。
L、若恢復了整個主設備,則恢復model數據庫。
Cd $Sybase/scripts
Setenv DSQUERY 服務器名
ISQL -Usa -P口令 -S服務器名 M、重新裝載所有受影響的用戶數據庫。
N、恢復服務器用戶ID。
O、以多用戶模式重新啓動SQL Server。