SYBASE 12.5 维护手册 2. 日常维护篇

时间:2023-01-31 00:40:40

2.1 常规数据库服务器维护的基本要点和步骤?
常规数据库服务器的维护主要是由系统管理员来完成的,主要维护工作包括:
1. 对各ASE用户担当的角色和特权进行分派
为了保证数据库服务器访问的安全性,以及区分各种登录帐户的工作范围,首先需要系统管理员(这里一般情况是指具有sa_role的登录帐户)添加具有一定角色的登录帐户以便进行相关的数据库服务器管理工作。例如对登录帐户的管理;对数据库服务器安全设置的管理;对相关系统参数的管理;以及对于数据库服务器中特殊的option的管理,如DTM,HA等等。
同时,系统管理员也可以完成对数据库用户的管理工作。例如授予数据库用户查询,插入,删除数据表中数据,以及执行某个存储过程的权限等等。这个工作也可以由数据库属主来完成。
2. 管理和监视磁盘空间的使用状况
这里主要是指对数据库空间的管理,包括数据段和日志段;以及数据库设备空间的管理。
系统管理员要定期的对数据库空间和数据库设备空间进行监视及管理。
(1) 数据库空间
可以在isql环境下执行”sp_helpdb”系统存储过程,显示当前数据库空间的使用情况,观察数据段空间是否足够,是否需要执行”alter database”命令进行扩充;观察日志段空间是否足够,是否需要执行”alter database”命令进行扩充,或者执行”dump tran”命令截断日志。
(2) 数据库设备空间
首先建议用户保存每一次的数据库设备创建的脚本文件,以及每一次每一个数据库设备的使用状况,做到对每一个数据库设备的剩余空间心中有数。因为数据库设备的剩余空间目前只能在Sybase Central的管理工具中有明显标识,而在isql环境下没有很直接的命令或者存储过程查看数据库设备的剩余空间。如果没有数据库设备的使用记录,又无法调用Sybase Central图形化管理工具,则会给系统管理员的管理工作带来不便。
当数据库服务器中几乎没有可以使用的数据库设备时,就需要在isql环境下执行”disk init”命令创建新的数据库设备以备用。
3. 进行日常的数据库备份与恢复
首先需要系统管理员根据系统运行状况以及业务需求指定相应的数据库备份与恢复策略,之后以该策略为指导进行日常数据库备份与恢复。如何指定备份策略以及进行数据库备份与恢复的必要步骤,请参考例行数据库备份恢复策略和必要步骤。
4. 诊断系统故障
在系统诊断的过程中,首先需要具有一定系统维护经验的系统管理员确认是操作系统的问题,还是Sybase数据库服务器的问题。以下简要步骤只是说明了,当碰到数据库服务器的问题时该如何做。
(1)详细记录出现系统故障时的现象,以及在应用过程中可能出现在客户端的错误提示信息
(2)查看Sybase错误日志文件:$SYBASE/ASE-12_5/install/server_name.log,查找不正常的信息提示或者出现的错误代码。如果此时能够确认是数据库本身的问题,例如数据页或者索引损坏,那么可以先执行DBCC命令进一步确认问题的确切所在。(DBCC命令的使用,请参照后面的相关章节)
(3)按照错误日志文件中所提示的错误代码,查看《Troubleshooting and Error Messages Guide》并按书中所提示的纠错步骤进行处理
(4)在自行无法解决的情况下,可以联系Sybase工程师寻求帮助,同时提供:
   ――详细的产品版本信息
   ――详细的现象描述
   ――详细的错误信息提示
   ――必要的查询输出结果
   ――完整的数据库服务器错误日志文件
5. 调整ASE的性能
这是一项需要长时间的,不断尝试的,不断测试的,不断优化的循序渐进的过程。针对不同的数据库服务器的运行环境,不同的业务需求就会出现不同的性能要求。
我们说调优是一门艺术,就是要在不断磨合的过程中以求得数据库服务器的最佳使用状态。
Sybase会提供系列的性能分析的工具来帮助用户实现最有效的调优方法。具体说明请参照查找定位数据库服务器性能问题的常用工具和方法。
2.2 例行数据库备份恢复策略和必要步骤?
在例行数据库备份之前,首先要制定有效的数据库备份策略,即应该多长时间备份一次数据库。这主要是基于当发生系统故障时( 例如磁盘故障 ) 应用系统允许丢失多长时间的数据。
例如某个系统允许丢失一个小时的数据, 那么可以考虑在每天的固定时刻对整个数据库做一次备份, 并每一个小时对数据库日志做一次备份。那么当系统故障排除之后,就可以用最近一次的数据库备份以及直到系统故障发生时的日志备份来对数据库数据进行恢复。
这里要注意的是:第一,保留系统出现故障前的最近一次完整的有效的数据库备份,这很重要;第二,在做数据库恢复时,要先恢复完整的数据库备份,再依次恢复每一小时的日志备份,直到出现系统故障前的最后一次日志备份。

