| 導購 | 订阅 | 在线投稿
分享
 
 
 

個人經驗總結:Sybase數據庫的全量備份方案

來源:互聯網  2008-07-19 08:21:42  評論

Sybase數據庫産品自從1987年問世以來,它的客戶機/服務器(client/server)工作模式、分布處理的基礎體系結構、完善的安全保密性能、高速快捷的運行方式、多平台跨操作系統的廣泛應用等優點,迅速被IT界接受並推廣應用。我們作爲金融業的用戶,也在1995年開始使用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'

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語句操作風險大、沒有操作日志的毛病。

筆者在實際工作中,使用第一種方法對生産機做日常全量備份,日終通過unix的crontab定時批量作業bcp出全部數據。使用高檔PC server 搭建模擬運行環境,在需要的情況下導入生産機數據,處理運行中後台server的各種問題,待研究出解決辦法後再在生産機上做相應調整,這樣做風險小,效果好。

Sybase數據庫産品自從1987年問世以來,它的客戶機/服務器(client/server)工作模式、分布處理的基礎體系結構、完善的安全保密性能、高速快捷的運行方式、多平台跨操作系統的廣泛應用等優點,迅速被IT界接受並推廣應用。我們作爲金融業的用戶,也在1995年開始使用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' 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語句操作風險大、沒有操作日志的毛病。 筆者在實際工作中,使用第一種方法對生産機做日常全量備份,日終通過unix的crontab定時批量作業bcp出全部數據。使用高檔PC server 搭建模擬運行環境,在需要的情況下導入生産機數據,處理運行中後台server的各種問題,待研究出解決辦法後再在生産機上做相應調整,這樣做風險小,效果好。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有