加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sybase文章精选【3】 2012.07.08

发布时间:2020-12-12 14:33:26 所属栏目:MsSql教程 来源:网络整理
导读:?? CU-Sybase讨论区精华帖 ?? ChinaUnix.net 论坛首页 精华首页 Sybase精华区 正文 SYBASE 使用技巧集锦 --相信是篇好文大家看看!!!! http://www.chinaunix.net 作者:wolf2602??发表于:2003-09-12 10:13:01 FAQ?by?杨冶军? ????? Q.如何解决数据库被

??CU-Sybase讨论区精华帖 ??

ChinaUnix.net > 论坛首页 > 精华首页 > Sybase精华区 > 正文

SYBASE 使用技巧集锦 --相信是篇好文大家看看!!!!http://www.chinaunix.net 作者:wolf2602??发表于:2003-09-12 10:13:01
FAQ?by?杨冶军?

?????

Q.如何解决数据库被标记为"suspect"的问题之一(?一般解决方案)??

A.现象:Error?926?
 Severity?Level?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?tran?
2>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.1)如果条件允许,bcp?out用户数据或dump用户数据库

?(5.1)这时重新启动SQL?Server,?再有sa帐号注册到SQL?Server.?

1>begin?tran?
2>go?
1>update?master..sysdatabases?
2>set?status=0?
3>Where?name="pubs2"?
4>go?

如果得到(1?row?affected),则

1>commit
2>go

否则

1>rollback
2>go

1>sp_configure?"allow?updates"?,0
2>go?

?(4)?如果你的数据库原来有dboption(例如"select?into","trunc?log?on?chkpt"等),?你需要重新设置
这些option..?

?(5)?运行dbcc命令检查数据库的一致性

isql?-Usa?-P?-i?dbcc.sql?-o?dbcc.out
dbcc.sql文件示例:
dbcc?checkdb("pubs2")
go
dbcc?checkalloc("pubs2")
go
dbcc?checkcatalog("pubs2")
go
grep?Msg?dbcc.out

?6)?后备用户数据库

1>dump?database?pubs2?on?"/usr/sybase/pubs2_dump.19991201"
2>go
?



Q.如何解决数据库被标记为"suspect"的问题之二(?数据库设备损坏时的解决方案?)?

A.现象:?926错误产生的原因有几种。本文讨论当数据库设备初始化失败(?设备文件丢失或文件读写权限
不正确?

时,导致数据库恢复失败,出现926错误的情况。

?(1)?请先恢复数据库设备及读写权限。

?(2)?启动Backup?Server,?后备master数据库

1>dump?database?master?to?"/usr/sybase/master_dump.19991201"
2>go

?3)?用isql登录到SQL?Server,?1?
2>go?
1>begin?tran?
2>go?
1>update?master..sysdatabases?
2>set?status?=?status?-?256?
3>Where?name="pubs2"?
4>go

如果得到(1?row?affected),则

1>commit
2>go

否则

1>rollback
2>go

?(4)?重新启动SQL?Server,?运行dbcc命令检查数据库的一致性编辑生成dbcc.sql文件:

dbcc?checkdb("pubs2")
go
dbcc?checkalloc("pubs2")
go
dbcc?checkcatalog("pubs2")
go
isql?-Usa?-P?-i?dbcc.sql?-o?dbcc.out
grep?Msg?dbcc.out

?(5)?后备用户数据库

1>dump?database?pubs2?on?"/usr/sybase/pubs2_dump.19991201"
2>go
?



Q.如何解决ASE11.5装载或备份数据库报3230的错误??

A.用sp_dropdevice或sybase?central删除逻辑设备后,不重启服务器,不回收虚拟设备号,重用它建立
设备,新建数据库。这时dump&load数据库会出3230错误。这是ASE11.5的BUG,过去不重新启动服务器,
老的虚拟设备号不能使用,现在服务器不提示错误。但dump&load数据库会出现3230错误。

解决办法是重启服务器,3230错便会消失。?
?

Q.如何删除坏的用户数据库?(以pubs2为例)?

A.当使用drop?database无法删除数据库时,使用本文所示方法可以删除。

?(1)使用isql以sa注册SQL?server

