Sybase資料庫備份方案

2021-04-12 14:50:17 字數 3693 閱讀 1685

作為sybase的伺服器一端,資料風險比較集中,如何做好資料庫的資料備份,成為至關重要的問題。

在實際應用中,我們總結出了兩種全量備份方案:

一、使用sybase的backup server(備份伺服器),做dump備份

轉儲資料庫(dump database),就是為整個資料庫(包括資料、表結構、觸發器、游標、儲存過程、事務日誌等)做一次物理備份。轉儲資料庫時,系統自動執行一次checkpoint,即將日誌和資料從緩衝區拷貝到硬碟(只拷貝髒頁),把已被分配的頁(日誌和資料)轉儲到裝置。

命令格式為:

dump database 資料庫名 to 裝置檔名 with 引數

如果備份到硬碟的檔案上,可以不預先估算備份檔案的大小,只要硬碟有足夠的儲存空間就可以。如果是備份到dds磁帶上,那麼就要估算一下備份後的大小,90公尺的dds磁帶壓縮儲存空間為4g,120公尺的磁帶壓縮儲存空間為8g,如果資料庫的備份檔案超過了這個尺寸,就要考慮多檔案轉儲,使用stripe引數。

命令格式為:

dump database 資料庫名 to 裝置檔名1

stripe on 裝置檔名2

stripe on 裝置檔名3……

with 引數

這種資料備份方式是將整個資料庫的執行環境完整的複製乙份,包括資料庫的髒頁和碎片,在使用load命令恢復時,只能恢復到同樣大小的資料庫中(資料和日誌的大小都只能和原來完全一致),適用於在每天的日終營業網點下班後的日常備份。優點是資料庫完整無誤,缺點是不能直接檢視備份內容。

二、分資料結構和資料記錄做兩次備份

在一般情況下,生產機的資料庫都比較龐大,而實驗機則相對較小,難以在實驗環境中以load命令恢復工作機的內容。所以,在工作實踐中,我們摸索出了第二種全量備份方案。

1、資料結構備份

在windows平台的sybase sql server manager(資料庫管理)平台中選擇serveràgenerate ddl則產生整個資料庫伺服器的所有資訊,如果選擇databaseàgenerate ddl則產生所選定資料庫的資訊,以master庫為例,產生的檔案主要包括:config.ddl(配置)、devices.ddl(裝置)、database.ddl(資料庫)、logins.ddl(使用者)、remote.ddl(遠端)、cache.ddl(緩衝)、segment.ddl()、group.ddl(使用者組)、user.ddl(使用者)、default.ddl(確省)、rule.ddl(規則)、udt.ddl、table.ddl(表)、view.ddl(檢視)、proc.ddl(儲存過程)、triger.ddl(觸發器)。

2、資料記錄備份

將資料庫各表以sybase自代的bcp(bulk copy)工具的方式導成一定格式的文字檔案,命令格式:

bcp 表名 out 路徑名 檔名 -c -t 分隔符 -u (使用者名稱)-p(密碼)-s(伺服器名)

如果將乙個資料庫中的所有表都做乙個bcp備份,就需要針對每乙個表都做一次bcp,在一般情況下,乙個資料庫有100多個表,工作量比較大。可以利用資料庫中的系統表資訊做乙個bcp備份指令碼。原理是每乙個使用者表在系統表中都有資訊記載,可以通過isql語句查詢得到。現舉一例說明:

select "echo bcp '"+name+" out ……………………'

"+"bcp "+name+" out ./+"name+".table -c -t '|' -uuser -ppassword -s server" from sysobjects where type='u'

go 2)、執行isql命令,以此檔案作為輸入,執行結果輸出到另外乙個檔案裡:

isql -uuser -ppassword -s server -i mkbcpout.sql -o bcpout

3)、對bcppout檔案稍微修改,增加可執行許可權

chmod +x bcpout

4)、執行bcpout,匯出資料文字

./bcpout

3、資料庫恢復

業務生產機可能為小型機,而實驗開發環境的硬體環境為pc server,安裝好win nt或sco unix下的sybase伺服器後,根據需要建立空間足夠大的資料庫和tempdb(系統臨時資料庫),建立資料庫使用者,並將其更改為此資料庫的所有者,要注意兩點:1)此資料庫允許bcp拷貝,2)此資料庫自動清除log。命令格式為:

1> sp_dboption databasedbname ,"select into/bulkcopy",true

2> go

1> sp_dboption databasename,"trunc log on chkpt",true

2> go

上述兩個配置可能與生產機的配置不同。

然後以新建立的資料庫使用者登入,匯入資料結構,注意要首先匯入表結構,然後才是儲存過程、觸發器等等。命令格式:

1、 isql -uusername -ppassword -i table.ddl -o error.log.table

2、 isql -uusername -ppassword -i proc.ddl -o error.log.proc

為了提高bcp匯入資料的速度,需要將比較大的表的索引和主鍵刪除,否則的話,每bcp進一條資料,資料庫都自動寫一條log日誌,記載此資料的上一條和下一條記錄,確定本記錄在此表中的準確位置,一是影響bcp速度,二是資料庫的log飛速膨脹。資料庫的自動清除log功能只有在乙個事務結束後才起作用。

準備工作做完後,開始倒入資料記錄。使用類似做bcpout的方法做乙個bcpin的指令碼,然後執行:

./bcpin |tee error.bcpin

使用tee管道輸出的目的是讓計算機完整記錄下倒入過程,自動存入error.bcpin檔案中,待倒入結束後,我們只需要檢查日誌檔案,不需要一直緊盯著計算機螢幕。

所有工作做完之後,不要忘記重新將刪除的主鍵和索引建上。

如果有現成的資料庫,只需要單純地匯入資料記錄,則首先將資料庫中所有使用者表(也就是所有type="u"的表)清空,命令格式:

1> truncate table tablename

2> go

當然最好也是利用做bcpout指令碼的做乙個truncate指令碼,通過執行此指令碼將所有使用者表清空。然後的資料匯入、處理索引和主鍵的過程與上面類似。

三、利用做bcp備份指令碼的方法做資料庫碎片整理

sybase資料庫作為聯機事務處理應用伺服器,每天應用程式都對資料庫做大量的插入、修改和刪除等操作,不可避免的在資料庫的物理儲存介質上留下頁碎片和擴充套件單元碎片,從而影響資料庫的儲存效率和執行速度。具體表現為:業務繁忙時出現死鎖(dead lock),資料庫的輸入/輸出資源被大量占用,業務處理速度慢。其解決辦法是:

1、 清空資料庫中的所有表,命令格式:

isql -uusername -ppassword -i truncate.sql -o error.truncate

2、 刪除所有表的索引和主鍵

isql -uusername -ppassword -i dropindex.sql -o error.dropindex

3、 匯入資料

./bcpin

4、 新增索引和主鍵

isql -uusername -ppassword -i addindex.sql -o error.addindex

5、 更新資料庫狀態

1> update statistics tablename

2> go

上述操作都是針對資料庫中的所有使用者表進行的,利用做bcp備份指令碼的方法做出相應的指令碼,使繁瑣的資料庫維護變得簡便易行,還克服了直接使用isql語句操作風險大、沒有操作日誌的毛病。

Sybase資料庫備份方案

sybase資料庫產品自從1987年問世以來,它的客戶機 伺服器 client server 工作模式 分布處理的基礎體系結構 完善的安全保密性能 高速快捷的執行方式 多平台跨作業系統的廣泛應用等優點,迅速被it界接受並推廣應用。我們作為金融業的使用者,也在1995年開始使用sybase10版本。在...

Sybase資料庫備份方案

sybase資料庫產品自從1987年問世以來,它的客戶 機 伺服器 client server 工作模式 分布處理的基礎體系結構 完善的安全保密性能 高速快捷的執行方式 多平台 跨作業系統的廣泛應用等優點,迅速被it界接受並推廣 應用。我們作為金融業的使用者,也在1995年開始使用sybase10版...

Sybase資料庫表備份

1.insert into select語句 語句形式為 insert into table2 field1,field2,select value1,value2,from table1 要求目標表table2必須存在,由於目標表 table2 已經存在,所以我們除了插入源表 table1 的字段...