Sybase数据库故障处理方法.docx

上传人:b****1 文档编号:1620131 上传时间:2023-05-01 格式:DOCX 页数:15 大小:20.63KB
下载 相关 举报
Sybase数据库故障处理方法.docx_第1页
第1页 / 共15页
Sybase数据库故障处理方法.docx_第2页
第2页 / 共15页
Sybase数据库故障处理方法.docx_第3页
第3页 / 共15页
Sybase数据库故障处理方法.docx_第4页
第4页 / 共15页
Sybase数据库故障处理方法.docx_第5页
第5页 / 共15页
Sybase数据库故障处理方法.docx_第6页
第6页 / 共15页
Sybase数据库故障处理方法.docx_第7页
第7页 / 共15页
Sybase数据库故障处理方法.docx_第8页
第8页 / 共15页
Sybase数据库故障处理方法.docx_第9页
第9页 / 共15页
Sybase数据库故障处理方法.docx_第10页
第10页 / 共15页
Sybase数据库故障处理方法.docx_第11页
第11页 / 共15页
Sybase数据库故障处理方法.docx_第12页
第12页 / 共15页
Sybase数据库故障处理方法.docx_第13页
第13页 / 共15页
Sybase数据库故障处理方法.docx_第14页
第14页 / 共15页
Sybase数据库故障处理方法.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Sybase数据库故障处理方法.docx

《Sybase数据库故障处理方法.docx》由会员分享,可在线阅读,更多相关《Sybase数据库故障处理方法.docx(15页珍藏版)》请在冰点文库上搜索。

Sybase数据库故障处理方法.docx

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-s

(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-SSYBASEdbcc_db.out

4.grepMsgdbcc_db.out

  举例2:

Unix平台检查pubs2数据库中titles表的一致性

1.vidbcc_table.sql

usepubs2

go

dbccchecktable(titles)

go

dbcctablealloc(titles)

go

2.isql-Usa-Pxxxxxx-SSYBASEdbcc_table.out

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,查看是否所有的数据库

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2