?(2)设置允许修改系统表

1>sp_configure?"allow?updates",1
2>go

?(3)把?要删除的用户数据库置为"suspect"状态

1>use?master
2>go
1>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)结束?
?



Q.如何修改IP地址改变后的interfaces文件??

A.安装SYBASE?Adapive?Server的机器IP地址改变后,?应修改?interfaces?文件及有关的设置。

如果?interfaces?文件中使用的是机器名而不是?IP?地址,?则不需要变动。?但如果客户端联结服务器使
用的是服务器的?IP?地址而不是机器名,那么客户端需修改联结服务器的?IP?地址.。

如果?interfaces?文件中使用的是?IP?地址,?那么需要修改?interfaces?文件中和地址有关的部分,?
可使用dscp?或?dsedit?进行修改。?如果客户端联结服务器使用的是服务器的地址而不是机器名,那么客
户端也需修改。
?



Q.如何检查数据库中数据的一致性??

A.数据库一致性检查(dbcc)提供了一些命令用于检查数据库的逻辑和物理一致性。Dbcc主要有两个功能:

使用checkstorage?或?checktable?及?checkdb?在页一级和行一级检查页链及数据指针。?
使用checkstorage,?checkalloc,?或?checkverify,?tablealloc,?及indexalloc?检查页分配。?
在下列情况中需要使用?dbcc?命令:

作为数据库日常维护工作的一部分,?数据库内部结构的完整性决定于sa?或dbo?定期地运行?dbcc?检查。?
在系统报错以后,?确定数据库是否有损坏。?
在备份数据库之前,?确保备份的完整性。?
如果怀疑数据库有损坏时,?例如,?使用某个表时报出表损坏的信息,?可以使用?dbcc?确定数据库中其他
表是否也有损坏。?
下面是dbcc的简单用法:

dbcc?checktable?(table_name)
检查指定的表,?检查索引和数据页是否正确链接,?索引是否正确排序,?所有指针是否一致,?每页的数据
信息是否合理,?页偏移是否合理。?
???
dbcc?checkdb?(database_name)
对指定数据库的所有表做和checktable?一样的检查。?
dbcc?checkalloc?(database_name,fix|nofix)
检查指定数据库,?是否所有页面被正确分配,?是否被分配的页面没被使用。当使用"fix"选项时,
在检查数据库的同时会自动修复有问题的页面。(若数据库数据量很大,则该过程会持续很长时间。)?
dbcc?tablealloc?(table_name,fix|nofix)
检查指定的表,?是否被分配的页面没被使用。是?checkalloc?的缩小版本,?
对指定的表做完整性检查。当使用"fix"选项时,在检查数据表的同时会自动修复数据表中有问题的页
面。?
关于上述命令的其它选项及详细使用方法和checkstorage,?checkverify,?indexalloc?的详细使用方
法,?请参阅有关命令手册。

举例1:?Unix平台检查pubs2数据库的一致性

单用户模式启动Server:
$SYBASE/install?startserver?-f?RUN_server_name?-m?
vi?dbcc_db.sql
use?master
go
sp_dboption?pubs2,"single?user",true
go
use?pubs2
go
checkpoint
go
dbcc?checkdb(pubs2)
go
dbcc?checkalloc(pubs2,fix)
go
dbcc?checkcatalog(pubs2)
go
use?master
go
sp_dboption?pubs2,false
go
use?pubs2
go
checkpoint
go
quit
go?
isql?-Usa?-Pxxxxxx?-SSYBASE?dbcc_db.out?
grep?Msg?dbcc_db.out?
举例2:?Unix平台检查pubs2数据库中titles表的一致性?

vi?dbcc_table.sql
use?pubs2
go
dbcc?checktable(titles)
go
dbcc?tablealloc(titles)
go?
isql?-Usa?-Pxxxxxx?-SSYBASE?<?dbcc_table.sql?>?dbcc_table.out?
grep?Msg?dbcc_table.out?
?



Q.如何在Windows?NT上手动卸载Sybase?Server??

