Sybase ASE

Sybase技术简介

Sybase ASE——美国Sybase公司研制的一种关系型数据库系统,是一种典型的UNIX或WindowsNT平台上客户机/服务器环境下的大型数据库系统。 Sybase提供了一套应用程序编程接口和库,可以与非Sybase数据源及服务器集成,允许在多个数据库之间复制数据,适于创建多层应用。系统具有完备的触发器、存储过程、规则以及完整性定义,支持优化查询,具有较好的数据安全性。

Sybase通常与SybaseSQLAnywhere用于客户机/服务器环境,前者作为服务器数据库,后者为客户机数据库,采用该公司研制的PowerBuilder为开发工具,在我国大中型系统中具有广泛的应用。

Sybase ASE 在Windows上安装

1.插入sybase server安装光盘。

2.在安装光盘目录下执行setup.exe。

3.完成ASE安装以后,选择开始->程序->Sybase->Server Config启动服务器安装进程配置服务器。

Sybase ASE 在Linux上的安装

1.操作系统补丁

对于Intel x86: Red Hat Enterprise Linux(AKA Red Hat Advanced Server):AS、ES和WS版本
SuSE Linux Enterprise Server/United Linux

对于Intel Itanium:Red Hat Enterprise Linux(AKA Red Hat Advanced Server):AS和WS版本
SGI Advanced Linux Environment Itanium (SGI Altix)

2.创建Sybase组和用户 一般建议用户名:sybase 组名:sybase。如果安装双机,要保证主备机uid,gid一致。

3.插入sybase server 安装光盘

4.系统自动mount cdrom,如果系统没有mount cdrom,可用命令:#mount /mnt/cdrom(#mount -t iso9660 /dev/cdrom mnt/cdrom)

5.以sybase用户登录,在安装文件目录执行软件安装 $./setup(字符终端使用./setup -console)

6.设置环境变量:csh:$cp $SYBASE/SYBASE.csh $SYBASE/.cshrc
sh or ksh使用 $cat $SYBASE/SYBASE.sh>>$SYBASE/.profile

Sybase ASE 配置参数说明

配置参数是 SA 定义的设置,它控制着 Adaptive Sever 的行为。按缺省配置安装的服务器只能满足启动该服务器,但是这种配置在现实的生产与开发环境中是不够的。因此,一个服务器安装后,系统管理员要做的第一件事就是按照实际性能要求重新配置服务器。

配置参数包括动态参数和静态参数:
动态参数修改后立即起作用;
静态参数修改后要重新启动服务器才起作用。

通常有两种方法设置配置参数:
通过sp_configure系统存储过程查看和修改配置参数值;
手工修改配置文件,然后把值读入服务器或重启服务器。
配置文件是一个 ASCII 文本文件,它里面存放配置参数值,缺省情况,该文件名为 .cfg

当服务器启动时, 配置文件用于分配服务器资源:
在UNIX上,除非特别指明另一个文件,否则使用配置文件$SYBASE/.cfg ;
在NT上,除非特别指明另一个文件,否则使用配置文件%SYBASE%\.cfg 。

Sybase ASE 安装后的系统配置

一、配置内存

sp_configure "max memory",mmm (单位为2k) 配置sybase使用mmm*2k内存,通常配置为系统内存的70-75%
比如有2G内存的机器,要分配1.4G给ASE数据库,就需要设为700000
这里需要说明的是32为的操作系统,由于32位寻址的原因,操作系统(如Windows-x86)给数据库最多1.6G,即使有4G以上的物理内存,这里也只能用到1.6G
sp_configure "allocate max shared mem",1
启动就分配最大内存,在有多个程序的时候我特别建议使用,不然如果其他程序占了内存,数据库运行中ASE可能报错
max memory生效后,配置data cache: sp_cacheconfig "default data cache","xxxM"
一般为max memory的50%,以M为单位,在上例中,1.4G的max memory,700M给ASE是比较合适的
procedure cache: sp_configure "procedure cache size",yyy
一般为max memory的20%,以2k为单位,在上例中,1.4G的max memory,280000比较合适

二、配置引擎

sp_configure "max online engines",n
这里所说的引擎是就是通俗所说的CPU,不过有几点需要说明:
如果这是一个超线程的CPU,建议把超线程关闭,超线程在数据库运行中没有作用,反而可能带来负面的影响
这里说的引擎是CPU中处理器的总数,比如有2颗4核CPU的服务器,n应该为8
假设这台服务器只是用来运行数据库,启动时的引擎数m的一般规律是:
如果引擎n=1,2,那么m=n一样,为1,2.
如果引擎n=3,4,5,那么m=n-1,即2,3,4。
如果引擎n>=6,那么m=n-2