在备份数据库时应该注意的问题:
1.在做数据库备份操作之前, 应对数据库做 dbcc 检查, 以确保备份的数据库是完好的数据库。如果数据库有损坏, 备份时可能不会报错, 但将来可能无法恢复。
2.通常情况下, 只有发生严重故障后,需要恢复数据库备份时才进行恢复数据库的操作。但是 Sybase 建议偶尔对备份的数据库恢复到一个测试环境上, 是有利于保证备份工作过程正常以及数据库备份有效的很好的测试方法。
3.Master 数据库的备份也不能忽略。每次master 数据库的内容有变动时, 例如增加login, 增加设备, 增加用户数据库等,应及时备份 master 数据库。

用户可以根据自己的应用制定可行的数据库备份恢复的方案。SYBASE 数据库的备份主要是通过 dump 命令来实现的,分为数据库备份和日志备份;数据库的恢复主要是通过 load 命令来实现的,也分为数据库恢复和日志恢复。语法命令,请参照以后的相关章节。
2.3 查找定位数据库服务器性能问题的常用工具和方法?
1. 实用工具类
(1) 在Sybase Central图形化管理工具中,使用Monitor Server监视数据库服务器性能
 
从上图中看到,在Sybase Central图形化管理工具右边所列出的条目就是所有可以以图形化的方式监测的数据库服务器的性能指标。
(2) isql –p
在使用isql登录数据库服务器时,加-p选项,那么之后执行的每一条SQL语句都可以得到它的执行时间,这里所记的是CPU的时钟时间。
(3) reorg
该命令用于优化DOL表的表空间及其索引。使用方法,请参考如何执行reorg 系列命令来优化DOL表及其索引
(4) optdiag
该命令用于显示数据库服务器中的表和索引的统计值信息。使用方法,请参考如何执行optdiag命令来监控表和索引的物理使用情况
2. Set 命令
(1) statistics io
执行方法:
1> set statistics io on
2> go
之后所执行的任何SQL语句,执行完毕后,都会得到物理读、写,逻辑读、写的次数
(2) statistics time
执行方法:
1> set statistics time on
2> go
之后所执行的任何SQL语句,执行完毕后,都会得到执行时间,以CPU的时钟时间记时。
(3) showplan
执行方法:
1> set showplan on
2> go
之后所执行的任何SQL语句,执行完毕后,显示由调优器所选择的执行计划,包括执行步骤,索引的使用,I/O的使用状况等等。
(4) showplan and noexec
执行方法:
1> set showplan,noexec on
2> go
之后所执行的任何SQL语句,不需要执行,就直接显示由调优器所选择的执行计划,包括执行步骤,索引的使用,I/O的使用状况等等。

3. 系统存储过程
(1) 进程行为查看类
① sp_who
请参看如何查看当前数据库中的进程信息
② sp_lock
请参看如何查看当前数据库中锁发生的情况
③ sp_object_stats
执行方法:
1> sp_object_stats “00:20:00”,20
2> go
以上例子将输出在当前执行这条语句的数据库中,在20分钟内锁竞争最激烈的前20张表
④ sp_showplan
执行方法:
1> sp_showplan 20, null, null, null
2> go
以上例子输出20号进程所执行的SQL语句的执行计划。
(2) 空间使用类
① sp_spaceused
执行方法:
1> sp_spaceused table_name
2> go
输出指定表的空间使用情况。
② sp_helpartition
执行方法:
1> sp_helpartition table_name
2> go
输出指定表的分区使用情况
③ sp_estspace
执行方法:
1> sp_estspace table_name,nr_of_rows
2> go
输出指定表(table_name)中如果存在指定行数(nr_of_rows)的数据,估计的空间使用情况。
④ sp_helpsegment
执行方法:
1> sp_helpsegment seg_name
2> go
输出指定段的使用情况。
⑤ sp_helpcache
执行方法:
1> sp_helpcache cache_name
2> go
输出指定缓存的使用情况。
(3) 系统配置类
① sp_configure
请参看如何执行sp_configure 系统存储过程来查看系统参数
② sp_cacheconfig
请参看如何配置用户自定义命名缓存以及缓冲池
③ sp_poolconfig
      请参看如何配置用户自定义命名缓存以及缓冲池