A.关闭?Adaptive?Server.?
将Adaptive?Server在Windows?NT?Services中由自动改为手动?
重新启动?Windows?NT?server?
运行sybedt32修改注册表,?删除以下内容:
HKEY_LOCAL_MACHINESOFTWARESYBASEServer
HKEY_LOCAL_MACHINESOFTWARESYBASEServer_BS
HKEY_LOCAL_MACHINESOFTWARESYBASEServer_HS
HKEY_LOCAL_MACHINESOFTWARESYBASEServer_MS?
到注册表的如下结构下:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession?ManagerEnvironment
删除DSLISTEN,?DSQUERY,?SYBASE,?并修改?LIB,?INCLUDE,?PATH删除SYBASE有关目录?
删除如下注册键值:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices?
SYBSQL_?
SYBXPS__XP?
SYBBCK__BS?
SYBMON__MS?
SYBHIS__HS?
重新启动?Windows?NT?server?
使用?Start?|?Control?Panel?|?Settings?|?Services?确认SYBASE已经卸载?
删除SYBASE?Server所用数据库设备文件及SYBASE系统文件?
?



Q.如何更改SQL?Server名称(在UNIX、OPENVMS平台上)??

A.在SYBASE产品中没有特定的函数或者存储过程用来更改SQL?Server/ASE?Server的名称,因此,只能手
工修改某些参数或者配置来完成此任务。

需要修改interfaces文件;更改RUN_server_name文件名,并修改其内容,例如:-s(UNIX)、/SERVER
(OpenVMS)后面所跟的参数(server?名称);更改配置文件名;更改errorlog文件名(如果需要);如
果server名称加在了表sysservers中,需要更改'srvname'、'srvnetname'列,可使用sp_dropserver、
sp_addserver存储过程来实现。

在OpenVMS系统中还要修改RUN_server_name文件中DSLISTEN的逻辑名称,以及在使用startserver过程中
/SERVER后面所跟的参数。然后,重启SQL/ASE?Server。确认DSQUERY、DSLISTEN环境变量已经更改为所
需内容。

另外,如果SQL/ASE?Server是被设置为远程服务器,还要修改与此server相关的系统表sysservers中的
字段以及interfaces文件。

理论上例如配置文件、RUN脚本、errorlog文件不需要指定server?名称(但是通常习惯指定server名
称)。在RUN?startup脚本中要指定server名称。

您可以根据以下提纲完成此项任务:

如果server名称加在了表sysservers中,用sp_dropserver删除。?
Shut?down?server?
编辑?interfaces文件?
更改RUN_server_name文件名,并修改其内容,-s(UNIX)、/SERVER(OpenVMS)后面所跟的参数(server
名称)?
更改errorlog文件名(如果需要)?
修改DSQUERY、DSLISTEN环境变量(如果需要)?
更改配置文件名(server_name.cfg、server_name.bak、server_name.nnn),在SYBASE安装路径下Start
server?
使用sp_addserver重新添加server(如果需要)?
如果server是作为远程server使用的,还需要删除并重新添加。?


?

Q.如何配置SQL?Server来做远程备份??
?
A.在本地机器上:??
(1).本地SQL?Server和Backup?Server能运行。?
(2).在本地的Interfaces文件中,增加远程机器上的Backup?Server名称,只需“Quary”?行,不允许使
用别名(aliases)。

请注意:在网络上每个Backup?Server必须有一个唯一的名字,这个名字必须在?Interfaces文件之中,用
户可以通过查看服务器运行文件来检查它,它的选项是-S(unix)?或者/Server(VMS)。??

(3).执行存储过程SP-helpServer?SYB_BACKUP确认本地Backup?Server具有正确的网络名称。远程Backup?
Server不一定非要在系统表Syservers中有一条记录不可,但是有它便于测试。?

请注意:不要修改SYB_BACKUP,使它指向远程Backup?Server名字。?

在远程机器上:??

(1).确认远程Backup?Server正在运行。?
(2).确认远程Backup?Server有与本地Backup?Server不同的网络名字。?

请注意:在远程机器上的Interfaces文件中,必须包含远程Backup?Server的定义记录,但是它不需其他
Backup?Server的定义。?
?



Q.如何配置SQL?Server?11,使得快速BCP具有更好的性能??

