Sybase数据库故障处理方法一、Sybsystemprocs 库“挂起”解决办法1. 修改Sybase.cfg 文件,修改Sybase 数据库可以修改系统参数.2. $ vi Sybase.cfg 查找―allow updates‖,将其修改为1.(缺省值为0). 既allow updates to system tables=1 重新启动系统.3. 用isql 登录到sql server 中,修改master库中sysdatabases 表中sybsystemprocs 库对应的status 的值为-32768. $isql –Usa –P 1> update master..sysdatabases 2> set status = -32768 where name =‖sybsystemprocs‖1>go 1>shutdown with nowait 2>go 关闭数据库重新启动.4.用isql 登录到sql server 中,修改master库中sysdatabases 表中sybsystemprocs 库对应的status 的值为0. $isql –Usa –P 1>update master..sysdatabases 2>set status = 0 where name =‖sybsystemprocs‖3>go 1>shutdown with nowait 2>go 关闭数据库重新启动.5. 将Sybase.cfg 中的‖allow updates to system‖的值改为0.二、如何恢复master数据库ASE can't setup and has no valid dump of master1、编辑RUN_servername 在命令行最后加入:-T36072、单用户模式启动ASE $cd install $startserver -f RUN_servername -m3、bcp out系统表$bcp master..sysdevices out /directory.spec/devs -Usa -P -c $bcp master..sysdatabases out /directory.spec/dbs -Usa -P -c $bcp master..sysusages out /directory.spec/usages -Usa -P -c $bcp master..syslogins out /directory.spec/logins -Usa -P -c $bcp master..sysconfigures out /directory.spec/configures -Usa -P -c $bcp master..syscharsets out /directory.spec/charsets -Usa -P -c4、shutdownASE5、创建新master设备$buildmaster -d<path_to_new_master_device> -s<new_master_device_size> (new_master_device_size以2K为单位)6、编辑RUN_servername 将指定master设备指定为新创建的master设备,并删除在第1步中增加的参数。
7、删除/directory.spec/dbs、/directory.spec/usages文件中有关master、tempdb、model的内容。
8、单用户模式启动ASE $cd install $startserver -f RUN_servername -m9、bcp in系统表$ bcp master..sysdevices in /directory.spec/devs -Usa -P -b 1 -c $bcp master..sysdatabases in /directory.spec/dbs -Usa -P -b 1 -c $bcp master..sysusages in /directory.spec/usages -Usa -P -b 1 -c $bcp master..syslogins in /directory.spec/logins -Usa -P -b 1 -c $bcp master..sysconfigures in /directory.spec/configures -Usa -P -b 1 -c $bcp master..syscharsets in /directory.spec/charsets -Usa -P -b 1 -c10、shudown ASE11、执行installmaster脚本$isql -Usa -P < $SYBASE/scripts/installmaster12、启动ASE三、如何删除坏的用户数据库?(以pubs2为例)当使用drop database无法删除数据库时,使用本文所示方法可以删除。
(1)使用isql以sa注册SQL server(2)设置允许修改系统表1>sp_configure "allow updates",1 2>go(3)把要删除的用户数据库置为"suspect"状态1>use master 2>go1>begin tran 2>go 1>update sysdatabases set status=256 2>where name="pubs2"3>go 如果得到(1 row affected),则1>commit 2>go 否则1>rollback 2>go(4)重启server,并用isql以sa注册。
(5)删除数据库1>dbcc dbrepair(pubs2,dropdb) 2>go(6)恢复允许修改系统表1>sp_configure "allow updates",0 2>go(7)结束四、如何做rebuild log注意:这个过程可能会引起数据的不一致性。
(1)赋予sa用户sybase_ts_role的角色isql -Usa -P 1>sp_role "grant","sybase_ts_role",sa 2>go 1>quit(2)将数据库置为"bypass recovery"状态isql -Usa -P 1>sp_configure "allow updates",1 2>go 1>use master 2>go 1>update sysdatabases set status=-327682>where name="database_name" 3>go 1>shutdown with nowait 2>go(3)rebuild数据库日志重启Server isql -Usa -P 1>use master 2>go 1>dbcc rebuild_log(database_name,1,1) 2>go 1>shutdown with nowait 2>go(4)重启SQL server 1>use master 2>go 1>update sysdatabases set status=0 where name="database_name" 2>go 1>sp_configure "allow updates",0 2>go 1>shutdown with nowait 2>go(5)在重启SQL server之后,如果数据库恢复正常,rebuild log工作将会成功完成,否则要恢复数据库备份,使用dump database或bcp命令。
五、数据库被标记为"suspect"时(1) ---- 一般解决方案现象:Error 926 SeverityLevel 14 Error Message Text Database 'xx' cannot be opened - it has been marked SUSPECT by recover Explanation(1) 当你使用Transact_SQL命令操作这个数据库的数据时, 出现这个信息, 这是一个严重的错误, 如果你要使用这个数据库的数据, 必须改正这个错误.(2) 启动Backup Server, 后备master数据库1>dump database master to"/usr/sybase/master_dump.19991201" 2>go(3) 用isql登录到SQL Server, 须用sa帐号(本文以pubs2数据库为例)1>sp_configure "allow updates", 1 2>go 1>begin tran2>go 1>update master..sysdatabases 2>set status =-32768 3>Where name="pubs2" 4>go 如果得到(1 row affected),则1>commit 2>go 否则1>rollback 2>go(4)如果条件允许,bcp out用户数据或dump用户数据库(5)这时重新启动SQL Server, 再有sa帐号注册到SQL Server.1>begin tran 2>go 1>update master..sysdatabases2>set status=0 3>Where name="pubs2" 4>go如果得到(1 row affected),则1>commit 2>go 否则1>rollback2>go 1>sp_configure "allow updates" ,0 2>go(6) 如果你的数据库原来有dboption(例如"select into","trunc log on chkpt"等),你需要重新设置这些option..(7) 运行dbcc命令检查数据库的一致性isql -Usa -P -i dbcc.sql -o dbcc.outdbcc.sql文件示例:dbcc checkdb("pubs2") go dbcc checkalloc("pubs2") go dbcc checkcatalog("pubs2") go grep Msg dbcc.out(8) 后备用户数据库1>dump database pubs2 on"/usr/sybase/pubs2_dump.19991201" 2>go六、数据库被标记为"suspect"时(2) ---- 数据库设备损坏时的解决方案现象:926错误产生的原因有几种。