(4) 任务行为查看类
① sp_sysmon
请参看如何使用sp_sysmon存储过程来查看当前数据库的性能情况
② sp_monitor
执行方法:
1> sp_monitor
2> go
输出CPU,I/O使用情况
4. dbcc trace命令
(1) dbcc trace(3604,302,310)
执行方法:
1> dbcc trace(3604,302,310)
2> go
输出更为详细的SQL语句执行计划
2.4 开发数据库应用时需要开发人员重点关注的几个问题?
通常,开发一个应用包括如下几个阶段或步骤:
1. 弄清业务需求,定义业务规则
2. 规划应用开发环境,特别是定义软件规范说明
3. 完成数据库的逻辑和物理设计
4. 应用程序设计(编程和调试)
5. 运行与维护
在程序设计时,要注意如下两个问题:
1. 对于复杂的业务规则应放在服务器上去实现,而不是在客户机上实现,这样做将使程序设计更省力,且效果更好。
2. 由客户机程序将“批”发送到服务器,要求在程序结构中包含对错误的处理和对事务的管理能力。
2.5 如何在Windows 平台上启动和关闭Sybase数据库服务器?
有两种常用方式:
1. 使用Sybase工具:Sybase Central
打开Sybase Central-->找到所需要启动的Sybase数据库服务器的名称-->鼠标右键单击该名称,出现弹出框
启动:-->单击”start”
关闭:-->单击”stop”
2. 使用Windows操作系统提供的服务管理
打开“Control Panel”中的“Service”--> 找到所需要启动的Sybase数据库服务器的服务名称-->鼠标右键单击该名称,出现弹出框
启动:-->单击”start”
关闭:-->单击”stop”
2.6 如何在UNIX平台上启动和关闭Sybase数据库服务器?
启动:
使用SYBASE用户在操作系统提示符下执行:
startserver –f  RUN_servername
关闭:
isql登录到数据库服务器,执行:
1> shutdown
2> go
注:如果需要关闭备份服务器,执行:
1> shutdown SYB_BACKUP
2> go
2.7 如何使用交互式管理工具isql?
在UNIX操作系统平台,使用SYBASE用户执行该命令;或者在Windows平台的DOS窗口中执行该命令。具体命令的通常使用方法如下所示:
isql –Uuser_name –Ppassword –Sserver_name
其中user_name:登录帐户名,例如sa
         password:登录帐户的口令,例如sa的口令123456
         server_name:数据库服务器的名称或者是在Dsedit使用程序中定义的相应
                               的服务器名称,例如SYB125
正确使用这个命令后,会进入1>提示符,而没有任何错误、信息提示。
2.8 如何在Windows操作系统上安装Open Client12.0
1. 选择Open Client的正版。
2. 安装Open Client时,如果安装程序提示是否覆盖相关.DLL文件时,一定选择NO。
3. 编辑客户端win98/win95的autoexec.bat和configure.sys文件(在其中添加自动执行SYBASE设置环境变量的批处理文件sybase.bat,以及添加SYBASE的路径,DLL路径,BIN路径)。
#假设SYBASE安装在C:\SYBASE
(1) 编辑autoexec.bat:
path='c:\sybase;c:\sybase\ocs-12_0\dll;c:\sybase\ocs-12_0\bin';
call c:\sybase\sybase.bat
(2) 编辑config.sys:
shell=c:\windows\command.com /p /e:2048
files=50
2.9 如何使用图形化管理工具Sybase Central?
这里主要介绍windows平台的java版的Sybase Central和windows版的Sybase Central。
Sybase Central是一个用于管理数据库及相关产品的简单易用的图形化管理工具。它能够帮助您管理数据库服务器,数据库对象以及执行一些系统管理的任务,同时为每一个任务都能够提供便于参考的循序渐进的图形化的步骤说明,使得系统管理员在管理过程中游刃有余。
下面介绍使用方法。
java版的Sybase Central-------
     1.打开Sybase Central图形化界面:
        在“开始”菜单中寻找: 开始-->程序-->Sybase-->Sybase Central Java 版,鼠标单击 Sybase Central Java 版,出现以下界面:
       

2.连接数据库服务器
鼠标单击菜单中:Tools-->Connect,出现以下连接窗口:
 
输入登录帐户名,口令,选择需要连接的数据库服务器名称,之后鼠标单击“OK”按钮,即可看到如下界面:

 
现在您就可以对您的数据库服务器进行需要的管理工作了。

windows版的Sybase Central----
1.打开Sybase Central图形化界面:
   在Sybase产品的安装目录下执行"E:\sybase\Sybase Central 3.2\win32\scview.exe"(这里Sybase产品安装在e:\sybase目录下),出现以下界面:
 

2.连接数据库服务器
鼠标双击需要连接的数据库服务器名,出现登录界面:
 
      输入登录帐户名,口令,之后鼠标单击 “OK”按钮,即可看到如下界面:
 
现在您就可以对您的数据库服务器进行需要的管理工作了。
2.10 如何使用图形化管理工具Dsedit实用程序?
Dsedit实用程序是客户端用于配置服务器端数据库服务器连接属性的配置工具。在客户端访问服务器端数据库服务器之前,数据库服务器连接属性的配置是必须的也是必要的,那么连接属性的配置将使用Dsedit实用程序来完成。
这里主要介绍windows平台的Dsedit实用程序的使用方法。
1.打开Dsedit实用程序图形化管理工具:
            在“开始”菜单中寻找: 开始-->程序-->Sybase-->Dsedit实用程序,鼠标单击
        Dsedit实用程序,出现以下界面:
 
鼠标单击”OK”按钮,进入:
 

2.添加数据库服务器名称:
鼠标单击菜单中:Server Object-->Add,出现以下窗口:
 

输入数据库服务器名称,鼠标单击”OK”按钮,出现以下界面:
 

3.添加数据库服务器地址:
           用 鼠标选择Server Address条目,再鼠标右键单击该条目,出现弹出框,选择”Modify Attribute…”,出现以下对话框:
 