A.有几种方法可以改善BCP的性能:??
(1)增加扩展分配(extent?allocation)。缺省情况下,预分配2到31个扩展。在一个BCP批次中,未使用的
预分配扩展被释放。为了获得最佳BCP性能,设置BCP批次大小和?“number?of?preallocated?extents”
预分配扩展个数,以消除空间重新释放。使用Sp_config?number?of?pre-allocated?exetents,nn?对于系
统10:buildmaster?-ycpreallocext=nn?
(2)对表进行分区?
(3)配置OAM页面的缓冲策略,以减少对OAM(Object?Allocation?Map)页面的物理读。?
(4)配置大I/O的缓冲池,例如16K:

Sp-poolconfig?default,?"16K"?(5)使用-A标记,加大网络包大小:?

bcp?-A?16384?
?



Q.如何将SQL/ASE?SERVER移植到同种平台(相同操作系统)的系统上??

A.N1?这里所列出的所有步骤,并不需要按顺序执行,只是表明了在实验中成功完成这项任务的顺序。?
N2?SYBASE?提示您保留直至今日的ISQL脚本,包括建立login、create?database、disk?init等等。使用
这些脚本会使您完成这项任务更加容易。这些脚本也可以通过master中系统表的内容来重新生成,可能
会繁琐一些。?
N3?成功的关键在于目标系统中系统表的字段与源系统中相应系统表的字段相同。特别是:syslogins与
sysdatabases中的'suid?以及?'dbid';sysusages中所有行的segmap、lstart以及size。?
请在数据源系统上执行以下操作:

对所有的数据库进行数据一致性检查(DBCC),并后备所有的用户数据库。?
保留master?数据库中数据表的内容,使用select?*?from?table_name命令:?
sysdevices,sysusages,sysdatabses?
syslogins,sysservers,syssvrroles,sysloginroles,sysremotelogins
对于sysusages?表,请使用以下命令:
select?*?from?sysusages?order?by?dbid,lstart
对于sysdatabases?表,请使用以下命令:
select?*?from?sysdatabases?order?by?dbid?
使用bcp命令拷贝(2)中所列出的系统表内容。
Unix:bcp?master..table_name?out?file_name?-Usa?-Psa_password?-c
Vms:bcp?master..table_name?out?file_name?/username="sa"/sa_password/char?
保留sp_configure命令的执行结果?
请在目标系统上执行以下操作:

安装并配置新的SQL?Server和Backup?Server。
确认所指定的master、tempdb、sybsystemprocs大小至少等于数据源系统上相应数据库的大小,同时确认
与数据源系统相同的语言模块以及字符集。?
启动SQL?Server,使之处于正常工作状态。参照数据源系统的配置(4中保留的执行结果)修改目标系统配
置与之相同,并确认'device'参数值至少等于源系统此参数值。?
在model、sybsystemprocs数据库中任意执行几个动作以判断数据库工作正常。请不要添加用户、角色、修
改系统表。?
重启SQL?Server以测试新配置有效。?
执行以下操作:
1>?use?master
2>?go
1>?sp_configure?"allow?updates",1
2>?go
重启SQL?Server。?
使用bcp命令拷贝(2)中所列出的系统表内容。
Unix:bcp?master..table_name?in?file_name?-Usa?-Psa_password?-b?1?-c
Vms:bcp?master..table_name?in?file_name?/user="sa"/sa_password/char/batch=1?
建数据库设备,大小至少等于源系统中相应数据库的大小。?
运行create?database和alter?database的脚本(或者使用命令行)。注意create、alter顺序要与源系统
create、alter顺序一致,并使用与之相同的参数。完成后请对比源系统与目标系统中的sysdatabases、
sysusages,使之完全相同,否则要重新做12这步工作。(请参照N3提示)注意:?
在10.0以及更高版本中segmap字段在做了数据库load之后会被修改。?
在确定需要相同的dbid时,则要采用与在源系统中create、alter相同的顺序,在目标系统中做create、
alter,并且使用相同的参数值。而这种需求仅仅是当数据库中某些objects要参考不同的数据库中的
objects才会采用的。另外,这种需求只有在每一个数据库中都被采用,完成的结果才会使得sysusages表
中的segment、lastart、size字段,或者是fragment与源系统中数值相同。运行以下命令,与原系统的输
出进行比较:
select?*?from?sysusages?order?by?lstart?
load用户数据库并执行dbcc检测。?
执行以下操作:
1>?sp_configure?"allow?updates",0
2>?go
重启SQL?Server。?
后备master库以及用户数据库。?



