sybase資料庫產品自從2023年問世以來,它的客戶
機/伺服器(client/server)工作模式、分布處理的基礎體系結構、完善的安全保密性能、高速快捷的執行方式、多平台
跨作業系統的廣泛應用等優點,迅速被it界接受並推廣
應用。我們作為金融業的使用者,也在2023年開始使用sybase10版本。在具體的使用中,發現集中式的資料管理有其優點,就是資料風險範圍大為縮小,但是作為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語句查詢得到。現舉一例說明:
1)、先編輯乙個名為mkbcpout.sql的檔案,內容如下:
select "echo bcp '"+name+" out ……………………'
"+"bcp "+name+" out ./+"name+".table -c -t '|' -uuser -ppassword -s server" from sysobjects where type='u'
go2)、執行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語句操作風險大、沒有操作日誌的毛病。
筆者在實際工作中,使用第一種方法對生產機做日常全量備份,日終通過unix的crontab定時批量作業bcp出全部資料。使用高檔pc server 搭建模擬執行環境,在需要的情況下匯入生產機資料,處理執行中後台server的各種問題,待研究出解決辦法後再在生產機上做相應調整,這樣做風險小,效果
好。
Sybase資料庫備份方案
作為sybase的伺服器一端,資料風險比較集中,如何做好資料庫的資料備份,成為至關重要的問題。在實際應用中,我們總結出了兩種全量備份方案 一 使用sybase的backup server 備份伺服器 做dump備份 轉儲資料庫 dump database 就是為整個資料庫 包括資料 表結構 觸發器 ...
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 的字段...