sybase 系统表集合

systypes 一行纪录了每一个由系统提供的和用户定义的数据类型
sysusers 一行记录了一行记录了一个数据库的合法用户
sysconfigures 一行纪录了用户可以设置的配置参数
syscurconfigs 有关SQL Server当前正使用的配置参数情况
sysdatabases 一行纪录SQL Server中的一个数据库
sysdevices 一行纪录数据库每一个磁带转储设备,盘转储设备,数据库设备和磁盘分区
syslocks 有关动态锁的情况
syslogins 一行纪录了每一个有效的SQL Server的用户
sysmessages 一行记录了每一个系统错误或者警告
sysprocesses 有关server进程的情况
sysremotelogins 一行记录了一个远程用户
sysservers 一行记录了一个远程server
sysusages 一行记录了分配给每个数据库的每个磁盘分片
sysatterrates 一行记录了分配给SQL Server用户在当前数据库的标识
syscolumns 一行记录了一个表或视图的每一列,一个存储过程的每一个参数
syscomments 一行或者多行记录了每一视图、规则、缺省值、触发器和存储过程
sysdepends 一行记录了由一个过程、视图或者触发器所参照的每一个过程、视图或者表
sysindexes 一行记录了每一个聚集或者非聚集索引,每一个不带索引的表,含有text或者image列的表
syskeys 一行记录了每一个主玛、外玛或者公用玛
syslogs 事务日志
sysobjects 纪录表、视图、存储过程、规则、缺省值、触发器和临时表(在tempdb中)
sysprocedures 纪录视图、规则、缺省值、触发器和过程
sysprocts 纪录用户权限信息
syssegments 纪录每一个片段(命名的磁盘)

 

 

SYBASE 使用技巧集锦 FAQ(一)

2006-07-29 11:24

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, 须用sa帐号 (本文以pubs2数据库为例)

 

1>sp_configure "allow updates", 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,"single user",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.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_MACHINE\SOFTWARE\SYBASE\Server\
\\HKEY_LOCAL_MACHINE\SOFTWARE\SYBASE\Server\_BS
\\HKEY_LOCAL_MACHINE\SOFTWARE\SYBASE\Server\_HS
\\HKEY_LOCAL_MACHINE\SOFTWARE\SYBASE\Server\_MS
到注册表的如下结构下:
\\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
删除DSLISTEN, DSQUERY, SYBASE, 并修改 LIB, INCLUDE, PATH删除SYBASE有关目录
删除如下注册键值:
\\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
SYBSQL_
SYBXPS__XP
SYBBCK__BS
SYBMON__MS
SYBHIS__HS
重新启动 Windows NT server
使用 Start | Control Panel | Settings | Services 确认SYBASE已经卸载
删除SYBASE Server所用数据库设备文件及SYBASE系统文件

 

 

SYBASE 使用技巧集锦 FAQ(二)

2008-01-06 11:30

SYBASE 使用技巧集锦 FAQ(二)

 

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库以及用户数据库。

 

SYBASE 使用技巧集锦 FAQ(三)

2008-01-06 11:31

SYBASE 使用技巧集锦 FAQ(三)

2006-07-29 11:26

 

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

 

 

Sybase isql 语法

isql 实用工具使您得以输入 Transact-SQL 语句、系统过程和脚本文件.

语法

isql

[-?] |

[-L] |

[

{

{-U login_id [-P password]}

| -E

}

[-S server_name] [-H wksta_name] [-d db_name]

[-l time_out] [-t time_out] [-h headers]

[-s col_separator] [-w column_width] [-a packet_size]

[-e] [-x max_text_size]

[-c cmd_end] [-q "query"] [-Q "query"]

[-n] [-m error_level] [-r {0 | 1}]

[-i input_file] [-o output_file] [-p]

[-b] [-O]

]

参数-?

显示 isql 开关的语法摘要。

-L

列出在本地配置的服务器和在网络上广播的服务器的名称。

-U login_id

用户登录 ID。登录 ID 区分大小写。

-P password

是用户指定的密码。如果未使用 -P 选项,isql 将提示输入密码。如果在命令提示的末尾使用 -P 选项而不带密码,isql 使用默认密码 (NULL)。密码区分大小写。

ISQLPASSWORD 环境变量使您得以为当前会话设置默认密码。因此,不需要通过硬编码来在批处理文件中设置密码。

如果没有为 -P 选项指定密码,isql 首先检查 ISQLPASSWORD 变量。如果未设置值,isql 使用默认密码 (NULL)。以下示例在命令提示处设置 ISQLPASSWORD 变量,然后访问 isql 实用工具:

C:\>SET ISQLPASSWORD=abracadabra

C:\>isql

-E

使用信任连接而不请求密码。

-S server_name

指定要连接到的 SQL Server 默认实例。isql 不支持连接到 SQL Server 2000 命名实例。如果未指定服务器,isql 将连接到本地计算机上的 SQL Server 默认实例。如果要在网络上从远程计算机执行 isql,则需要此选项。

-H wksta_name

是工作站名称。工作站名称存储在 sysprocesses.hostname 中并由 sp_who 显示。如果未指定,则采用当前计算机名称。

-d db_name

启动 isql 时发出一个 USE db_name 语句。

-l time_out

指定 isql 登录超时之前的秒数。如果未指定 time_out 值,则命令无限期地运行。登录到 isql 的默认超时为 8 秒。

-t time_out

指定命令超时之前的秒数。如果未指定 time_out 值,则命令会无限期地运行;登录到 isql 的默认超时为 8 秒。

-h headers