Q.如何做Rebuild?Master(没有后备master库,而使用命令disk?reinit,disk?refit)??

A.提示1:

如果有可能,在执行这个任务之前,请先做操作系统级SYBASE?DEVICES的后备。UNIX操作系统可使用命
令"dd"。因为如果disk?reinit使用了错误的信息,那么,在执行了disk?refit之后就会产生无法弥补的
错误。倘若,存在一个SYBASE?DEVICES的后备文件,将会给我们一个弥补的机会。例如:当disk?reinit
使用了过小的size值,我们还可以重新恢复SYBASE?DEVICES文件,重新做disk?reint、disk?refit。

提示2:

在使用disk?reinit命令时,将覆盖SYBASE?DEVICE(请参照以下语法),安全的做法是size值使用裸分
区或系统文件的大小的最大值。如果使用的是UNIX裸分区,即使你不能确认SYBASE?DEVICE最初大小是不
是最大值,都要使用裸分区大小的最大值。

步骤:

.获得将要被恢复的SYBASE?DEVICE的信息。
这些信息被用来重建sysdevices,sysusages以及sysdatabases。?
????.从error?log的server启动信息中获得SYBASE?DEVICE的设备名、指定路径。?
????.使用裸分区或系统文件的大小的最大值作为SYBASE?DEVICE的
大小。?
???.以上信息也可以通过最近的sysdevices系统表的内容来获得。如果?
对此信息怀有疑问,还是使用以上的方法比较稳妥。?
.做操作系统级的SYBASE?DEVICE后备。UNIX操作系统,使用"dd"命令实现。?
.配置一个新的ASE?Server。在以后的步骤中会用到这个新的master。?
.如果需要,请再配置一个Backup?Server。?
.用单用户模式启动Server。?
.运行disk?reinit,用来重建sysdevices系统表,而没有重新初始化SYBASE?DEVICE。
语法如下:
disk?reinit
name="device_name",
physname="physical_name",
vdevno=virtual_device_number,
size=number_of_blocks
完成后,请查看error?log。?
.确认重建的sysdevices系统表中信息正确:
——select?*?from?sysdevices
比较表中的信息是否与error?log或者保留的sysdevices中的信息相同。?
.运行disk?refit,用来重建sysdevices以及sysdatabases。
用法如下:
use?master
go
disk?refit
go
查看error?log中是否有错误提示。?
.当disk?refit完成后,会自动shut?down?ASE?Server。?
.确认重建的系统表的信息是否正确:
——单用户模式启动ASE?Server
——select?*?from?sysusages、select?*?from?sysdatabases
——sysusages系统表看起来是否正确?可以和以前保留的的信息进行比较。如果没有这种可能,那么应该
保证不出现显而易见的错误。例如:是否缺少dbid;是否缺行;是否对于一个数据库来说只有segmap=4(表
示为日志行)的行等等。
——sysdatabases系统表看起来是否正确?是不是没有显而易见的错误?
11、?启动ASE?Server,查看是否所有的数据库都已经正常恢复。?
.对所有的库做dbcc检查。?
.对所有库做后备。?

?
Q.如何移植master设备??

A.以下步骤说明了如何将master设备移植到不同的磁盘上。请注意,在执行buildmaster之前,要停止SQL
Server的应用。

成功的关键在于,新建的sysusages系统表中每一行内容与旧的sysusages系统表内容相符。