三、其它参数

锁数目:sp_configure "number of locks",100000
如果用到行锁,一般初始设置为10万或更高,当发现错误日志中锁数目不够时在扩,它是一个动态参数,立即可以生效
用户连接数:sp_configure "number of user connections",50
打开的对象数:sp_configure "number of open objects",5000
打开索引数:sp_configure "number of open indexex",5000
设备数:sp_configure "number of devices",256
对于ASE 15来说还有分区数:sp_configure "number of open partitions",5000
以上都是数据库安装后必须设的,并不完全。其他配置参数,以及这些参数的细化,需要根据应用和服务器的设置来调整

数据库中文问题

字苻集是基于数据库操作系统平台和语言集的集合,在C/S系统中,支持多语言的数据处理中,所有使用的语言必须属于同一个语言组,因此为了支持全球"所有"的语言(650种)有一个公共的字符集-unicode.

对于中文的支持,我们一般建议采用cp936,它是基于CB13000-90,对GB2312(EUCGB)的扩展,向下兼容EUCGB。目前支持中文最丰富的是GB18030,它不仅支持27000个汉字,还支持藏,蒙,维吾尔等民族语言,不过它只支持一种排序区别大小写的方式binary。utf8是要用3个字节表示一个字符,因此会多消耗50%的存储空间.

如果服务器和客户端都使用ISO_1,那么系统会自动把一个汉字当两个字符处理,一般情况下不会有影响,但如果执行"like"的时候可能会出错.

ASE数据库初次安装后是没有CP936的,如果需要加载过程如下:
1、在$SYBASE\charsets\cp936目录下,执行charset -Usa -Ppassword -Sserver_name binary.srt cp936
2、在SQL环境下看是否加载成功,select name,id from syscharsets,看是否有name为cp936,id 为171的行
3、如果存在,加载成功,把默认字符集设为CP936,sp_configure "default character set id",171
4、重起数据库,第一次会自动宕机,然后第二次重起

如果这时用isql连接发现客户端与服务器之间的字符无法自动转换,则要修改客户端字符集:
1、在操作系统下,用sybase用户登陆,看客户端的语言LANG,如果装了SYBASE的环境变量配置,一般为"C"
2、到$SYBASE\locales目录下修改locales.dat文件中的字符集定义,首先找到对应的操作系统,然后在找语言(如"C",或默认default)对应的行,然后做修改到相应的字符集(如cp936)

如果系统用的双机,则需要改在两台机改同样的文件,$SYBASE/ASE-12_5/servername.cfg和$SYBASE/locales/locales.dat。

日志满造成的故障

数据库在运行中,有一个大事务,比如删除一个表(drop table),把数据库的日志撑满了,数据库报错,不再运行。这是一个经常出现的问题,如果操作不当,比如停机(shutdown)那就挺危险的.

处理这类故障,最直接最安全的办法是增加"日志空间": alter datbase your_db_name log on your_db_dev=xxxM

如果重启了,服务器就会报错,这个库就因为没有recovery而不可用,这时就需要修改系统表,把这个库的状态改为-32768,然后清除日志。步骤如下:
1、sp_configure "allow updates",1
2、update master.sysdatabases set status = -32768 where name = "your_db_name"重启服务;
3、dump tran you_database_name with no_log
4、update master.sysdatabases set status = 0 where name ="your_db_name"
再重启服务,一般情况,ASE系统就可以使用了.

另外有几个注意事项:
1、如果日志中数据量很大,启动的时间可能很长,几十分钟,甚至更长;
2、日志满的是master数据库,那么需要打flag -T3607来代替直接改sysdatbases表;
3、如果用上述办法还不能修复,那就要从操作系统层面删除数据日志,这就有风险,必要是要通过bcp备份重要的表。

把tempdb从master设备删除

把tempdb从master设备上删掉,操作很简单,把三个段system,'default,logsegment直接删掉。

