sybase數據庫備份方案

  1、使用sybasebackup server(備份服務器),作dump備份
   轉儲數據庫(dump database),就是爲整個數據庫(包括數據、表結構、觸發器、遊標、存儲過程、事務日誌等)作一次物理備份。轉儲數據庫時,系統自動執行一次checkpoint,即將日誌和數據從緩衝區拷貝到硬盤(只拷貝髒頁),把已被分配的頁(日誌和數據)轉儲到設備。
  命令格式爲:
   dump database 數據庫名 to 設備文件名 with 參數
  若是備份到硬盤的文件上,能夠不預先估算備份文件的大小,只要硬盤有足夠的存儲空間就能夠。若是是備份到dds磁帶上,那麼就要估算一下備份後的大小,90dds磁帶壓縮存儲空間爲4g,120的磁帶壓縮存儲空間爲8g,若是數據庫的備份文件超過了這個尺寸,就要考慮多文件轉儲,使用stripe參數。
  命令格式爲:sql

 dump database 數據庫名 to 設備文件名1
    stripe on 設備文件名2
    stripe on 設備文件名3……
   with 參數

  這種數據備份方式是將整個數據庫的運行環境完整的複製一份,包括數據庫的髒頁和碎片,在使用load命令恢復時,只能恢復到一樣大小的
數據庫中(數據和日誌的大小都只能和原來徹底一致),適用於在天天的日終營業網點下班後的平常備份。優勢是數據庫完整無誤,缺點是不能直接查看備分內容。

  2、分數據結構和數據記錄作兩次備份
  在通常狀況下,生產機的數據庫都比較龐大,而實驗機則相對較小,難以在實驗環境中以load命令恢復工做機的內容。因此,在工做實踐中,咱們摸索出了第二種全量備份方案。
  一、數據結構備份
  在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(觸發器)。
  二、數據記錄備份
  將數據庫各表以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''
go
windows

2)、執行isql命令,以此文件做爲輸入,執行結果輸出到另一個文件裏:服務器

isql -uuser -ppassword -s server -i mkbcpout.sql -o bcpout數據結構

3)、對bcppout文件稍微修改,增長可執行權限工具

chmod +x bcpoutspa

4)、執行bcpout,導出數據文本unix

./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
  上述兩個配置可能與生產機的配置不一樣。
  而後以新建立的數據庫用戶登陸,導入數據結構,注意要首先導入表結構,而後纔是存儲過程、觸發器等等。命令格式:
  一、 isql -uusername -ppassword -i table.ddl -o error.log.table
  二、 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腳本,經過執行此腳本將全部用戶表清空。而後的數據導入、處理索引和主鍵的過程與上面相似。
  3、利用作bcp備份腳本的方法作數據庫碎片整理
  sybase數據庫做爲聯機事務處理應用服務器,天天
應用程序都對數據庫作大量的插入、修改和刪除等操做,不可避免的在數據庫的物理存儲介質上留下頁碎片和擴展單元碎片,從而影響數據庫的存儲效率和運行速度。具體表現爲:業務繁忙時出現死鎖(dead lock),數據庫的輸入/輸出資源被大量佔用,業務處理速度慢。其解決辦法是:
  一、 清空數據庫中的全部表,命令格式:
    isql -uusername -ppassword -i truncate.sql -o error.truncate
  二、 刪除全部表的索引和主鍵
    isql -uusername -ppassword -i dropindex.sql -o error.dropindex
  三、 導入數據
    ./bcpin
   四、 添加索引和主鍵
    isql -uusername -ppassword -i addindex.sql -o error.addindex
  五、 更新數據庫狀態
    1> update statistics tablename
    2> go
  上述操做都是針對數據庫中的全部用戶表進行的,利用作bcp備份腳本的方法作出相應的腳本,使繁瑣的數據庫維護變得簡便易行,還克服了直接使用isql語句操做風險大、沒有操做日誌的毛病。
  筆者在實際工做中,使用第一種方法對生產機作平常全量備份,日終經過unix的crontab定時批量做業bcp出所有數據。使用高檔pc server 搭建模擬運行環境,在須要的狀況下導入生產機數據,處理運行中後臺server的各類問題,待研究出解決辦法後再在生產機上作相應調整,這樣作風險小,效果好。
server

相關文章
相關標籤/搜索