.对master库做dbcc检查,并后备master库。?
.执行select?*?from?table_name命令,并保留其输出内容。其中,table_name包括:sysdevices、
sysusages、sysdatabases。同样,可以使用bcp命令来实现。?
.执行sp_configure命令,并保留其输出内容。?
.拷贝$SYBASE/server_name.cfg文件,以做保留。?
.Shut?down?SQL/ASE?Server。?
.执行以下命令,创建一个新的master设备:
????UNIX:buildmaster?-d?-ssize
????VMS:buildmaster?/disk=?/size=size????(size以页为单位,1页=2K)?
.编辑RUN_server_name文件,-d(UNIX)或/device(VMS)参数指向新建的设备名。?
.单用户模式启动SQL/ASE?Server:
????UNIX:startserver?-f?RUN_sever_name?-m
????VMS:startserver?/server=server_name?/masterrecover?
.执行select?*?from?sysdevices命令,并保留其输出内容。?
.确认新建的sysusages系统表中每一行内容与旧的sysusages系统表内容相符,而且在配置好Server之后,
没有做过alter?database,那么系统表sysusages的内容是正确的。如果做过alter?database,则要按原来
的顺序执行这????些脚本,如果没有脚本,就要到保存的sysusages系统表的信息中找到alter?database
的参数。?
.Shutdown?SQL/ASE?Server,并用单用户模式启动Server,查看sysusages系统表内容是否正确。?
.如果所配置的Backup?Server名称不是SYB_BACKUP,则要执行:
1>?sp_configure?"allow?updates",1
2>?go
1>?update?sysservers?set?srvnetname="name?in?interfaces?file"?
???where?srvname="SYB_BACKUP"
2>?go?
.装载master库。如果新master设备的大小与旧设备大小不同,则Server会Shut?down。请注意新的系统表
将会被重写,而且你需要调整Sysdevices系统表中master设备的大小。请执行以下两步:?
.用单用户模式启动Server.?
.如果新设备大小与旧设备大小不同,请执行:
1>?sp_configure?"allow?updates",1
2>?go
1>?update?sysdevices?set?high=nnnn?where?name="master"
2>?go
??其中nnnn是以页(2K)为单位的master设备的大小,此值可以从保留的sysdevices系统表的信息中找到。
如果?所建的设备比旧设备大,请执行:
1)创建一个与master设备差不多大的数据库,这样做的目的是重新初始化分?配页,使得整个master设备
可用。
2)删除这个数据库。?
.重启Server。?
.后备master数据库。?
注意:

.在装载master库之前要确定SQL?Server此时的字符集和语言模块与后备master库时的字符集和语言模块相同。?
.在执行此任务之前和完成以后使用sp_helpsort查看字符集与语言模块是否相同。??




Q.如何重建sybsystemprocs系统数据库??

A.依照以下步骤可以实现移动sybsystemprocs系统数据库以及设备的任务。同时这个过程也可以用来扩建
sybsystemprocs系统数据库。

以下过程中所提到的语法结构,可以参看SYBASE相关资料。

SYBASE提醒您,在修改系统表时,SQL?Server要以单用户模式运行,同时要以"sa"用户登录。

???.?保留驻留在sybsystemprocs系统数据库中自定义的存储过程脚本。?
???.单用户模式启动SQL?Server,执行:
1>?sp_configure?"allow?updates",1
2>?go
1>?reconfigure?with?override(10.0版本以上,省略此步)
2>?go?
???.删除sybsystemprocs系统数据库:
1>?use?master
2>?go
1>?drop?database?sybsystemprocs
2>?go
在重建sybsystemprocs系统数据库之前,不要创建任何其他数据库。?
???.删除sysdevices系统表中有关sybsystemprocs系统数据库的信息:
1>?begin?tran
2>?delete?from?sysdevices?where?name="sysprocsdev"
我们假定sysprocsdev是默认的sybsystemprocs系统数据库设备名。
3>?select?*?from?sysdevices
确定删除是否正确有效,如果正确,执行:
4>?commit?tran
否则,执行:
4>rollback?
???.重启SQL?Server.?
???.创建sybsystemprocs系统数据库设备:
1>?disk?init?name="sysprocsdev",physname="physical_path",vdevno=4,size=25600
2>?go
其中size是以页为单位(512页=1M)。
sybsystemprocs系统数据库设备的vdevno应该是4,SQL?Server在单用户模式下4不能被重新利用,所以
如果以上语句执行时出现问题,请重启SQL?Server。?