步骤如下:
用sa登录服务器,执行
>sp_dropsegment system,'tempdb','master'
>sp_dropsegment 'default','tempdb','master'
>sp_dropsegment logsegment,'tempdb','master'
>sp_configure "allow updates to system tables",1 ----允许修改系统表
>delete sysusages where dbid=2 and vdevno=0 ----dbid=2是tempdb,vdevno=0是master设备
>update sysusages set lstart=0 where dbid=2 ----这里只考虑一个tempdb设备
>sp_configure "allow updates to system tables",0
执行完之后可以通过sp_helpdb tempdb来看设备的使用情况,如果在master设备上没有了,就说明删除成功.
在Sybase ASE 15.0以前的版本,是要把建好服务(build server)以后再扩tempdb的。到了ASE 15以后,在建服务的时候就直接扩tempdb,但很奇怪,tempdb还是在master里留了一个尾巴,需要DBA自己手工删除。 tempdb留一点在master里,有可能造成性能下降,以及引起系统的不安全、不稳定,系统装完后最好移除去

ASE在Linux上的配置调优建议

1、通过MDA表中的monDeviceIO和monIOQueue监测磁盘I/O性能

这两张表是MDA监测表中的一部分,它让你判断I/O是不是有问题,换句话说就是ASE在做大量I/O的时候,主机操作系统是及时完成了呢,还是没有。这两张表里的信息告诉我们在一段时间内平均磁盘工作时间,哪些设备作了最多的I/O,因为主机不能及时处理而造成有多少I/O在队列中。一般认为,如果你的主机连接在SAN上,每次I/O超过10毫秒是很差的,9~5也是比较慢的,低于4就比较正常。如果你觉得I/O性能不可以接受,分散I/O到多个磁盘或LUN是一个不错的主意。你可以通过monOpenObjectActivity表中确定哪些对象是"热点",把它们从同一个磁盘中移走.

2、通过iostat和vmstat监测操作系统,看"热点"盘和MDA表是否一致

通过在操作系统层面对磁盘和I/O的监测,进一步确认MDA表里的值.

3、确认libaio库已经安装

libaio安装与否主要依赖Linux操作系统的发布时是否默认安装。这个库为ASE提供了异步I/O(其他的I/O方式还包括"标准UNIX同步I/O"和"UFS缓存I/O"),ASE 15要求必须安装这个库,如果没有ASE数据库将不能启动.

Linux的不同版本处理llibaio库的方式不同,需要查询相应的说明,确认是否已经安装了,以及如何获得和安装.

4、如果使用文件系统,请确认DSYNC没有打开

DSYNC的简单说是这样的,当你用disk init创建一个数据库设备,ASE将会同步写这个文件,这样可以确保数据是写成功而且可以恢复。在早期的版本里,ASE需要把它打开,如果把它关了,使用文件缓冲区,在写数据或恢复(recovery)的时候如果出现问题,系统就可能出错甚至ASE数据库崩溃.

如果你使用ASE 15或者更高的版本,你需要将DSYNC关闭,DIRECTIO打开。这样写盘就会用类似于裸分区的方式.

如果你使用裸分区,那么这两个参数默认都是关闭,而其一直要保持关闭.

5、检查挂接mount的选项

如果你使用的是文件系统设备,你需要检查mount的选项,确认是否存在瓶颈.

比如,默认的mount选项是ext3,但它的文件作为数据库设备时不能提供最好的性能;而"noatime,nodiratime,data=writeback"可以提高性能。XFS文件系统比ext3(或者ext2)的性能要好.

6、确认/etc/sysctl.conf设置正确

这个参数确定了操作系统的核心参数,在每次启动时生效(在运行时,可以通过"sysctl -p")。对于ASE的应用,建议设置下面两个关键参数:kernel.shmmax 共享内存 、fs.aio-max-nr 最大异步I/O

通过日志DUMP/LOAD实现数据准实时备份

现代信息社会,数据的重要性不言而喻。在数据库的管理中,应急和灾难恢复已经是数据的一个重要课题。如何自动、可靠的备份数据,并在故障出现时方便、及时启用是数据库管理员非常重要的一项工作。

目前在我们使用Sybase ASE数据库管理系统的应用中,有多种实现高可靠性的方法,采用定时自动的通过备份事物日志,并及时恢复到备份库的方式是一种非常稳定、有效的实用方法。

在 Server A,Server B两台同样平台的主机上分别有数据库套ASE数据库系统a,b,而且在两台服务器上BACK_UP服务都已经启动。

第一步,用isql登录到主机A中,把数据库a 备份到文件c:\a.dat中:dump database a to "c:\a.data"

第二步,用isql登录到主机B中,把a备份下来的数据文件c:\a.dat在b中恢复:load database b from "c:\data"

第三步,在客户端用DSEDIT分别建立与数据库的接口(interfaces)A,B,并建立bcka2b.bat批处理文件 date /t >>bcka.log
time /t >>bcka.log
isql -Usa -P -SA -ibcka.sql >>bcka.log
date /t >>ldb.log
time /t >>ldb.log
isql -Usa -P -SB -ildb.sql >>ldb.log

