sybase ASE tempdb库损坏修复

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

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

1.如果master库不能正常recover,在RUN_xxx文件里加-m -T3607,启动服务,否则越过1步。

2.导出备份系统数据字典信息
bcp master..sysusages out sysusages.txt -c  -Setoh2 -Usa -P123456
bcp master..sysdevices out sysdevices.txt -c -Setoh2 -Usa -P123456
bcp master..sysdatabases out sysdatabases.txt -c -Setoh2 -Usa -P123456
bcp master..syslogins out syslogins.txt -c -Setoh2 -Usa -P123456
bcp master..sysconfigures out sysconfigures.txt -c -Setoh2 -Usa -P123456

3.停止服务
isql -Setoh2 -Usa -P123456
shutdown with nowait
go

3.移走备份系统库以及用户库设备文件
mkdir datbak
mv *.dat databak


4.备份配置文件
mv etoh2.cfg etoh2.cfg.bak

3.重建服务
清空interfaces的内容

srvbuildres -r ~/rs/db.rs
srvbuildres -r ~/rs/backup.rs

4.字符集设置
--服务端字符集设置
cd ~/charsets/cp936/
charset  -Setoh2 -Usa -P binary.srt cp936 --服务端字符集,也可以是utf8
isql -Setoh2 -Usa -P
sp_configure "default character set id",171 --utf8对应190
--完成后重新启动两次


修改本地字符集:
编辑sybase用户home目录下的locales目录下的locales.dat文件。
vi ~/locales/locales.dat
将[linux]段内的locale = default,us_english,cp936中的设置修改为指定设置即可。

5.导入备份的系统数据字典信息
先设置系统数据字典允许修改
isql -Setoh2 -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  -Setoh2 -Usa -P
bcp master..sysdevices in sysdevices.txt -c -Setoh2 -Usa -P
bcp master..sysdatabases in sysdatabases.txt -c -Setoh2 -Usa -P
bcp master..syslogins in syslogins.txt -c -Setoh2 -Usa -P
bcp master..sysconfigures in sysconfigures.txt -c -Setoh2 -Usa -P

6.添加tempdb空间
disk init name  = 'tempdb',physname = '/opt/sybase-12.5.4/data/tempdb.dat',size  = '2048M',cntrltype= 0,dsync = false
go
alter database tempdb on tempdb=2048 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 ----恢复系统表不允许修改
go

8.覆盖会服务配置文件
cp etoh2.cfg.bak etoh2.cfg

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值