????.sybsystemprocs系统数据库:
1>?create?database?sybsystemprocs?on?sysorocsdev=50
2>?go
在sysdatabases系统表中,sybsystemprocs系统数据库的dbid=4,如果在重建
sybsystemprocs系统数据库之前,没有创建任何其他数据库。?
????.以多用户模式启动SQL?Server,并执行:
1>?sp_configure?"allow?updates",0
2>?go
3>?reconfigure?with?override(10.0版本以上,省略此步)
4>?go?
????.运行installmaster脚本:
%isql?-Usa?-Psa_password?-Sserver_name?-n?-iinstallmaster?-o<?output_file
installmaster脚本在$SYBASE/scripts路径下。?
????.重建sybsystemprocs系统数据库中的用户自定义存储过程?。?
?


Q.如何恢复master数据库??

A.ASE?can't?setup?and?has?no?valid?dump?of?master

1、编辑RUN_servername
在命令行最后加入:-T3607

2、单用户模式启动ASE
$cd?install
$startserver?-f?RUN_servername?-m

3、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?-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的内容。


Q.如何做?rebuild?log??

A.注意:这个过程可能会引起数据的不一致性。

(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=-32768
2>where?name="database_name"
3>go
1>shutdown?with?nowait
2>go

(3)rebuild数据库日志
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命令。?

8、单用户模式启动ASE
$cd?install
$startserver?-f?RUN_servername?-m

9、?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?-c

10、shudown?ASE

11、执行installmaster脚本
$isql?-Usa?-P?<?$SYBASE/scripts/installmaster

12、启动ASE
【发表回复】【查看CU论坛原帖】【关闭】
?learningunix 回复于:2003-09-12 11:01:05 建议版主置为精华

?wolf2602 回复于:2003-09-13 23:17:21 [quote:326b358053="learningunix"]建议版主置为精华[/quote:326b358053]?????

呵呵,有眼光?



?youzhipiao 回复于:2003-09-14 11:49:29 建议收藏

?chenfeng825 回复于:2003-09-14 14:58:55 既然大家这么推荐,加精。希望更多好文出现

?threehair 回复于:2003-09-14 16:16:01 不错~~

?echoaix 回复于:2003-09-15 09:12:01 不好意思,照我说不该加,其实这帖我第一个回复,不过那天bbs的数据库好象坏了,我是说这些全是sybase中国网站上的,没有任何新东西,不过不知道的人看看还是不错

?wolf2602 回复于:2003-09-15 19:09:15 [quote:8e021d176b="echoaix"]不好意思,照我说不该加,其实这帖我第一个回复,不过那天bbs的数据库好象坏了,我是说这些全是sybase中国网站上的,没有任何新东西,不过不知道的人看看还是不错[/quote:8e021d176b]?????

惭愧?

ops:?。。。。。。

俺只是个sybase的生手,偶得此贴想给大家分享一下。。。。。。。别无他意!?



?1212everyday 回复于:2003-09-15 21:10:23

?

?好文章,受益非浅。

?echoaix 回复于:2003-09-16 08:27:41 wolf2602老兄,其实我想了想,只要大家认为好就是好文章。我收回我的意见

?alex2003 回复于:2003-09-16 09:47:53 那也可以加精阿。

?edit 回复于:2003-09-16 12:33:16 原创就写上原创
转载就标明转载?????

欢迎更多的好文章

?wolf2602 回复于:2003-09-16 22:25:55 [quote:b93615f3e8="wolf2602"]????

惭愧?

ops:?。。。。。。

俺只是个sybase的生手,偶得此贴想给大家分享一下。。。。。。。别无他意!?

[/quote:b93615f3e8]?????

无他!?

?谢谢你?



?wolf2602 回复于:2003-09-16 22:26:37 [quote:bbae7e6684="edit"]原创就写上原创
转载就标明转载?????

欢迎更多的好文章[/quote:bbae7e6684]?????

我是这样做的呀,作者摆在第一位,你没看到吗??



?solofeng 回复于:2003-09-18 15:04:45 不错


Copyright ? ChinaUnix.net
?*? 请尊重我们的劳动,转载请注明出自ChinaUnix.net及作者名 ?* ??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读