鼠标单击”Add”按钮,
 
按上图中所示格式输入数据库服务器的地址和端口号,鼠标单击”OK”按钮,
 
鼠标继续单击”OK”按钮,完成数据库服务器地址的配置。
 
关闭该图形化窗口,即完成数据库服务器连接属性的配置。
2.11 如何创建登录帐户?
   在isql环境下执行:
1> sp_addlogin login_name,password
2> go
例:
1> sp_addlogin user1,”123456”
2> go
(注:该存储过程还提供其它参数,如需使用,请参阅资料《Reference Manual》)
2.12 如何修改自己以及其登录帐户的口令?
在isql环境下执行:
1> sp_password caller_password,new_password,login_name
2> go
例:
1> sp_password “111111”,”222222”,user1
2> go
其中:
caller_password:登录时所使用的login的口令。在以上例子中,如果登录时使用的是sa,那么“111111”就是sa的口令;如果登录时使用的是user1,那么“111111”就是user1的登录口令。
new_password:需要更新的login的新口令。在以上例子中,“222222”是user1的新口令。
login_name:需要更新的login名称。如果该参数不提供,则默认更改登录时所使用的login名称。
2.13 如何查看登录帐户的信息?
在isql环境下执行:
1> sp_displaylogin login_name
2> go
例:
1> sp_displaylogin user1
2> go
其中:
login_name:为需要查看的login名称。如不指定,则默认为登录时所使用的login名称。
2.14 如何设置登录帐户的缺省数据库?
方法一:
在创建登录帐户时即可指定,具体方法如下,在isql环境下执行:
1> sp_addlogin login_name,password,default_db
2> go
例;
1> sp_addlogin user1,”123456”,pubs2
2> go
(注:这里如果不指定,缺省数据库为master)
方法二:
为已经创建好的登录帐户修改缺省数据库,具体方法如下,在isql环境下执行:
1> sp_modifylogin login_name,”defdb”,db_name
2> go
例:
1> sp_modifylogin user1,”defdb”,pubs2
2> go
上例中,将login是user1的缺省数据库设置为pubs2数据库。
2.15 如何为登录帐户授予系统角色?
方法一:
在isql环境下执行:
1> sp_role “grant”,role_name,login_name
2> go
例:
1> sp_role “grant”,”sybase_ts_role”,user1
2> go
上例中,将系统角色sybase_ts_role授予登录帐户user1。
方法二:
在isql环境中执行:
1> grant  role role_name to login_name
2> go
例;
1> grant  role “sybase_ts_role” to user1
2> go
2.16 如何创建数据库设备?
在isql环境中执行:
1> disk init
2> name=”device_name”,
3> physname=”physicalname”,
4> vdevno=virtual_device_number,
5> size=device_size
例:
1> disk init
2> name=”DATA1”,
3> physname=”c:\sybase\data\data1.dat”,
4> vdevno=6,
5> size=5120
以上例子中,创建了一个名为DATA1的设备,设备文件为c:\sybase\data\data1.dat,虚拟设备号为6,大小为10M(size默认大小的单位为2K)
注:在ASE125以上版本中,device_size单位可以自定义为K,M,G。使用这些单位时,需要用双引号将device_size的值引起来,例如:”100K”,”10M”,”1G”。
2.17 如何把数据库设备设置为缺省设备?
在isql环境下执行:
1> sp_diskdefault device_name,defaulton
2> go
例:
1> sp_diskdefault “DATA1”,defaulton
2> go
以上例子中,将数据库设备”DATA1”设置为缺省设备。
2.18 如何镜像数据库设备和取消数据库设备镜像?
镜像数据库设备:
在isql环境下执行:
1> disk mirror
2> name=”device_name”,
3> mirror=”pathname”
4> go
例:
1> disk mirror
2> name=”DATA1”,
3> mirror=”c:\sybase\data\DATA1_M.dat”
4> go
以上例子中为数据库设备DATA1创建镜像DATA1_M.dat.

取消数据库设备镜像:
1> disk unmirror
2> name=”device_name”,
3> side=”primary”|”secondary”,
4> mode=retain|remove
5> go
例:
1> disk unmirror
2> name=”DATA1”,
3> side=”primary”,
4> mode=remove
其中:
side:指定所要取消镜像的是primary(主设备),还是secondary(镜像设备)。如果不指定,默认取消secondary(镜像设备)。
mode:指定取消镜像这个操作是remove(永久操作),还是retain(临时操作)。如果不指定,默认为retain(临时操作)。临时取消镜像的操作,可以使用”disk remirror”命令恢复其镜像。
以上例子中,永久取消数据库设备DATA1的主设备镜像。

附:
使用disk remirror命令恢复被临时取消的数据库设备镜像。
1> disk remirror
2> name=”device_name”
3> go
2.19 如何创建数据库?
在isql环境下执行:
1> create database database_name
2> on data_device_name=data_size
3> log on log_device_name=log_size
4> go
例:
1> create database DB1
2> on DATA1=100
3> log on LOG1=20
4> go
以上例子中创建了一个数据为100M,日志为20M,总大小为120M的数据库DB1。
注:在ASE125以上版本中,data _size和log_ size单位可以自定义为K,M,G。使用这些单位时,需要用双引号将data_size,log_size的值引起来,例如:”100K”,”10M”,”1G”。
2.20 如何在Sybase Central中配置Monitor Server?
1.运行$SYBASE\ASEP_Win32\jdk1_1_8-win.exe,安装路径c:\JDK1.1.8

