posts - 89,  comments - 98,  trackbacks - 0
          對(duì)Sybase數(shù)據(jù)庫(kù)的備份問(wèn)題一直比較頭痛,可能我對(duì)它的備份問(wèn)題還是了解的不夠.因此一直覺(jué)得使用起來(lái)較為繁瑣.今天看了這篇文章,有一定的作用.不過(guò)文章當(dāng)中還是沒(méi)有介紹增量備份都相關(guān)的內(nèi)容.有時(shí)間我可以補(bǔ)上.

          Sybase數(shù)據(jù)庫(kù)產(chǎn)品自從1987年問(wèn)世以來(lái),它的客戶機(jī)/服務(wù)器(client/server)工作模式、分布處理的基礎(chǔ)體系結(jié)構(gòu)、完善的安全保密性能、高速快捷的運(yùn)行方式、多平臺(tái)跨操作系統(tǒng)的廣泛應(yīng)用等優(yōu)點(diǎn),迅速被IT界接受并推廣應(yīng)用。我們作為金融業(yè)的用戶,也在1995年開(kāi)始使用Sybase10版本。在具體的使用中,發(fā)現(xiàn)集中式的數(shù)據(jù)管理有其優(yōu)點(diǎn),就是數(shù)據(jù)風(fēng)險(xiǎn)范圍大為縮小,但是作為Sybase的服務(wù)器一端,數(shù)據(jù)風(fēng)險(xiǎn)比較集中,如何做好數(shù)據(jù)庫(kù)的數(shù)據(jù)備份,成為至關(guān)重要的問(wèn)題。

          在實(shí)際應(yīng)用中,我們總結(jié)出了兩種全量備份方案:

          一、使用Sybase的Backup Server(備份服務(wù)器),做Dump備份

          轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫(kù)(Dump database),就是為整個(gè)數(shù)據(jù)庫(kù)(包括數(shù)據(jù)、表結(jié)構(gòu)、觸發(fā)器、游標(biāo)、存儲(chǔ)過(guò)程、事務(wù)日志等)做一次物理備份。轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫(kù)時(shí),系統(tǒng)自動(dòng)執(zhí)行一次checkpoint,即將日志和數(shù)據(jù)從緩沖區(qū)拷貝到硬盤(pán)(只拷貝臟頁(yè)),把已被分配的頁(yè)(日志和數(shù)據(jù))轉(zhuǎn)儲(chǔ)到設(shè)備。

          命令格式為:

          dump database 數(shù)據(jù)庫(kù)名 to 設(shè)備文件名 with 參數(shù)

          如果備份到硬盤(pán)的文件上,可以不預(yù)先估算備份文件的大小,只要硬盤(pán)有足夠的存儲(chǔ)空間就可以。如果是備份到dds磁帶上,那么就要估算一下備份后的大小,90米的dds磁帶壓縮存儲(chǔ)空間為4G,120米的磁帶壓縮存儲(chǔ)空間為8G,如果數(shù)據(jù)庫(kù)的備份文件超過(guò)了這個(gè)尺寸,就要考慮多文件轉(zhuǎn)儲(chǔ),使用stripe參數(shù)。

          命令格式為:

          dump database 數(shù)據(jù)庫(kù)名 to 設(shè)備文件名1

          stripe on 設(shè)備文件名2

          stripe on 設(shè)備文件名3……

          with 參數(shù)

          這種數(shù)據(jù)備份方式是將整個(gè)數(shù)據(jù)庫(kù)的運(yùn)行環(huán)境完整的復(fù)制一份,包括數(shù)據(jù)庫(kù)的臟頁(yè)和碎片,在使用load命令恢復(fù)時(shí),只能恢復(fù)到同樣大小的數(shù)據(jù)庫(kù)中(數(shù)據(jù)和日志的大小都只能和原來(lái)完全一致),適用于在每天的日終營(yíng)業(yè)網(wǎng)點(diǎn)下班后的日常備份。優(yōu)點(diǎn)是數(shù)據(jù)庫(kù)完整無(wú)誤,缺點(diǎn)是不能直接查看備份內(nèi)容。

          二、分?jǐn)?shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)記錄做兩次備份

          在一般情況下,生產(chǎn)機(jī)的數(shù)據(jù)庫(kù)都比較龐大,而實(shí)驗(yàn)機(jī)則相對(duì)較小,難以在實(shí)驗(yàn)環(huán)境中以load命令恢復(fù)工作機(jī)的內(nèi)容。所以,在工作實(shí)踐中,我們摸索出了第二種全量備份方案。

          1、數(shù)據(jù)結(jié)構(gòu)備份

          在windows平臺(tái)的Sybase SQL Server Manager(數(shù)據(jù)庫(kù)管理)平臺(tái)中選擇ServeràGenerate ddl則產(chǎn)生整個(gè)數(shù)據(jù)庫(kù)服務(wù)器的所有信息,如果選擇databaseàgenerate ddl則產(chǎn)生所選定數(shù)據(jù)庫(kù)的信息,以master庫(kù)為例,產(chǎn)生的文件主要包括:config.ddl(配置)、devices.ddl(設(shè)備)、database.ddl(數(shù)據(jù)庫(kù))、logins.ddl(用戶)、remote.ddl(遠(yuǎn)程)、cache.ddl(緩沖)、segment.ddl()、group.ddl(用戶組)、user.ddl(用戶)、default.ddl(確省)、rule.ddl(規(guī)則)、udt.ddl、table.ddl(表)、view.ddl(視圖)、proc.ddl(存儲(chǔ)過(guò)程)、triger.ddl(觸發(fā)器)。

          2、數(shù)據(jù)記錄備份

          將數(shù)據(jù)庫(kù)各表以Sybase自代的bcp(bulk copy)工具的方式導(dǎo)成一定格式的文本文件,命令格式:

          bcp 表名 out 路徑名 文件名 -c -t 分隔符 -u (用戶名)-p(密碼)-S(服務(wù)器名)

          如果將一個(gè)數(shù)據(jù)庫(kù)中的所有表都做一個(gè)bcp備份,就需要針對(duì)每一個(gè)表都做一次bcp,在一般情況下,一個(gè)數(shù)據(jù)庫(kù)有100多個(gè)表,工作量比較大。可以利用數(shù)據(jù)庫(kù)中的系統(tǒng)表信息做一個(gè)bcp備份腳本。原理是每一個(gè)用戶表在系統(tǒng)表中都有信息記載,可以通過(guò)isql語(yǔ)句查詢得到。現(xiàn)舉一例說(shuō)明:

          1)、先編輯一個(gè)名為mkbcpout.sql的文件,內(nèi)容如下:

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

          "+"bcp "+name+" out ./+"name+".table -c -t | -Uuser -Ppassword -S SERVER" from sysobjects where type=U

          go

          2)、執(zhí)行isql命令,以此文件作為輸入,執(zhí)行結(jié)果輸出到另外一個(gè)文件里:

          isql -Uuser -Ppassword -S server -I mkbcpout.sql -O bcpout

          3)、對(duì)bcppout文件稍微修改,增加可執(zhí)行權(quán)限

          chmod +x bcpout

          4)、執(zhí)行bcpout,導(dǎo)出數(shù)據(jù)文本:

          ./bcpout

          3、數(shù)據(jù)庫(kù)恢復(fù)

          業(yè)務(wù)生產(chǎn)機(jī)可能為小型機(jī),而實(shí)驗(yàn)開(kāi)發(fā)環(huán)境的硬件環(huán)境為PC server,安裝好win nt或SCO unix下的Sybase服務(wù)器后,根據(jù)需要?jiǎng)?chuàng)建空間足夠大的數(shù)據(jù)庫(kù)和tempdb(系統(tǒng)臨時(shí)數(shù)據(jù)庫(kù)),創(chuàng)建數(shù)據(jù)庫(kù)用戶,并將其更改為此數(shù)據(jù)庫(kù)的所有者,要注意兩點(diǎn):1)此數(shù)據(jù)庫(kù)允許bcp拷貝,2)此數(shù)據(jù)庫(kù)自動(dòng)清除log。命令格式為:

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

          2> go

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

          2> go

          上述兩個(gè)配置可能與生產(chǎn)機(jī)的配置不同。

          然后以新創(chuàng)建的數(shù)據(jù)庫(kù)用戶登錄,導(dǎo)入數(shù)據(jù)結(jié)構(gòu),注意要首先導(dǎo)入表結(jié)構(gòu),然后才是存儲(chǔ)過(guò)程、觸發(fā)器等等。命令格式:

          1、 isql -Uusername -Ppassword -I table.ddl -o error.log.table

          2、 isql -Uusername -Ppassword -I proc.ddl -o error.log.proc

          ……

          為了提高bcp導(dǎo)入數(shù)據(jù)的速度,需要將比較大的表的索引和主鍵刪除,否則的話,每bcp進(jìn)一條數(shù)據(jù),數(shù)據(jù)庫(kù)都自動(dòng)寫(xiě)一條log日志,記載此數(shù)據(jù)的上一條和下一條記錄,確定本記錄在此表中的準(zhǔn)確位置,一是影響bcp速度,二是數(shù)據(jù)庫(kù)的log飛速膨脹。數(shù)據(jù)庫(kù)的自動(dòng)清除log功能只有在一個(gè)事務(wù)結(jié)束后才起作用。

          準(zhǔn)備工作做完后,開(kāi)始倒入數(shù)據(jù)記錄。使用類似做bcpout的方法做一個(gè)bcpin的腳本,然后執(zhí)行:

          ./bcpin |tee error.bcpin

          使用tee管道輸出的目的是讓計(jì)算機(jī)完整記錄下倒入過(guò)程,自動(dòng)存入error.bcpin文件中,待倒入結(jié)束后,我們只需要檢查日志文件,不需要一直緊盯著計(jì)算機(jī)屏幕。

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

          如果有現(xiàn)成的數(shù)據(jù)庫(kù),只需要單純地導(dǎo)入數(shù)據(jù)記錄,則首先將數(shù)據(jù)庫(kù)中所有用戶表(也就是所有type="U"的表)清空,命令格式:

          1> truncate table tablename

          2> go

          當(dāng)然最好也是利用做bcpout腳本的做一個(gè)truncate腳本,通過(guò)執(zhí)行此腳本將所有用戶表清空。然后的數(shù)據(jù)導(dǎo)入、處理索引和主鍵的過(guò)程與上面類似。

          三、利用做bcp備份腳本的方法做數(shù)據(jù)庫(kù)碎片整理

          Sybase數(shù)據(jù)庫(kù)作為聯(lián)機(jī)事務(wù)處理應(yīng)用服務(wù)器,每天應(yīng)用程序都對(duì)數(shù)據(jù)庫(kù)做大量的插入、修改和刪除等操作,不可避免的在數(shù)據(jù)庫(kù)的物理存儲(chǔ)介質(zhì)上留下頁(yè)碎片和擴(kuò)展單元碎片,從而影響數(shù)據(jù)庫(kù)的存儲(chǔ)效率和運(yùn)行速度。具體表現(xiàn)為:業(yè)務(wù)繁忙時(shí)出現(xiàn)死鎖(dead lock),數(shù)據(jù)庫(kù)的輸入/輸出資源被大量占用,業(yè)務(wù)處理速度慢。其解決辦法是:

          1、 清空數(shù)據(jù)庫(kù)中的所有表,命令格式:isql -Uusername -Ppassword -I truncate.sql -o error.truncate

          2、 刪除所有表的索引和主鍵:isql -Uusername -Ppassword -I dropindex.sql -o error.dropindex

          3、 導(dǎo)入數(shù)據(jù):./bcpin

          4、 添加索引和主鍵:isql -Uusername -Ppassword -I addindex.sql -o error.addindex

          5、 更新數(shù)據(jù)庫(kù)狀態(tài)

          1> update statistics tablename

          2> go

          上述操作都是針對(duì)數(shù)據(jù)庫(kù)中的所有用戶表進(jìn)行的,利用做bcp備份腳本的方法做出相應(yīng)的腳本,使繁瑣的數(shù)據(jù)庫(kù)維護(hù)變得簡(jiǎn)便易行,還克服了直接使用isql語(yǔ)句操作風(fēng)險(xiǎn)大、沒(méi)有操作日志的毛病。

          筆者在實(shí)際工作中,使用第一種方法對(duì)生產(chǎn)機(jī)做日常全量備份,日終通過(guò)unix的crontab定時(shí)批量作業(yè)(具體做法請(qǐng)參考《中國(guó)金融電腦》2001年第10期有關(guān)crontab的文章)bcp出全部數(shù)據(jù)。使用高檔PC server 搭建模擬運(yùn)行環(huán)境,在需要的情況下導(dǎo)入生產(chǎn)機(jī)數(shù)據(jù),處理運(yùn)行中后臺(tái)server的各種問(wèn)題,待研究出解決辦法后再在生產(chǎn)機(jī)上做相應(yīng)調(diào)整,這樣做風(fēng)險(xiǎn)小,效果好。

          posted on 2006-09-11 11:12 水煮三國(guó) 閱讀(530) 評(píng)論(0)  編輯  收藏 所屬分類: Sybase
          <2006年9月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          常用鏈接

          留言簿(4)

          隨筆分類(85)

          隨筆檔案(89)

          文章分類(14)

          文章檔案(42)

          收藏夾(37)

          java

          oracle

          Sybase

          搜索

          •  

          積分與排名

          • 積分 - 211137
          • 排名 - 265

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 竹溪县| 吉安县| 鹤山市| 陆川县| 白银市| 方正县| 福建省| 新田县| 南平市| 嵊泗县| 白城市| 土默特左旗| 武定县| 嘉祥县| 阿勒泰市| 都江堰市| 海门市| 屏边| 岳西县| 景谷| 浦县| 大庆市| 施秉县| 藁城市| 龙川县| 深州市| 望谟县| 台北县| 六安市| 五莲县| 阳新县| 江川县| 大关县| 德令哈市| 温宿县| 永寿县| 乐山市| 河源市| 文成县| 平山县| 玉林市|