第四步,建立bcka.sql文件,把数据库A中变化的事物日志备份出来:
dump tran a to 'c:\a.tran'
go

第五步,建立ldb.sql文件,把变化的事物日志写入数据库B中:
load tran b from 'c:\a.tran'
go

第六步,在windows"任务计划"中加入任务bcka2b.bat,并在"属性->高级计划选项->重复任务"中按备份的要求确定备份时间(如5分钟)。

第七步,在故障出现,需要应急时,只要改变Server B的IP地址为Server A的IP,或直接修改主机名,重起数据库服务器,登录数据库,键入"online database b",数据库即可使用。

注意:
1、如果业务量很大,备份对主点性能影响比较大,可以提高备份周期,如10分钟,半小时,一小时等;
2、在运行过程中,请不要把备点数据库做"online",否则需要重新做dump database;
3、由于BCP,select into等操作是不记日志的,因此做这部分数据不能被备份。

Sybase RS 安装

一、Sybase复制服务器(Sybase Replication Server)安装步骤:

准备:RS12.5及以前版本需要一个ASE数据库服务器来存放RSSD数据库,可以用已存在的ASE或新建一个ASE作为RSSD的数据库服务器;RS12.6及以后版本可以使用ASA或者ASE作为RSSD的数据库服务器,若使用ASA则无需准备,安装RS时会自动创建

安装:使用setup 或 install应用程序从安装介质卸载RS产品到机器上

配置:使用rs_init 应用程序来安装配置RS

二、UNIX平台上的安装

创建sybase用户

创建sybase安装目录

执行install (图形界面)或者 install –c (文本界面) 安装RS服务器产品

设置SYBASE环境变量
sh or ksh使用 cat $SYBASE/ SYBASE.sh >> $SYBASE/.profile
csh 使用 cp $SYBASE/SYBASE.csh $SYBASE/.cshrc

执行dscp增加一个复制服务器和一个复制服务管理器的interface信息

执行rs_init 配置一个新的复制服务器(RS)

执行rsmgen 配置一个新的复制服务管理器(RSM)

三、NT平台上的安装

执行setup 安装RS服务器产品

重启机器

执行dsedit增加一个复制服务器和一个复制服务管理器的interface信息

执行rs_init 配置一个新的复制服务器

执行开始菜单中的"RSM Server设置" 配置一个新的复制服务管理器 (注意RSM Server Char Set一项最好选择iso_1)

四、RS客户端的安装

安装RS_pcclient客户端产品

如果RSM服务不在本机,用dsedit增加一个RSM服务

在sybase central菜单中选择"工具"->"连接"->"Sybase Replication Server", 然后在弹出的界面中选择RSM服务器,第一次用sa登录

在登录进去的RSM server中使用"add server"将相关ASE和RS增加进来,增加RS之前需先将其RSSD所在的ASE加进来

Sybase RS基本配置

安装配置

RSSD应该足够大,建议 RSSD data:500M RSSD log:500M,且RSSD设置为自动清日志

复制服务器配置足够大的partition

安装复制服务器后,保证稳定运行必须修改的几个参数:
set memory_limit to "256"(默认为1048576)
set sts_cachesize to "2000"(默认为100)

如果与复制服务器连接的数据库服务较多,则需要修改以下配置
set cm_max_connections to "256"(默认为64)

set um_client_connections to "100"(默认为30)

set num_threads to "1024"(默认为50)

set num_mutexes to "2048"

set num_msgqueues to "2048"

将maint登录(syslogins)在主点和复制点中的用户(user)删除,改为dbo_alias
>use PDB
sp_dropuser dbname_maint
sp_addalias dbname_maint ,dbo

>use RDB
sp_dropuser dbname_maint
sp_addalias dbname_maint,dbo

如果采用WarmStandby,建议修改以下参数:
suspend connection to RDS.RDB
alter connection to RDS.RDB set dsi_xact_group_size to "-1"
resume connection to RDS.RDB

如果在复制系统中,数据库没有新增加表,表结构也不会改变,建议采用表复制实现WarmStandby

对于复制到复制点的数据不点燃触发器(WarmStandby缺省不点燃触发器,表复制缺省点燃触发器,不管采用何种方式,建议强制指明不点燃触发器)
suspend connection to RDS.RDB
alter connection to RDS.RDB set dsi_keep_triggers to 'off'
resume connection to RDS.RDB