2.配置环境变量
(1) JAVA_HOME=c:\JDK1.1.8
(2) CLASSPATH=d:\sybase\ASEP\3pclass.zip;d:\sybase\ASEP\monclass.zip;c:\JDK1.1.8\lib;c:\JDK1.1.8\lib\classes.zip
(3) 在PATH环境变量中加入:c:\JDK1.1.8\bin;c:\sybase\Sybase Central 3.2\win32且将c:\JDK1.1.8\bin放在开始处,并且确认PATH环境变量中包含c:\WINNT或者c:\Windows.

3.复制文件
(1) 将 c:\JDK1.1.8\bin下地文件jre.exe 和 jrew.exe复制到 c:\WINNT或者
c:\Windows(视不同操作系统决定)目录下
(2) 复制$SYBASE\ASE_12-5\bin\libunic.dll 到 c:\WINNT\system32目录下

4.创建Sybase Central快捷方式
  在桌面上创建Sybase Central快捷方式之后,修改该快捷方式的属性:
  在属性对话框中选择”shortcut”页,在”start in:”的输入框中填入:
  c:\jdk1.1.8\bin

5.重启机器
2.21 如何配置用户自定义命名缓存以及缓冲池?
定义命名缓存:
在isql环境中执行:
1> sp_cacheconfig cache_name,size
2> go
例:
1> sp_cacheconfig cache_a,”100K”
2> go
其中:
size:命名缓存的大小,单位可以是P/K/M/G,默认单位为K。
上例中创建了一个100K的命名缓存cache_a。
(注:该命令还提供其它参数,如定义命名缓存的类型等。若需使用,请参阅资料《Reference Manual》)
定义缓冲池:
在isql环境中执行:
1> sp_poolconfig cache_name,mem_size,config_pool
2> go
例:
1> sp_poolconfig cache_a,”100M”,”16K”
2> go
其中:
mem_size:缓冲池的大小,单位可以是P/K/M/G,默认单位为K,最小指定值为512K。
config_pool:I/O大小,可以为2K,4K,8K,16K
上例中创建一个大小为100M的缓冲池,其I/O大小为16K。
(注:该命令的其它用法,请参阅资料《Reference Manual》)
2.22 如何扩展数据库?
扩展数据空间:
alter database db_name on device_name

扩展日志空间:
alter database db_name log on device_name
2.23 如何设置数据库为单用户模式?
use master
go
sp_dboption db_name, “single user”, true
go
use db_name
go
checkpoint
go
2.24 如何把数据库设置为自动截断事务日志?
use master
go
sp_dboption db_name, “trunc log on chkpt”, true
go
use db_name
go
checkpoint
go
2.25 为了可以在用户事务中执行数据定义语言,应如何设置数据库选项?
use master
go
sp_dboption db_name, “ddl in tran ”, true
go
use db_name
go
checkpoint
go
2.26 如何设置数据库选项可以在用户表中自动添加序号生成器?
use master
go
sp_dboption db_name, “auto identity”, true
go
use db_name
go
checkpoint
go
2.27 如何为数据库创建数据库用户?
语法:sp_adduser loginame [, name_in_db [, grpname]]

举例:
1.sp_adduser margaret
将"margaret"增加为数据库用户。他的数据库用户名与Adaptive Server 的登录名(login name)相同, 并且属于缺省组"public"。

2.sp_adduser haroldq, harold, fort_mudge
将"haroldq"增加为数据库用户。当 "haroldq"使用当前数据库时,他的名字为 "harold"。该用户属于“ fort_mudge”组,同时也属于缺省组 "public"。
2.28 如何创建用户自定义组?
语法:sp_addgroup grpname

举例:
1.sp_addgroup accounting
增加一个名为“accounting”的组。
2.29 如何改变用户自定义组中数据库用户?
语法:sp_changegroup grpname, username

举例:
1.sp_changegroup fort_mudge, albert
用户"albert"现在成为"fort_mudge"组的成员。
2.30 如何查看数据库空间的大小?
举例:
1.查看全部数据库的大小:
sp_helpdb
name           db_size  owner dbid created        status
-------------- -------- ----- ---- -------------- ------------------
master         5.0 MB   sa       1 Jan 01, 1900   no options set
model          2.0 MB   sa       3 Jan 01, 1900   no options set
pubs2          2.0 MB   sa       6 Sep 20, 1995   no options set
sybsystemprocs 16.0 MB  sa       4 Sep 20, 1995   trunc log on chkp
tempdb         2.0 MB   sa       2 Sep 20, 1995   select into/bulkcopy
Displays information about all the databases in Adaptive Server.

2.查看指定数据库的大小
sp_helpdb pubs2

