程序员人生 网站导航

sybase ASE tempdb库损坏修复

栏目:sybase时间:2014-05-24 23:35:14


sybase ASE tempdb库损坏修复

 

最近公司的blog系统由于sql脚本访问性能低下,原因一:写的sql脚本实在够复杂,子句嵌套子句,多表关联,一个语句一长串脚本。原因二:开发过程中,多次强调的系统上线前需要把新增加的DAO层脚本发给我们DBA人员检查过,分析过效率如何,趁此也可以进行表结构的设计优化,可惜这个步骤没有贯彻执行,导致全表扫描的脚本也有诸多上线。由于这两个原因导致了,在sql执行过程中产生的worktable庞大,吃tempdb没每秒几兆增长,而且执行sql驻留时间过长后,tempdb无法释放。导致10g的tempdb经常满,而导致数据库挂起,我们DBA在忙着抓取低效sql同时只能通过进程管理以及先添加tempdb空间来暂时解决这个问题,突然今天下午数据库访问出问题了,通过后台日志查看确定在访问tempdb时候出现错误。数据库问题重现。
 

根据以往曾经处理过的经验,决定进行tempdb的重建修复,然后进行系统数据字典信息转储来恢复用户库,下面是这次重建tempdb,,转储恢复用户库的过程步骤:

1.导出备份系统数据字典信息

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.移走备份系统库以及用户库设备文件

mkdir datbak

mv *.dat databak

 

3.备份配置文件

mv blog_sbar.cfg blog_sbar.cfg.bak

 

3.重建服务

清空interfaces的内容

srvbuildres -r ~/rs/blog_sbar.rs

srvbuildres -r ~/rs/blog_sbar_BACKUP.rs

 

4.字符集设置

cd ~/charsets/utf8/

charset  -Sblog_sbar -Usa -P binary.srt utf8

isql -Sblog_sbar -Usa -P

sp_configure "default character set id",190

--完成后重新启动两次

vi ~/locales/locales.dat

 

5.导入备份的系统数据字典信息

先设置系统数据字典允许修改

isql -Sblog_sbar -Usa -P

sp_configure "allow updates to system tables",1

delete from sysconfigures;

go    

exit

去掉txt文件中关于服务刚创建时的系统信息,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设备空间,进行tempdb优化

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设备

go

update sysusages set lstart=0 where dbid=2 ----这里只考虑一个tempdb设备,多个则不更新

go

sp_configure "allow updates to system tables",0 ----恢复系统表不允许修改

 

以上的处理步骤同样适用于其他的系统数据库的恢复。

 

 

摘自小宝老豆的专栏

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