sybase ASE tempdb庫損壞修復(fù)
最近公司的blog系統(tǒng)由于sql腳本訪問性能低下,原因一:寫的sql腳本實(shí)在夠復(fù)雜,子句嵌套子句,多表關(guān)聯(lián),一個(gè)語句一長串腳本。原因二:開發(fā)過程中,多次強(qiáng)調(diào)的系統(tǒng)上線前需要把新增加的DAO層腳本發(fā)給我們DBA人員檢查過,分析過效率如何,趁此也可以進(jìn)行表結(jié)構(gòu)的設(shè)計(jì)優(yōu)化,可惜這個(gè)步驟沒有貫徹執(zhí)行,導(dǎo)致全表掃描的腳本也有諸多上線。由于這兩個(gè)原因?qū)е铝?,在sql執(zhí)行過程中產(chǎn)生的worktable龐大,吃tempdb沒每秒幾兆增長,而且執(zhí)行sql駐留時(shí)間過長后,tempdb無法釋放。導(dǎo)致10g的tempdb經(jīng)常滿,而導(dǎo)致數(shù)據(jù)庫掛起,我們DBA在忙著抓取低效sql同時(shí)只能通過進(jìn)程管理以及先添加tempdb空間來暫時(shí)解決這個(gè)問題,突然今天下午數(shù)據(jù)庫訪問出問題了,通過后臺(tái)日志查看確定在訪問tempdb時(shí)候出現(xiàn)錯(cuò)誤。數(shù)據(jù)庫問題重現(xiàn)。
根據(jù)以往曾經(jīng)處理過的經(jīng)驗(yàn),決定進(jìn)行tempdb的重建修復(fù),然后進(jìn)行系統(tǒng)數(shù)據(jù)字典信息轉(zhuǎn)儲(chǔ)來恢復(fù)用戶庫,下面是這次重建tempdb,,轉(zhuǎn)儲(chǔ)恢復(fù)用戶庫的過程步驟:
1.導(dǎo)出備份系統(tǒng)數(shù)據(jù)字典信息
bcp master..sysusages out sysusages.txt -c -Sblog_sbar -Usa -P123456
bcp master..sysdevices out sysdevices.txt -c -Sblog_sbar -Usa -P123456
bcp master..sysdatabases out sysdatabases.txt -c -Sblog_sbar -Usa -P123456
bcp master..syslogins out syslogins.txt -c -Sblog_sbar -Usa -P123456
bcp master..sysconfigures out sysconfigures.txt -c -Sblog_sbar -Usa -P123456
2.移走備份系統(tǒng)庫以及用戶庫設(shè)備文件
mkdir datbak
mv *.dat databak
3.備份配置文件
mv blog_sbar.cfg blog_sbar.cfg.bak
3.重建服務(wù)
清空interfaces的內(nèi)容
srvbuildres -r ~/rs/blog_sbar.rs
srvbuildres -r ~/rs/blog_sbar_BACKUP.rs
4.字符集設(shè)置
cd ~/charsets/utf8/
charset -Sblog_sbar -Usa -P binary.srt utf8
isql -Sblog_sbar -Usa -P
sp_configure "default character set id",190
--完成后重新啟動(dòng)兩次
vi ~/locales/locales.dat
5.導(dǎo)入備份的系統(tǒng)數(shù)據(jù)字典信息
先設(shè)置系統(tǒng)數(shù)據(jù)字典允許修改
isql -Sblog_sbar -Usa -P
sp_configure "allow updates to system tables",1
delete from sysconfigures;
go
exit
去掉txt文件中關(guān)于服務(wù)剛創(chuàng)建時(shí)的系統(tǒng)信息,master,model,tempdb,systemproc....
bcp master..sysusages in sysusages.txt -c -Sblog_sbar -Usa -P
bcp master..sysdevices in sysdevices.txt -c -Sblog_sbar -Usa -P
bcp master..sysdatabases in sysdatabases.txt -c -Sblog_sbar -Usa -P
bcp master..syslogins in syslogins.txt -c -Sblog_sbar -Usa -P
bcp master..sysconfigures in sysconfigures.txt -c -Sblog_sbar -Usa -P
6.添加tempdb空間
disk init name = 'tempdb',physname = '/sda/blog_sbar/tempdb.dat',size = '10240M',cntrltype= 0,dsync = false
go
alter database tempdb on tempdb=10240 with override
go
7.剝離tempdb占用master的8m設(shè)備空間,進(jìn)行tempdb優(yōu)化
use tempdb
go
sp_dropsegment "default",tempdb,master
go
sp_dropsegment logsegment,tempdb,master
go
sp_dropsegment system,tempdb,master
go
use master
go
sp_configure "allow updates to system tables",1
go
delete from sysusages where dbid=2 and lstart=0----dbid=2是tempdb,lstart=0是master設(shè)備
go
update sysusages set lstart=0 where dbid=2 ----這里只考慮一個(gè)tempdb設(shè)備,多個(gè)則不更新
go
sp_configure "allow updates to system tables",0 ----恢復(fù)系統(tǒng)表不允許修改
以上的處理步驟同樣適用于其他的系統(tǒng)數(shù)據(jù)庫的恢復(fù)。
摘自小寶老豆的專欄