摘 要:Sybase數(shù)據(jù)庫主要用于大型數(shù)據(jù)庫的構(gòu)建和管理。在日常的Sybase數(shù)據(jù)庫維護(hù)過程作中,有時(shí)會遇到Sybase數(shù)據(jù)庫出錯(cuò)的情況,本文對Sybase數(shù)據(jù)庫常見問題及原因做了介紹,并對如何解決這些問題作了進(jìn)一步分析。
關(guān)鍵詞:Sybase數(shù)據(jù)庫;常見問題;解決辦法
中圖分類號:TP311.13
Sybase數(shù)據(jù)庫是一種基于客戶/服務(wù)器體系結(jié)構(gòu)的數(shù)據(jù)庫,主要部署和運(yùn)行于Unix操作系統(tǒng)中,是大型數(shù)據(jù)庫構(gòu)建與管理所采用的主要平臺之一。由于Sybase數(shù)據(jù)庫采用集中式數(shù)據(jù)管理方式,在日常的Sybase數(shù)據(jù)庫維護(hù)過程作中,有時(shí)會遇到Sybase數(shù)據(jù)庫出錯(cuò)的情況,現(xiàn)將發(fā)現(xiàn)的典型問題及詳細(xì)解決辦法總結(jié)如下。
1 Sybase數(shù)據(jù)庫簡介
Sybase數(shù)據(jù)庫是美國Sybase公司研制的一種關(guān)系型數(shù)據(jù)庫系統(tǒng),是一種基于客戶/服務(wù)器體系結(jié)構(gòu)的數(shù)據(jù)庫,部署和運(yùn)行于操作系統(tǒng)中,用于大型數(shù)據(jù)庫的構(gòu)建和管理。Sybase作為一種目前市場上比較流行的大型數(shù)據(jù)庫系統(tǒng),其具有完備的觸發(fā)器、存儲過程,支持優(yōu)化查詢,具有較好的數(shù)據(jù)安全性。擁有世界最大的數(shù)據(jù)倉庫,業(yè)界領(lǐng)先的信息建模解決方案以及Linux平臺上性能優(yōu)異的數(shù)據(jù)庫是一種典型的UNIX或WindowsNT平臺上客戶機(jī)/BE服務(wù)器環(huán)境下的大型數(shù)據(jù)庫系統(tǒng)。Sybase于1991年12月進(jìn)入中國,并于1993年成立賽貝斯軟件(中國)有限公司。多年來以其卓越的可靠性、安全性和開放性占據(jù)著移動(dòng)數(shù)據(jù)庫、移動(dòng)中間件及企業(yè)級移動(dòng)設(shè)備管理軟件領(lǐng)域第一的市場份額。其一般在我國大中型系統(tǒng)中應(yīng)用比較廣泛。
2 Sybase數(shù)據(jù)庫常見問題及原因
由于sybase數(shù)據(jù)庫服務(wù)器一端數(shù)據(jù)相對集中,數(shù)據(jù)風(fēng)險(xiǎn)比較集中,因此確保Sybase數(shù)據(jù)庫正常、穩(wěn)定運(yùn)行,以及數(shù)據(jù)庫和數(shù)據(jù)的安全成為至關(guān)重要的問題。
2.1 Sybase服務(wù)無法啟動(dòng)
原因:可能原因有:(1)master設(shè)備文件的所有者及權(quán)限改變;(2)network ip及port配置改變;(3)操作系統(tǒng)參數(shù)修改并重新啟動(dòng)操作系統(tǒng)。 解決辦法:在Sybase安裝目錄中,刪除sybase.krg文件(Windows系統(tǒng)中,如c:\sybase;Unix系統(tǒng)中,一般在/sybase/install/),重新啟動(dòng)機(jī)器后,Sybase服務(wù)能正常起來。
2.2 數(shù)據(jù)庫被掛起
造成應(yīng)用數(shù)據(jù)庫掛起原因通常是數(shù)據(jù)庫設(shè)備被重命名或位置移動(dòng)或異常,在確保設(shè)備名稱、所在目錄正常的情況下,通過修改掛起的數(shù)據(jù)庫狀態(tài),解決該問題。
解決辦法:
use master
go
sp_configure “allow updates”,1
go
update master..sysdatabase set status=-32768 where
name=”testdb”
go
/* 必須重新啟動(dòng)sybase服務(wù)后,再執(zhí)行以下語句*/
use master
go
update master..sysdatabase set status=-0 where
name=”testdb”
go
sp_configure “allow updates”,0
go
/* testdb數(shù)據(jù)庫正常后,請檢查它的dboption,如select into、trunc log on chkpt等選項(xiàng) */
2.3 數(shù)據(jù)庫性能慢
原因:(1)數(shù)據(jù)庫服務(wù)配置不合理;(2)應(yīng)用程序不合理
解決辦法:遇到數(shù)據(jù)庫性能下降時(shí)通常先檢查數(shù)據(jù)庫服務(wù)配置方面有沒有可以改善的,修改之后再觀察一段時(shí)間,如果性能沒有改善的話就要分析應(yīng)用程序上有沒有可以調(diào)整的地方:索引是否合理,sql語句是否優(yōu)化等。
2.4 數(shù)據(jù)庫出現(xiàn)死鎖
原因:客觀說來,只要是存在并發(fā)機(jī)制的大型數(shù)據(jù)庫應(yīng)用系統(tǒng),就一定會存在死鎖的問題,因此可以說死鎖是不能避免的。(1)由于多用戶、多任務(wù)的并發(fā)性和事務(wù)的完整性要求,當(dāng)多個(gè)事務(wù)分別鎖定了多個(gè)單獨(dú)的對象,這時(shí)每個(gè)事務(wù)又要求在對方已經(jīng)封鎖的對象上獲得一個(gè)鎖時(shí),每一個(gè)事務(wù)都必須等待另外一個(gè)事務(wù)釋放占有的鎖,因此就會導(dǎo)致無法在有限的時(shí)間內(nèi)完全獲得所需的資源,就會處于無限的等待狀態(tài),就發(fā)生了死鎖。這種死鎖是最典型的死鎖形式。(2)數(shù)據(jù)庫本身加鎖機(jī)制的實(shí)現(xiàn)方法不同,各數(shù)據(jù)庫系統(tǒng)也會產(chǎn)生其特殊的死鎖情況。
解決辦法:死鎖的頻繁發(fā)生將極大影響工作的效率,甚至可能對系統(tǒng)造成無法挽回的損失,死鎖的發(fā)生并不可怕,最重要的發(fā)生死鎖后能盡快消除,使系統(tǒng)重新正常運(yùn)轉(zhuǎn)。(1)查找死鎖原因。最簡單的辦法是在生產(chǎn)系統(tǒng)上激活死鎖信息輸出選項(xiàng),這樣發(fā)生死鎖時(shí)Sybase的系統(tǒng)日志會清楚地表明死鎖相關(guān)SQL語句的執(zhí)行情況;(2)死鎖發(fā)生時(shí)用系統(tǒng)進(jìn)程SP_WHO查看系統(tǒng)進(jìn)程信息;用SP_LOCK獲得當(dāng)前狀態(tài)中鎖的分配和使用情況。用sp_who獲取關(guān)于被阻礙進(jìn)程的系統(tǒng)進(jìn)程的報(bào)告。用sp_who可以得到鎖定與被鎖定的spid號。如果用戶進(jìn)程正被另一用戶進(jìn)程阻塞,則status列顯示“l(fā)ock sleep”,而blk列顯示保持該鎖或這些鎖的進(jìn)程標(biāo)識,即被誰鎖定。Loginname列顯示登錄操作員。這樣結(jié)合相應(yīng)的操作員信息表,便可知道操作員是誰。要得到關(guān)于當(dāng)前SQL Server上保持的鎖的報(bào)告,可通過SP_LOCK命令可以查看系統(tǒng)被鎖數(shù)據(jù)表的情況,包括數(shù)據(jù)表的ID號(要得到關(guān)于當(dāng)前SQL Server上保持的鎖的報(bào)告,可用系統(tǒng)過程sp_lock [spid1[,spid2]],spid1,spid2是表master.dbo.sysprocesses中的sql server 進(jìn)程id號),被鎖的類型(前綴sh為共享鎖,ex為排它鎖或更新鎖,有些鎖的后綴還帶有后綴blk表明鎖的狀態(tài),該進(jìn)程正在阻礙另一個(gè)需要請求鎖的進(jìn)程)以及數(shù)據(jù)庫名稱dbname;(3)根據(jù)sp_who與sp_lock命令的結(jié)果,與庫表sysobjects和相應(yīng)的操作員信息表得到操作員及其在死鎖時(shí)所操作的庫表,便大約可以估計(jì)出程序大約出錯(cuò)處。詢問操作員在死鎖時(shí)執(zhí)行的具體操作即可完全定位出錯(cuò)處,最后查找程序并修改之;(4)當(dāng)然,重新啟動(dòng)melinets數(shù)據(jù)庫服務(wù)器也可以達(dá)到解除死鎖的目的,但這個(gè)方法既無法保證數(shù)據(jù)的完整性,也耗費(fèi)資源。因此不到萬不得以不應(yīng)該采用重啟的方式。
2.5 數(shù)據(jù)庫日志損壞
原因:首先判斷錯(cuò)誤為頁損壞或者索引損壞,根據(jù)Adaptive Server failed to retrieve a row via its RID in database'escourt5'because the requested RID has a higher number than the last RID on the page.Rid pageid=0x1c88a8;row num=0x27.Page pointer=0x261CA000,pageno=1869992,status=0x1,objectid=8,indexid=0,level=0.
判斷其中:objectid=8 表示日志段有問題
解決方法:先把sysdatabases的status修改成-32768 然后重新啟動(dòng)數(shù)據(jù)庫
1>update sysdatabases set status=-32768 where name=\"escourt5\"
4>go
登陸數(shù)據(jù)庫
1> dump transaction escourt5 with truncate_only
2> go
Msg 921,Level 14, State 1:
Line 1:
Database 'escourt5' has not been recovered yet - please wait and try again.
1> dump transaction escourt5 with no_log
2> go
Msg 921,Level 14, State 1:
Line 1:
Database 'escourt5' has not been recovered yet-please wait and try again.
2.6 數(shù)據(jù)庫恢復(fù)
(1)常規(guī)恢復(fù)。數(shù)據(jù)庫的恢復(fù)必須使用nsrsybrc來做;如果想恢復(fù)數(shù)據(jù)到新的數(shù)據(jù)庫,必須先使用for load選項(xiàng)創(chuàng)建新庫(建立新的數(shù)據(jù)庫和舊數(shù)據(jù)庫擁有相同的設(shè)備分配)再使用nsrsybrc程序;(2)災(zāi)難性恢復(fù)。災(zāi)難性恢復(fù)主要是指主磁盤包括SQL_server和NetWorker客戶程序遭到損壞。其恢復(fù)方法是:首先,重新安裝NetWorker客戶端程序,數(shù)據(jù)庫Server軟件,BSMS模塊;其次,使用打印出的數(shù)據(jù)庫設(shè)備分配重新創(chuàng)建數(shù)據(jù)庫。再次,恢復(fù)master庫。Master庫是管理和控制用戶數(shù)據(jù)庫以及維護(hù)服務(wù)器正常運(yùn)行的核心數(shù)據(jù)庫,它保存了大量的系統(tǒng)信息,如服務(wù)器配置、用戶、設(shè)備等。使用“buildmaster”重建丟失的master設(shè)備;單用戶模式運(yùn)行數(shù)據(jù)庫服務(wù)器;重建一些master的額外設(shè)備;確信數(shù)據(jù)庫服務(wù)器在sysservers表中有正確的SybaseBackup Server名字;裝入master 數(shù)據(jù)庫:#nsrsybrc-Uusername -PpasswordSYBASE:/SQL_Server_name/master;該命令恢復(fù)master庫并關(guān)閉數(shù)據(jù)庫服務(wù)器;(3)恢復(fù)model庫:刪除或重建master設(shè)備上的其他數(shù)據(jù)庫;(4)恢復(fù)非master設(shè)備上的數(shù)據(jù)庫。
2.7 Sybase系統(tǒng)崩潰
解決辦法:(1)如果所有設(shè)備均是完整的。只需要先備份設(shè)備文件(包括master,copy 到安全的地方),然后重新安裝系統(tǒng),建服務(wù)(保持頁面大小、編碼和排序與以前一樣),然后停止服務(wù),按原目錄將所有設(shè)備文件拷貝回來,再重啟服務(wù)即可;(2)如果應(yīng)用的設(shè)備是完整的,但沒有master了。這就需要重新安裝系統(tǒng),建服務(wù),然后按原設(shè)備情況建設(shè)備(大小、位置保持和原來一致),接下來根據(jù)記錄下來的設(shè)備使用情況建庫,順序以及占用的空間要和以前的一致。然后停服務(wù),將應(yīng)用的數(shù)據(jù)庫設(shè)備復(fù)制回來,重啟服務(wù)即可。請參考Sybase ASE系統(tǒng)管理員日常維護(hù)指南的建議,定期備份master數(shù)據(jù)庫。
3 對Sybase數(shù)據(jù)庫可能發(fā)生問題的控制
(1)數(shù)據(jù)庫管理員定期檢查操作系統(tǒng)及數(shù)據(jù)庫權(quán)限、備份作業(yè)詳細(xì)說明書、備份記錄表,最終要有相應(yīng)的系統(tǒng)負(fù)責(zé)人審批;(2)管理員的密碼必須符合密碼管理規(guī)定。至少一個(gè)月更改一次密碼;(3)不要隨便改變操作系統(tǒng)或者數(shù)據(jù)庫系統(tǒng)的權(quán)限和參數(shù);(4)不要隨便對數(shù)據(jù)庫進(jìn)行恢復(fù),進(jìn)行恢復(fù)時(shí)應(yīng)考慮是否符合恢復(fù)的條件;(5)隨時(shí)對數(shù)據(jù)庫運(yùn)行狀態(tài)進(jìn)行監(jiān)控,對于一個(gè)滿負(fù)荷運(yùn)行的系統(tǒng),需要定時(shí)檢查機(jī)器的運(yùn)行狀態(tài),及時(shí)了解系統(tǒng)的性能,避免由于機(jī)器過負(fù)荷的故障。包括SQL Server的使用情況、跟蹤C(jī)PU與I/O的使用情況、監(jiān)控SQL Server 的errorlog、監(jiān)控空間的使用情況、檢驗(yàn)數(shù)據(jù)的一致性。Sybase提供了Audit Server,它是能夠全面審計(jì)跟蹤服務(wù)器上一切活動(dòng)的工具,在某些情況下,我們難以阻止非法操作的發(fā)生,但至少可以監(jiān)視非法操作,并采取跟蹤措施,找出非法執(zhí)行操作的人;(6)定期查看(錯(cuò)誤)日志。日志詳細(xì)記錄了數(shù)據(jù)庫的運(yùn)行過程情況,任何異常也會在日志中體現(xiàn)。查看日志并不需要多少時(shí)間,通常2-5分鐘就足夠了。將此項(xiàng)工作定期化,管理員就可以大致掌握數(shù)據(jù)庫的運(yùn)行狀況,并及時(shí)分析異常并做出正確的響應(yīng)。有鑒于此,強(qiáng)烈建議日志查看的頻度為每日一次。
4 結(jié)束語
綜上所述,本文從Sybase數(shù)據(jù)庫常見問題出發(fā),對可能出現(xiàn)的問題進(jìn)行詳細(xì)分析,并根據(jù)問題原因得出控制處理方法。不但為Sybase數(shù)據(jù)庫管理員提供理論與實(shí)踐支持,而且提供了解決實(shí)際問題的工作思路和工作方法,具有很強(qiáng)的可操作性。
參考文獻(xiàn):
[1]劉志成,劉峰,張春.Sybase數(shù)據(jù)庫安全代理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].鐵道運(yùn)輸與經(jīng)濟(jì),2006(05):67-69.
[2]劉海波,王愛民.如何在Unix系統(tǒng)上實(shí)現(xiàn)Sybase數(shù)據(jù)庫的自動(dòng)備份和遠(yuǎn)程備份[J].微型機(jī)與應(yīng)用,2001(03):53-56.
[3]魏金俠.利用Windows的任務(wù)計(jì)劃實(shí)現(xiàn)Sybase數(shù)據(jù)庫的自動(dòng)備份[J].電腦編程技巧與維護(hù),2011(04):46-48.
[4]周雨田,范孟哲.Sybase數(shù)據(jù)庫自動(dòng)備份與恢復(fù)系統(tǒng)的研制[A].二○○九年全國電力企業(yè)信息化大會論文集[C].中國電力企業(yè)聯(lián)合會科技開發(fā)服務(wù)中心,2009:6.
[5]燕東渭,夏巧利,高宇.9210工程Sybase數(shù)據(jù)庫系統(tǒng)應(yīng)用一例[A].數(shù)據(jù)庫技術(shù)在氣象領(lǐng)域的應(yīng)用學(xué)術(shù)會議論文集[C].中國氣象學(xué)會氣象電子技術(shù)委員會,2001:5.
[6]徐尤南.Sybase數(shù)據(jù)庫事務(wù)完整性研究[J].計(jì)算機(jī)工程與應(yīng)用,2002(04):186-188.
[7]李世武,李云祥,張欣杰.Sybase數(shù)據(jù)庫中的常見故障分析與解決策略[J].河北省科學(xué)院學(xué)報(bào),2004(02):57-61.
作者簡介:李詩瑤(1992.06-),女,滿族,遼寧撫順人,本科,研究方向:計(jì)算機(jī)科學(xué)與技術(shù)。
作者單位:遼寧師范大學(xué)海華學(xué)院,沈陽 110000