指定要在列标题之间打印的行数。默认为每一查询结果集打印一次标题。使用 –1 指定不打印标题。如果使用 –1,则在参数和设置之间不能有空格(可以是 -h-1,不能是 -h –1)。

-s col_separator

指定列分隔符字符,其默认为空格。若要使用对操作系统有特殊含义的字符(例如 | ; & < >),请将该字符用双引号 (") 引起来。

-w column_width

允许用户设置屏幕输出的宽度。默认为 80 个字符。当输出行达到其最大屏幕宽度时,会拆分为多个行。

-a packet_size

使您得以请求不同大小的数据包。packet_size 的有效值介于 512 和 65535 之间。Microsoft Windows NT&reg; 版中的 isql 默认值为 8192;另外,Microsoft MS-DOS&reg; 版中的 isql 默认值为 512,但在该版本中也可以请求更大的数据包。数据包大小的增加可以提高较大脚本执行的 性能,在这种执行中 GO 命令之间 SQL 语句的数量很重要。Microsoft 的测试表明 8192 是大容量复制操作典型的最快设置。可以请求更大的数据包大小,但是如果请求不能得到批准,则 isql 默认为 512。

-e

回显输入。

-x max_text_size

指定返回文本数据的最大长度,以字节为单位。长于 max_text_size 的文本值将被截断。如果未指定 max_text_size,则文本数据在 4096 字节处截断。

-c cmd_end

指定命令终止符。默认情况下,通过单独在一行中输入 GO 来终止命令并将其发送到 SQL Server 2000。在重置命令终止符时,不要使用对操作系统有特殊含义的 Transact-SQL 保留字或字符,无论其前面是否有反斜杠。

-q "query"

启动 isql 时执行查询,但是在查询完成时不退出 isql。(注意查询语句不应包含 GO)。如果从批处理文件中发出查询,可使用 %variables。环境 %variables% 也可用。例如:

SET table = sysobjects

isql /q "Select * from %table%"

将查询用双引号引起来,将查询中嵌入的任何内容用单引号引起来。

-Q "query"

执行查询,在查询完成时立即退出 isql。将查询用双引号引起来,将查询中嵌入的任何内容用单引号引起来。

-n

从输入行中删除编号和提示符号 (>)。

-m error_level

自定义错误信息的显示。显示指定的或更高严重级别错误的消息数、状态和错误级别。不显示严重级别低于指定级别的错误的任何信息。用 -1 指定与消息一起返回所有标题,即使是信息类的消息。如果使用 –1,则在参数和设置之间不能有空格(可以是 -m-1,不能是 -m -1)。

-r {0 | 1}

将消息输出重定向到屏幕 (stderr)。如果未指定参数,或指定参数为 0,那么仅重定向严重级别为 17 或更高的错误信息。如果指定参数为 1,则将重定向所有消息输出(包括 "print")。

-i input_file

标识包含一批 SQL 语句或存储过程的文件。小于 (<) 比较运算符可以用来代替 –i。

-o output_file

标识从 isql 接收输出的文件。大于 (>) 比较运算符可以用来代替 –o。

-p

打印性能统计。

-b

指定错误发生时 isql 退出并返回一个 DOS ERRORLEVEL 值。当 SQL Server 错误信息的严重级别为 10 或更高时,返回给 DOS ERRORLEVEL 变量的值为 1;否则,返回值为 0。MS-DOS 批处理文件可以测试 DOS ERRORLEVEL 的值并适当处理错误。

-O

指定 isql 还原为早期版本的行为。下列功能停用:

EOF 批处理

控制台宽度自动调整

宽信息

该选项还将 DOS ERRORLEVEL 的默认值设置为 –1。

注释

所有 DB-Library 应用程序(如 isql)连接到 SQL Server 2000 后,作为 SQL Server 6.5 级客户端工作。它们不支持 SQL Server 2000 的某些功能。而 osql 实用工具是基于 ODBC 并支持 SQL Server 2000 的全部功能。使用 osql 运行 isql 无法运行的脚本。有关 SQL Server 6.5 级客户端限制的更多信息,请参见 SQL Server 联机丛书中的将早期版本客户端连接到 SQL Server 2000。

默认情况下,SQL 查询分析器将 SQL 脚本保存为 Unicode 文件。isql 实用工具不支持 Unicode 输入文件。尝试在 -i 开关中指定这些文件中的某一个时会导致错误 170:

Incorrect syntax near ' '.

使用 osql 实用工具运行这些 Unicode 文件。另一种方法是在 SQL 查询分析器的"文件/另存为"对话框的"文件格式"列表中指定 ANSI 而非 Unicode。

与大多数 DB-Library 应用程序类似,isql 实用工具在默认情况下不设置任何连接选项。用户如果希望使用特定连接选项设置,必须交互地或在脚本中发出 SET 语句。

isql 实用工具从操作系统直接启动,并且使用本文中列出的区分大小写的选项。启动后,isql 接受 Transact-SQL 语句并将它们交互地发送到 SQL Server 2000。结果将格式化并打印到标准输出设备(屏幕)。可使用 QUIT 或 EXIT 退出 isql。

如果启动 isql 时未指定用户名,则 SQL Server 2000 将检查环境变量并使用它们,如 isqluser=(user) 或 isqlserver=(server)。如果未设置环境变量,则使用工作站用户名。如果未指定服务器,则使用工作站名称。

如果 -U 或 -P 选项都没有使用,则 SQL Server 2000 将尝试使用 Windows 身份验证模式进行连接。身份验证基于运行 isql 的用户的 Windows NT 帐户。