name   db_size  owner  dbid  created              status                                                                                                
-----  -------  -----  ----  ------------  ----------------------
pubs2  2.0 MB    sa         4    Mar 05, 1993    abort tran when log full
device_fragments      size       usage               free kbytes
-----------------         ------      ------------          -------------
master                      2.0 MB  data and log            576
name    attribute_class attribute                   int_value char_value  comments
------- --------------- ------------- --------- ----------- --------
pubs2   buffer manager  cache binding         1   pubs2_cache     NULL
Displays information about the pubs2 database.
2.31 如何改变数据库的属主?
语法:sp_changedbowner loginame [, true ]

举例:
1.sp_changedbowner albert
用户 "albert"成为当前数据库的属主。
2.32 如何执行sp_configure 系统存储过程来查看系统参数?
1.查看全部参数的配置:
isql  -Usa –P –Ssevername
1> sp_configure
2> go

2.查看指定参数(如:查看“用户连接数”)
isql  -Usa –P –Ssevername
1> sp_configure  “number of user connections”
2>go
2.33 如何为当前的Sybase数据库服务器设置最大可用内存?
在ASE12.5中,当前SYBASE数据库服务器可用的最大内存由参数“max memory”配置,其含义是ASE SERVER可分配的最大共享内存(pre-ASE12.5,使用参数total memory)。ASE12.5采用动态分配内存机制,在安装时由于没有什么进程、任务需要用到内存,此时系统分配的共享内存是很小(可用sp_configure “total physical memory”查看当前的内存使用情况)。因此即使我们将“max memory”配置到很大的值,比如2G、4G,但ASE SERVER在实际需要时并不一定能分到“max memory”指定的内存。因此,在安装时,必须先将“allocate max shared memory”设置为1(在SERVER启动时就划分”max memory”的值的内存),再启动SERVER,如果启动正常,那么说明“max memory”的值是系统可以接受,此时可以把“allocate max shared memory”设置为0,让ASE SERVER动态分配内存;如果启动失败,则要查看操作系统有关内存的配置参数是否正确设置。
2.34 影响数据库服务器内存配置的基本参数
设置Adptive Server12.5的内存配置时,使用sp_configure命令,用具体值指定每一项内存需求,例如过程缓存和缺省数据缓存的大小。以下3个参数影响内存的分配(不同于以前版本):
max memory  该参数是以2K为单位的数值,决定可以分配给Adaptive Server的最大内存数。为动态参数,改变后不必重起Adaptive server。

allocate max shared memory 该参数有0和1两个值。决定sybase server启动时,是否一次分配给Adaptive server 的内存为max memory指定大小。值为1时启动sybase server,一次分配max memory大小的内存;值为0时启动sybase server,一次只分配按实际参数配置所需要的内存。例如,max memory为500MB,若设置该参数为0(缺省值), Adaptive Server的具体配置参数和核心所需内存仅100M,则Adaptive server启动后只从OS获取100MB内存,仅当动态参数改变需要额外内存时才考虑从OS获取所需内存,最大不超过max memory大小;若设置该参数为1,则Adaptive Server在启动时一次即获取500MB内存,而不管空闲内存是多少。

