Sybase数据库故障处理方法.docx
- 文档编号:1620131
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:15
- 大小:20.63KB
Sybase数据库故障处理方法.docx
《Sybase数据库故障处理方法.docx》由会员分享,可在线阅读,更多相关《Sybase数据库故障处理方法.docx(15页珍藏版)》请在冰点文库上搜索。
Sybase数据库故障处理方法
Sybase数据库故障处理方法
一、Sybsystemprocs库“挂起”解决办法
1.修改Sybase.cfg文件,修改Sybase数据库可以修改系统参数.
2.$viSybase.cfg
查找“allowupdates”,将其修改为1.(缺省值为0).
既allowupdatestosystemtables=1
重新启动系统.
3.用 isql登录到sqlserver中,修改master库中sysdatabases表中sybsystemprocs库对应的status的值为-32768.
$isql–Usa–P
1>updatemaster..sysdatabases
2>setstatus=-32768wherename=”sybsystemprocs”
1>go
1>shutdownwithnowait
2>go
关闭数据库重新启动.
4.用 isql登录到sqlserver中,修改master库中sysdatabases表中sybsystemprocs库对应的status的值为0.
$isql–Usa–P
1>updatemaster..sysdatabases
2>setstatus=0wherename=”sybsystemprocs”
3>go
1>shutdownwithnowait
2>go
关闭数据库重新启动.
5.将Sybase.cfg中的”allowupdatestosystem”的值改为0.
二、如何恢复master数据库
ASEcan'tsetupandhasnovaliddumpofmaster
1、编辑RUN_servername
在命令行最后加入:
-T3607
2、单用户模式启动ASE
$cdinstall
$startserver-fRUN_servername-m
3、bcpout系统表
$bcpmaster..sysdevicesout/directory.spec/devs-Usa-P-c
$bcpmaster..sysdatabasesout/directory.spec/dbs-Usa-P-c
$bcpmaster..sysusagesout/directory.spec/usages-Usa-P-c
$bcpmaster..sysloginsout/directory.spec/logins-Usa-P-c
$bcpmaster..sysconfiguresout/directory.spec/configures-Usa-P-c
$bcpmaster..syscharsetsout/directory.spec/charsets-Usa-P-c
4、shutdownASE
5、创建新master设备
$buildmaster-d
(new_master_device_size以2K为单位)
6、编辑RUN_servername
将指定master设备指定为新创建的master设备,并删除在第1步中增加的参数。
7、删除/directory.spec/dbs、/directory.spec/usages文件中有关master、tempdb、model的容。
8、单用户模式启动ASE
$cdinstall
$startserver-fRUN_servername-m
9、bcpin系统表
$bcpmaster..sysdevicesin/directory.spec/devs-Usa-P-b1-c
$bcpmaster..sysdatabasesin/directory.spec/dbs-Usa-P-b1-c
$bcpmaster..sysusagesin/directory.spec/usages-Usa-P-b1-c
$bcpmaster..sysloginsin/directory.spec/logins-Usa-P-b1-c
$bcpmaster..sysconfiguresin/directory.spec/configures-Usa-P-b1-c
$bcpmaster..syscharsetsin/directory.spec/charsets-Usa-P-b1-c
10、shudownASE
11、执行installmaster脚本
$isql-Usa-P<$SYBASE/scripts/installmaster
12、启动ASE
三、如何删除坏的用户数据库?
(以pubs2为例)
当使用dropdatabase无法删除数据库时,使用本文所示方法可以删除。
(1)使用isql以sa注册SQLserver
(2)设置允许修改系统表
1>sp_configure"allowupdates",1
2>go
(3)把要删除的用户数据库置为"suspect"状态
1>usemaster
2>go
1>begintran
2>go
1>updatesysdatabasessetstatus=256
2>wherename="pubs2"
3>go
如果得到(1rowaffected),则
1>commit
2>go
否则
1>rollback
2>go
(4)重启server,并用isql以sa注册。
(5)删除数据库
1>dbccdbrepair(pubs2,dropdb)
2>go
(6)恢复允许修改系统表
1>sp_configure"allowupdates",0
2>go
(7)结束
四、如何做rebuildlog
注意:
这个过程可能会引起数据的不一致性。
(1)赋予sa用户sybase_ts_role的角色
isql-Usa-P
1>sp_role"grant","sybase_ts_role",sa
2>go
1>quit
(2)将数据库置为"bypassrecovery"状态
isql-Usa-P
1>sp_configure"allowupdates",1
2>go
1>usemaster
2>go
1>updatesysdatabasessetstatus=-32768
2>wherename="database_name"
3>go
1>shutdownwithnowait
2>go
(3)rebuild数据库日志
重启Server
isql-Usa-P
1>usemaster
2>go
1>dbccrebuild_log(database_name,1,1)
2>go
1>shutdownwithnowait
2>go
(4)重启SQLserver
1>usemaster
2>go
1>updatesysdatabasessetstatus=0wherename="database_name"
2>go
1>sp_configure"allowupdates",0
2>go
1>shutdownwithnowait
2>go
(5)在重启SQLserver之后,如果数据库恢复正常,rebuildlog工作将会成功完成,否则要恢复数据库备份,使用dumpdatabase或bcp命令。
五、数据库被标记为"suspect"时
(1)----一般解决方案
现象:
Error926
SeverityLevel14
ErrorMessageText
Database'xx'cannotbeopened-ithasbeenmarkedSUSPECTbyrecoverExplanation
(1)当你使用Transact_SQL命令操作这个数据库的数据时,出现这个信息,这是一个严重的
错误,如果你要使用这个数据库的数据,必须改正这个错误.
(2)启动BackupServer,后备master数据库
1>dumpdatabasemasterto"/usr/sybase/master_dump.19991201"
2>go
(3)用isql登录到SQLServer,须用sa(本文以pubs2数据库为例)
1>sp_configure"allowupdates",1
2>go
1>begintran
2>go
1>updatemaster..sysdatabases
2>setstatus=-32768
3>Wherename="pubs2"
4>go
如果得到(1rowaffected),则
1>commit
2>go
否则
1>rollback
2>go
(4)如果条件允许,bcpout用户数据或dump用户数据库
(5)这时重新启动SQLServer,再有sa注册到SQLServer.
1>begintran
2>go
1>updatemaster..sysdatabases
2>setstatus=0
3>Wherename="pubs2"
4>go
如果得到(1rowaffected),则
1>commit
2>go
否则
1>rollback
2>go
1>sp_configure"allowupdates",0
2>go
(4)如果你的数据库原来有dboption(例如"selectinto","trunclogonchkpt"等),
你需要重新设置这些option..
(5)运行dbcc命令检查数据库的一致性
isql-Usa-P-idbcc.sql-odbcc.out
dbcc.sql文件示例:
dbcccheckdb("pubs2")
go
dbcccheckalloc("pubs2")
go
dbcccheckcatalog("pubs2")
go
grepMsgdbcc.out
(6)后备用户数据库
1>dumpdatabasepubs2on"/usr/sybase/pubs2_dump.19991201"
2>go
六、数据库被标记为"suspect"时
(2)----数据库设备损坏时的解决方案
现象:
926错误产生的原因有几种。
本文讨论当数据库设备初始化失败(设备文件丢失或文
件读写权限不正确)时,导致数据库恢复失败,出现926错误的情况。
(1)请先恢复数据库设备及读写权限。
(2)启动BackupServer,后备master数据库
1>dumpdatabasemasterto"/usr/sybase/master_dump.19991201"
2>go
(3)用isql登录到SQLServer,须用sa(本文以pubs2数据库为例)
1>sp_configure"allowupdates",1
2>go
1>begintran
2>go
1>updatemaster..sysdatabases
2>setstatus=status-256
3>Wherename="pubs2"
4>go
如果得到(1rowaffected),则
1>commit
2>go
否则
1>rollback
2>go
(4)重新启动SQLServer,运行dbcc命令检查数据库的一致性
编辑生成dbcc.sql文件:
dbcccheckdb("pubs2")
go
dbcccheckalloc("pubs2")
go
dbcccheckcatalog("pubs2")
go
isql-Usa-P-idbcc.sql-odbcc.out
grepMsgdbcc.out
(5)后备用户数据库
1>dumpdatabasepubs2on"/usr/sybase/pubs2_dump.19991201"
七、如何终止数据库恢复过程
当某一正常运行的大事务(例如:
update、delete操作)被终止,且重新启动server后,运行该事务的数据库处于恢复状态,通常这种状态会持续很长时间,当在此恢复过程中没有出现任何异常时,建议用户耐心等待恢复过程完成。
同时我们提供以下方法来终止此恢复过程,但请用户注意这些操作将带来数据的不一致性。
必要时,希望用户用完整、可靠的数据库备份恢复此数据库。
(1)启动BackupServer,后备master数据库(这一步很重要!
)
1>dumpdatabasemasterto"/usr/sybase/master.dup"
2>go
(2)用isql登录到SQLServer,须用sa(本文以pubs2数据库为例)
1>sp_configure"allowupdates",1
2>go
1>begintran
2>go
1>usemaster
2>go
1>updatesysdatabases
2>setstatus=-32768
3>Wherename="pubs2"
4>go
如果得到(1rowaffected),则
1>commit
2>go
否则
1>rollback
2>go
(3)这时重新启动SQLServer,再用sa登录到SQLServer.
1>dumptranpubs2withno_log
2>go
1>begintran
2>go
1>usemaster
2>go
1>updatesysdatabases
2>setstatus=0
3>Wherename="pubs2"
4>go
如果得到(1rowaffected),则
1>commit
2>go
否则
1>rollback
2>go
1>sp_configure"allowupdates",0
2>go
(4)重新启动server
(5)如果你的数据库原来有dboption(例如"selectinto","trunclogonchkpt"等),你需要重新设置这些option..
(6)当数据库已经恢复可使用状态后,运行dbcc命令检查数据库的一致性(参照"如何检查数据库中数据一致性"文章)
(7)后备用户数据库
例如:
1>dumpdatabasepubs2to"/usr/sybase/pubs2.dup"
2>go
八、如何检查数据库中数据的一致性
数据库一致性检查(dbcc)提供了一些命令用于检查数据库的逻辑和物理一致性。
Dbcc主要有两个功能:
1.使用checkstorage或checktable及checkdb在页一级和行一级检查页链及数据指针。
2.使用checkstorage,checkalloc,或checkverify,tablealloc,及indexalloc检查页分配。
在下列情况中需要使用dbcc命令:
1.作为数据库日常维护工作的一部分,数据库部结构的完整性决定于sa或dbo定期地运行dbcc检查。
2.在系统报错以后,确定数据库是否有损坏。
3.在备份数据库之前,确保备份的完整性。
4.如果怀疑数据库有损坏时,例如,使用某个表时报出表损坏的信息,可以使用dbcc确定数据库中其他表是否也有损坏。
下面是dbcc的简单用法:
∙dbccchecktable(table_name)
检查指定的表,检查索引和数据页是否正确,索引是否正确排序,所有指针是否一致,每页的数据信息是否合理,页偏移是否合理。
∙dbcccheckdb(database_name)
对指定数据库的所有表做和checktable一样的检查。
∙dbcccheckalloc(database_name,fix|nofix)
检查指定数据库,是否所有页面被正确分配,是否被分配的页面没被使用。
当使用"fix"选项时,在检查数据库的同时会自动修复有问题的页面。
(若数据库数据量很大,则该过程会持续很长时间。
)
∙dbcctablealloc(table_name,fix|nofix)
检查指定的表,是否所有页面被正确分配,是否被分配的页面没被使用。
是checkalloc的缩小版本,对指定的表做完整性检查。
当使用"fix"选项时,在检查数据表的同时会自动修复数据表中有问题的页面。
关于上述命令的其它选项及详细使用方法和checkstorage,checkverify,indexalloc的详细使用方法,请参阅有关命令手册。
举例1:
Unix平台检查pubs2数据库的一致性
1.单用户模式启动Server:
$SYBASE/installstartserver-fRUN_server_name-m
2.vidbcc_db.sql
usemaster
go
sp_dboptionpubs2,"singleuser",true
go
usepubs2
go
checkpoint
go
dbcccheckdb(pubs2)
go
dbcccheckalloc(pubs2,fix)
go
dbcccheckcatalog(pubs2)
go
usemaster
go
sp_dboptionpubs2,"singleuser",false
go
usepubs2
go
checkpoint
go
quit
go
3.isql-Usa-Pxxxxxx-SSYBASE
4.grepMsgdbcc_db.out
举例2:
Unix平台检查pubs2数据库中titles表的一致性
1.vidbcc_table.sql
usepubs2
go
dbccchecktable(titles)
go
dbcctablealloc(titles)
go
2.isql-Usa-Pxxxxxx-SSYBASE
grepMsgdbcc_table.out
九、如何做RebuildMaster(没有后备master库,而使用命令diskreinit,diskrefit)
提示1:
如果有可能,在执行这个任务之前,请先做操作系统级SYBASEDEVICES的后备。
UNIX操作系统可使用命令"dd"。
因为如果diskreinit使用了错误的信息,那么,在执行了diskrefit之后就会产生无法弥补的错误。
倘若,存在一个SYBASEDEVICES的后备文件,将会给我们一个弥补的机会。
例如:
当diskreinit使用了过小的size值,我们还可以重新恢复SYBASEDEVICES文件,重新做diskreint、diskrefit。
提示2:
在使用diskreinit命令时,将覆盖SYBASEDEVICE(请参照以下语法),安全的做法是size值使用裸分区或系统文件的大小的最大值。
如果使用的是UNIX裸分区,即使你不能确认SYBASEDEVICE最初大小是不是最大值,都要使用裸分区大小的最大值。
步骤:
1.获得将要被恢复的SYBASEDEVICE的信息。
这些信息被用来重建sysdevices,sysusages以及sysdatabases。
1.从errorlog的server启动信息中获得SYBASEDEVICE的设备名、指定路径。
2.使用裸分区或系统文件的大小的最大值作为SYBASEDEVICE的
大小。
3.以上信息也可以通过最近的sysdevices系统表的容来获得。
如果
对此信息怀有疑问,还是使用以上的方法比较稳妥。
2.做操作系统级的SYBASEDEVICE后备。
UNIX操作系统,使用"dd"命令实现。
3.配置一个新的ASEServer。
在以后的步骤中会用到这个新的master。
4.如果需要,请再配置一个BackupServer。
5.用单用户模式启动Server。
6.运行diskreinit,用来重建sysdevices系统表,而没有重新初始化SYBASEDEVICE。
语法如下:
diskreinit
name="device_name",
physname="physical_name",
vdevno=virtual_device_number,
size=number_of_blocks
完成后,请查看errorlog。
7.确认重建的sysdevices系统表息正确:
——select*fromsysdevices
比较表中的信息是否与errorlog或者保留的sysdevices中的信息相同。
8.运行diskrefit,用来重建sysdevices以及sysdatabases。
用法如下:
usemaster
go
diskrefit
go
查看errorlog中是否有错误提示。
9.当diskrefit完成后,会自动shutdownASEServer。
10.确认重建的系统表的信息是否正确:
——单用户模式启动ASEServer
——select*fromsysusages、select*fromsysdatabases
——sysusages系统表看起来是否正确?
可以和以前保留的的信息进行比较。
如果没有这种可能,那么应该保证不出现显而易见的错误。
例如:
是否缺少dbid;是否缺行;是否对于一个数据库来说只有segmap=4(表示为日志行)的行等等。
——sysdatabases系统表看起来是否正确?
是不是没有显而易见的错误?
11、启动ASEServer,查看是否所有的数据库
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Sybase 数据库 故障 处理 方法