Dynamic allocation on demand 该参数用以确定有新的内存请求时,是立即获得内存资源还是仅在需要时分配。是动态参数,取值范围为0和1。例如,假设number of user connections原值为50,改为150,因每个用户连接需要112K内存,则(150-50)个用户需要使用的内存数量为11MB(100 x 112/1024)。若设置该参数值为1,当有第51个连接需求时,才分配一个连接需要的内存,也就是说是随着真正的需要逐渐获取连接所需内存,直到150个连接局限;如果设置该参数值为0,Adaptive Server立即为用户连接分配(150-50)个用户需要的11MB内存。
2.35 如何为当前的Sybase ASE 12.5设置可用的数据缓存?
total data cach size以K字节显示当前有效的数据缓存大小,为只读参数,只能使用sp_configure查看,不能配置。配置数据缓存,必须使用sp_cacheconfig。ASE12.5的 default data cache必须手动重配,默认值8M不能满足性能需要。注意该参数为静态参数,必须重起ASE。
示例:为Adaptive Server配置100MB数据缓存
sp_cacheconfig “ default data cache”,”100M”
2.36 如何为当前的Sybase ASE 12.5设置可用的过程缓存?
参数procedure cach size(以2k为单位)决定了过程缓存的大小,该参数使用sp_configure配置,为动态参数。
示例:为Adaptive Server配置100MB过程缓存
sp_configure “procedure cache size”,”100M”
2.37 如何为当前的Sybase数据库服务器设置可用的最大数据库设备数量?
Number of device参数控制了Adaptive Server能够使用的数据库设备的数目。
示例:最多允许使用100个逻辑设备
sp_configure “number of devices”, 100
2.38 如何为当前的Sybase数据库服务器设置可用的最大锁数?
Adaptive Server中的所有进程共享一个公共的锁缓冲池,所需要的锁的数目取决于正在运行的操作的数目和性质。Number of locks参数控制了Adaptive Server上进程可用的锁的数目。如果所有配置的锁都已经用尽,Adaptive Server会显示一个服务器级的错误消息。另外,缓冲池锁会占用内存。
例如:允许最多使用100,000个锁
sp_configure “number of locks”, 100000
2.39 如何为当前的Sybase数据库服务器设置可用的最大用户连接数?
参数number of user connections用于设置可以同时连接到Adaptive Server的最大用户数。其中,用户连接包括用任何登录名(login)所做的登录连接,一个特定登录名(login)同时的多次登录被认为是多个连接。
例如:最多允许同时的100个用户连接
sp_configure “number of user connections”, 100
2.40 如何备份数据库?
当遇到介质故障时(如磁盘老化损坏),仅当你有数据库的定期备份及后继的事务日志备份的情况下才可恢复该数据库。要完全恢复,必须定期使用dump database 命令备份数据库并结合dump transaction命令备份日志。Dump database命令允许动态执行,即转储/备份数据库期间允许其他用户对该数据库中的数据进行更改,这使得定期备份数据库更加方便。
示例:使用单一磁带设备进行转储/备份:
在UNIX操作系统中:
dump database pubs2 to "/dev/nrmt4"
在Windows NT操作系统中
dump database pubs2 to "
\\.\tape0"
你也可以把数据库备份/转储到一个操作系统文件中。例如,在NT操作系统环境中:
dump database pubs2 to "d:\backups\backup1.dat"
2.41 如何进行数据库的增量备份?
可以使用dump transaction命令(或其缩写dump tran)对事务日志进行例行的增量备份。Dump transaction与许多操作系统提供的增量备份类似。它复制并且备份事务日志,提供自上一次数据库备份或者事务日志转储以来对数据库所进行的所有改变的记录。Dump transaction复制/备份完日志后,会截断其中不活动的部分。
 Dump transaction比完全数据库备份所花费的时间和存储空间要少,一般更为常用。注意,只有将数据库的数据和日志分别存储在不同的数据库逻辑设备上时,才可以运行dump transaction。示例:
在UNIX操作系统中:
dump transaction pubs2 to "/dev/nrmt4"
在Windows NT操作系统中
dump  transaction to "
\\.\tape0"
你也可以把数据库备份/转储到一个操作系统文件中。
例如,在NT操作系统环境中:
dump transaction pubs2 to "d:\backups\backup1.dat"
2.42 如何恢复数据库?
建议执行的步骤:
获取故障设备上每个数据库的当前日志转储(使用dump transaction的no_truncate选项)
检查设备上每个数据库的空间使用情况
收集完故障设备上所有数据库的这些信息后,删除每个受故障设备影响的数据库
删除故障设备
初始化新设备
重新创建数据库,每次创建一个
将数据库的备份装载到每个数据库
按事务日志转储创建时的顺序加载每个事务日志转储
online database YOUR_DB_NAME
2.43 如何截断数据库的事务日志?
事务日志填满数据库中的日志空间后,可能不能使用转储事务日志的办法备份并且清除原来存在的日志,因为转储日志这个动作本身也需要记录日志。
这时候,可以首先使用dump transaction database_name with truncate_only命令,该命令只是截断/清除事务日志,并不生成实际的备份。
如果不能奏效,可以使用dump transaction database_name with no_log命令。该命令也是仅仅清除既有的事务日志,不生成实际的备份文件,且该命令本身不记日志。
如果该命令还不能奏效,应当使用alter database命令为此数据库的日志分配额外的空间,随后执行dump transaction。
2.44 如何恢复数据库到某一具体时间?
可以将数据库恢复到事务日志中的指定时间点。为此,使用load transaction的until_time选项。该功能在诸如用户不小心从数据库中删除了一个重要表时很有用;可用util_time选项将对包含此表的数据库的改变恢复到表被删除前的状态。
要在数据库破坏后有效使用until_time,用户必须知道错误发生的确切时间,然后把包含误操作的事务日志转储出来,再如示例一样进行装载。示例:
load transaction database_name
from “/dev/nrmt5”
with until_time = “Mar 26 1997 12:35:59:650PM”
注意:这样装载事务日志后,AdaptiveServer重新启动数据库日志序列,在可以转储另一个事务日志之前,需要转储数据库。
2.45 如何把表、索引等数据库对象的定义从数据库中导出来?
使用defncopy.exe程序可以把指定的视图、规则、缺省值、触发器或者存储过程的定义从数据库导出到操作系统文件中,或者从操作系统文件导入到数据库中。它位于$SYBASE/OCS-12_5/bin中。
示例1:在ABC服务器上,将定义从new_proc文件拷入stagedb数据库中,使用sa帐户,口令为空:
defncopy –U sa -P –S ABC in new_proc stagedb
示例2:在SYBASE服务器上,将sp_calccomp和sp_vacation对象的定义从employees数据库库拷入dc.out文件中,消息和提示以法语显示:
defncopy -S SYBASE –U sa  -P –z French out dc.out emploees spcalccomp sp_vacation
2.46 如何把整个数据库中所有用户表的数据全部导出来?
bcp命令一次只可以把一个表的数据导出来。要想把所有用户表的数据都导出来,可以生成一个包含多行bcp命令的批处理文件,其中的每行bcp命令导出一个表。
以下是生成这个批处理文件的示例:
a) 编辑一个文本文件select.sql,内容如下:
set nocount on
use pubs2
go
select "bcp pubs2.." + name + " out " + name + ".bcp -Usa -P -c "
from sysobjects where type="U"
go
b) 如果是unix环境, 执行:
isql  -Usa   -P  -b -i select.sql  -o bcpout
chmod  +x   bcpout
如果是Windows, 执行:
isql  -Usa   -P  -b -i select.sql  -o bcpout.bat
c) 把bcpout中out换为in即可得到bcpin的批处理命令文件
2.47 如何执行快速bcp操作?
当使用bcp命令向数据表中导入数据时,表上的索引和触发器会影响数据导入的速度。在这样的表上使用bcp时,bcp自动使用慢速模式,也就是将在日志中记录数据的插入,导致事务日志快速增长。
要想避免这种情况,可以先把目标表上的索引和触发器全部删除,并且把数据库bulk copy/select into开关打开,再使用bcp命令向该表中导入数据。
2.48 如何查看当前数据库中的进程信息?
可以使用存储过程sp_who查看Adaptive Server中的所有进程的信息。Sp_who返回结果的解释如下:
fid  进程所属于的组,在配置了并行处理的环境中有意义,否则为0
spid 进程号。系统管理员可以在T-SQL命令kill中用该号来停止进程
Status 进程状态,正在运行或者休眠
Loginname 启动进程的用户登录名或者别名,对于系统进程该项是NULL
Origname 如果loginname是别名,则origname显示真实登录名,否则与loginname        显示同一信息。
Hostname 数据库驻留的服务器名称
Blk_spid 阻塞进程的ID(如果有的话)。阻塞进程(可能受影响或者拥有排他锁)是占有其他进程所需资源的进程。
Dbname 该进程访问的数据库
Cmd 该进程正在执行的命令和进程。条件语句(if 或while循环)的求值将返回cond。
Block_xloid 标识出阻塞事务的唯一的锁所有者ID。
2.49如何查看当前数据库中锁发生的情况?
可以使用存储过程sp_lock查看AdaptiveServer当前运行状态中锁的分配和使用情况。
2.50 如何更改用户表的锁模式?
可以使用alter table 命令来更改现有用户表的锁模式。
示例:把titles表的锁模式改为数据行锁:
alter table titles lock datarows
另外,一个表的锁模式可以使用sp_help table_name查看。
2.51 如何执行optdiag命令来监控表和索引的物理使用情况?
Optdiag程序用以显示数据库中关于表和字段的统计信息,也可以将更新的统计信息装载到系统表中。该程序位于$SYBASE\ASE-12_5\bin中。
示例1 :显示pubs2数据库中所有用户表的统计信息,并将输出内容放入pubs2.opt中:
optdiag statistics pubs2 –Usa –Ppasswd –o pubs2.opt
示例2:显示titles表的统计信息:
optdiag statistics pubs2..titles –Usa  -Ppwsswd –o titles.opt
示例3:显示titles表中price列的二进制统计信息:
optdiag binary statistics pubs2..titles.price –Usa –Ppasswd –o price.opt
2.52 如何执行reorg 系列命令来优化Dol表及其索引?
Reorg命令根据使用的选项,回收页上未使用的空间、删除行转移或将表中的所有行重新写入新页。通过整理表空间,可以有效改善表访问的性能。
可以使用的参数有:
reclaim_space  回收由删除和更新操作所留下的未使用空间。对于表中的各个数据页,如果有已经提交删除或者行缩短更新操作产生未使用空间,该参数将连续重写当前这些行,使未使用空间保留在页尾;如果页中已没有行,则释放该页。
forwarded_rows 删除前移行
compact   组合reclaim_space和forwarded_rows的功能
Rebuild   如果指定了表名,则将表中的所有行重写到新的页;如果指定了索引名,reorg将重建所以。
示例1:回收titles表中的未使用的页空间
reorg reclaim_space titles
示例2:回收索引titleind中的未使用页空间
reorg reclaim_space titles titleind
注意:reorg rebuild要求将数据库选项select into/bulkcopy/pllsort设置为true,并在数据库中运行checkpoint
2.53 如何使用sp_sysmon存储过程来查看当前数据库的性能情况?
存储过程sp_sysmon可以对指定时间段内Adaptive Server的活动情况进行十分详细的统计分析,并输出统计报告,系统管理员可以从输出报告中掌握到Adaptive Server的运行状况和配置参数的运行效果。输出报告的解读,请参阅性能和调优手册。
示例1:统计未来10分钟内Adptive Server的运行情况:
sp_sysmon “00:10:00”
示例2:分别通过begin_sample 和end_sample指定要分析的时间区间的其实端点和终结端点,其间可能发生了很多事务和操作。
sp_sysmon begin_sample ――开始对运行数据采样

sp_sysmon end_sample ――结束采样,输出统计报告