Sybase常见问题及解决方案汇总

SYBASE常见问题

1.在运行安装程序时提示碰到找不到JAVA 虚拟机,在安装客户端时我碰到过

解决方法:由于SETUP.EXE 可以带参数,所以可以在当前目录建一个Setup.bat 批处理文件,内容如下:setup -is:javahome C:"javasoft"Sun"j2eesdk1.4_beta2"jdk"jre

或者直接在命令行运行



2.如果需要以ADO 方式连接数据库


SYABSE CLIENT 12.5 包含一个比较新的ADO OLE 驱动,选择自定义安装,选中即可



3. SYABSE SERVER端安装,如果安装时不想立即配置数据库,从菜单里选择【开始】-【程序】-【SYBASE】-【服务器配置】 报错 Invalid Command line argument ‘and ‘. 

这是SYBASE SERVER安装时的一的BUG,如果出现了报错,一般配置SERVER不会成功,可以从安装目录进去,缺省目录 C:"SYBASE"ASE-12_5"BIN"SYCONFIG.EXE



4. 默认错误日志路径,C:"SYBASE"ASE-12_5"INSTALL



5. 如果服务启动报错,或提示服务已经启动,其实你的服务没有启动

a. 这时可能由于你启动过配置工具,当服务没有启动时,启动配置工具连接服务器,配置工具好像会尝试以单用户方式启动,你可以通过命令行检测一下,ISQL –Usa –Psa_password –Syourserver 登录,如果能登录,说明是的,这时你输入SHUTDOWN可以结束服务,然后再重启服务

b. 还有可能服务正在关闭中,你性子比较急,那么请你稍候,没事干的话,你可以在那儿点击鼠标按钮刷新WINDOWS服务列表,稍候一会再重启服务

c. 如果以上情况都不是,请删除C:"SYBASE"ASE-12_5" 的一个.KRG文件,文件名一般是你的数据库服务名, 只有服务启动,就会产山这样一个文件,如果服务终止就会自动删除这个文件,如果非正常终止,这个文件可能就会得不到正常处理,手动删掉之候,再启动服务



6. 字符集设置,排序规则设置


为了支持多语言,请把服务器设置为UTF8,如果不希望大小些敏感,可以设为不区分大小写,一旦数据有了数据,是不允许修改排序规则的,字符集的修改也会导致数据库中的数据变成乱码, 请在数据库安装的时候就设置好

a.默认UTF8是没有安装的,具体安装方法如下:



c:">cd "sybase"charsets"UTF8



c:"sybase"charsets"UTF8> charset -Usa -Psa_pass -Sserver_name nocase.srt Utf8

b.安装成功后.在SQL环境中



>select name,id from syscharsets



>go



找到name为utf8对应的id(假设为190 ,utf8_nocase 为101)



设置缺省字符集

>sp_configure "default character set id",190



>go

设置缺省排序规则

>sp_configure “default sortorder id “,101

>go

重启服务器

在a.UTF8安装好之后也可以直接通过服务器配置工具配置语言,注意,先选择语言UTF8保存,然后再选择排序规则,这时候排序规则可选的只有两项与UTF8相关的了,选择NO CASE 的那一个, 如果不先保存语言设置,排序规则好像没有立即刷新


注意:如果你需要安装不区分大小写的UTF8直接参照如上步骤,如果你开始希望选择UTF8二进制的,那么c:"sybase"charsets"UTF8> charset -Usa -Psa_pass -Sserver_name binary.srt Utf8

这时你设置排序为101就不会起作用,如果你覆盖安装charset -Usa -Psa_pass -Sserver_name nocase.srt Utf8 也不行,我昨天就是碰到这个情况,后来重装的



7. 为数据库分配最大内存


默认是动态内存,为你的数据库分配最大内存后,数据库启动后优先申请固定内存,从而保证数据库性能。 不要超过物理内存的3/4 (估计值) 这个可以根据实际情况估计一下,如果你只作SYBASE SERVER可以大一点,如果有多个应用,就少一点,更重要的是,WINDOWS系统启动之后的剩余内存小于如果你分配的内存,那么系统服务将申请内存失败,启动不了

sp_configure "max memory ",256m



8. SYBASE SERVER12.0 与SYBASE CLIENT12.5 安装冲突

当你在已经安装了SYBASE Server12.0 的机器上安装SYBASE Client 12.5 那么[恭喜你],你的SYBASE 将起不来了,解决方法如下

原因是:由于12.5的CLIENT默认安装的JAVA虚拟机版本跟SERVER12.0 不一样,并且把他加到WINDOWS环境变量里去了。具体解决办法,在WIDNOWS环境变量里把SYBASE CLIENT的与JRE相关的环境变量去掉(记下来),特别注意的是SYBASE这个环境变量,CLIENT安装之后,就指向CLIENT端安装目录了,把他改为SERVER端安装目录,然后重启,这样的结果是SERVER可启动了,但CLIENT 的JAVA CENTER启动不了了,JAVA CENTER 启动是通过C:"sybase"client"sybcent41"bin"scjview.bat 批处理文件启动的,可以直接这个批处理文件,把刚刚记下来的环境变量CLIENT的设置直接添加到BAT处理文件中去,批处理文件中读取环境变量的地方替换成刚刚记下的目录.

结论:

a. 除非必要,不建议在一台机器上同时安装SERVER和CLIENT

b. 如果同时,安装请安装在不同目录

c. 在安装好SERVER端后,请保存好当前SERVER的环境变量,然后再安装CLIENT端,

d. 修改批处理文件前,如果不了解批处理,请先了解一下批处理的一些基本命令



9. 数据库设备

a. 创建数据库前,必须先创建数据库设备

b. 建立数据库时必须先选择数据库设备,请把日志和数据分开存放,有利与数据库的备份与恢复

c. 建立系统设备,为系统存储过程和临时表扩容, 因为大量数据库查询操作时,统统利用临时表缓存的



10. 数据库的备份与恢复

首先启动数据库备份服务

dump database database_name to “c:" database_name.bak”

load database database_name from “c:" database_name.bak”

另外在转储的时候,可以截断日志然后再备份,以减少文件大小

一些常用命令如下:

对整个数据库进行转储

dump database

对日志进行转储

dump transaction 

数据库发生设备故障后转储事务日志

dump transaction with no_truncate 

截断日志不备份,然后复制整个数据库

dump transaction with truncate_only

dump database

因为日志空间不足,导致通常方法失败后,截断日志,然后复制真格数据库

dump transaction with no_log

dump database

更详细的命令可以参考SYBASE手册,其官方网站上有



11. 数据的转储与恢复



数据导入还可以用SYBASE 的BCP程序来完成。在SYBASE 端添加一个SERVER,指向SQL SERVER 的地址和端口。然后用

bcp database_name.owner.table_name out datafile_name -c -t'|' -Usa -Ppwd -Ssqlsrv -b5000


可以将SQL SERVER的表table_name的数据导出成文本格式的文件。然后用



bcp database_name.owner.table_name in datafile_name -c -t'|' -Usa -Ppwd -Ssybsrv -b5000

参数说明: b 表示每5000 行写日志,如果没有这个参数,数据量很大时,会频繁写日志,会导致日志空间很快用完 t 指定制表符,当数据库里有中文时,如果不用制表符会出现导不进去的情况



12 客户端查询管理器乱码

修改安装目录"locals"locals.dat 查找[NT] 项的最后一行

locale = default, us_english, iso_1 改为

locale = default, us_english, utf8 即可



13.当客户端启用了utf8后,有些中文字符插入不进数据库


可能是由于SYBASE 与微软操作系统在UTF8之间的兼容性问题,SYBASE没有给与解决办法, 可以通过补空格的方法

另外如果只有中文,可以设为CP936,或者默认ISO_1 

当然,如果你不用考虑服务器支持多语言字符集,服务器也是CP936最彻底了



14. CLIENT CENTRAL 的好处

可以直接浏览数据表的数据

可以直接查看VIEW的脚本,不过好像有BUG,如果你包含中文或者注释行,显示有时将会碰到问题,没关系,你可以通过SP_HELPTEXT YOUR_VIEW 得到视图的脚本,还可以通过GERERATE DDL看到脚本



15 查询管理器 SQL ADVANTAGE

不用也吧,JAVA写的,显示极慢,如果你有的耐性的话可以使用,否则可选择第三方的工具,推荐一个Embarcadero DBArtisan 7.2.1 ,可以支持多种数据库



16 命令查询表属性的几个系统存储过程

sp_helptext

sp_columsn

sp_tables

sp_who

等等,对MSSQLSERVER适用(MSSQLSERVER下用不着,无论企业管理器,还是查询管理都很好用),当然,如果你有了Embarcadero DBArtisan 你就可以抛弃CLIENT CENTRAL 和SQL ADVANTAGE 这个两个又占资源又其慢的东西,也不需要用这几个系统存储过程



17. 关于ADO OLE使用的注意

a. 先选择正确的驱动

b. 切换到最后一页,填写SERVER NAME 和端口, 默认端口5000, (关键点:一般驱动是不需要切换到这个业签来的,第一次使用SYBASE OLE 驱动可能碰到这个问题)

c. 输入用户名,密码,选择数据库,当然这些也可以在上面的页面页,然后再返回这个页面测试连接 (反正要回来,还不如直接在这个页面修改)



18 .关于日志的一些注意事项

我们知道,SYBASE SQL Server用事务(Transaction)来跟踪所有数据库的变化。事务是SQL Server的工作单元。一个事务包含一条或多条作为整体执行的T-SQL语句。每个数据库都有自己的事务日志(Transaction Log),即系统表(Syslogs)。事务日志自动记录每个用户发出的每个事务。日志对于数据库的数据安全性、完整性至关重要,我们进行数据库开发和维护必须熟知日志的相关知识。



一、SYBASE SQL Server 如何记录和读取日志信息

SYBASE SQL Server是先记Log的机制。每当用户执行将修改数据库的语句时,SQL Server就会自动地把变化写入日志。一条语句所产生的所有变化都被记录到日志后,它们就被写到数据页在缓冲区的拷贝里。该数据页保存在缓冲区中,直到别的数据页需要该内存时,该数据页才被写到磁盘上。若事务中的某条语句没能完成,SQL Server将回滚事务产生的所有变化。这样就保证了整个数据库系统的一致性和完整性。



二、日志设备

Log和数据库的Data一样,需要存放在数据库设备上,可以将Log和Data存放在同一设备上,也可以分开存放。一般来说,应该将一个数据库的Data和Log存放在不同的数据库设备上。这样做有如下好处:一是可以单独地备份Backup事务日志;二是防止数据库溢满;三是可以看到Log的空间使用情况。


所建Log设备的大小,没有十分精确的方法来确定。一般来说,对于新建的数据库,Log的大小应为数据库大小的30%左右。Log的大小还取决于数据库修改的频繁程度。如果数据库修改频繁,则Log的增长十分迅速。所以说Log空间大小依赖于用户是如何使用数据库的。此外,还有其它因素影响Log大小,我们应该根据实际操作情况估计Log大小,并间隔一段时间就对Log进行备份和清除。



三、日志的清除



随着数据库的使用,数据库的Log是不断增长的,必须在它占满空间之前将它们清除掉。清除Log有两种方法:


1.自动清除法


开放数据库选项 Trunc Log on Chkpt,使数据库系统每隔一段时间自动清除Log。此方法的优点是无须人工干预,由SQL Server自动执行,并且一般不会出现Log溢满的情况;缺点是只清除Log而不做备份。



2.手动清除法

执行命令“dump transaction”来清除Log。以下两条命令都可以清除日志:


dump transaction with truncate_only

dump transaction with no_log

通常删除事务日志中不活跃的部分可使用“dump transaction with trancate_only”命令,这条命令写进事务日志时,还要做必要的并发性检查。SYBASE提供“dump transaction with no_log”来处理某些非常紧迫的情况,使用这条命令有很大的危险性,SQL Server会弹出一条警告信息。为了尽量确保数据库的一致性,你应将它作为“最后一招”。

以上两种方法只是清除日志,而不做日志备份,若想备份日志,应执行“dump transaction database_name to dumpdevice”命令。



四、管理庞大的事务

有些操作会大批量地修改数据,如大量数据的修改(Update)、删除一个表的所有数据(Delete)、大量数据的插入(Insert),这样会使Log增长速度很快,有溢满的危险。下面笔者给大家介绍一下如何拆分大事务,以避免日志的溢满。

例如执行“update tab_a set col_a=0”命令时,若表tab_a很大,则此Update动作在未完成之前就可能使Log溢满,引起1105错误(Log Full),而且执行这种大的事务所产生的独占锁(Exclusive Table Lock),会阻止其他用户在执行Update操作期间修改这个表,这就有可能引起死锁。为避免这些情况发生,我们可以把这个大的事务分成几个小的事务,并执行“dump transaction”动作。

上例中的情况就可以分成两个或多个小的事务:

update tab_a set col_a=0 where col_b>x

go

dump transaction database_name with truncate_only

go


update tab_a set col_a=0 where col_b <=x

go


dump transaction database_name with truncate_only

go


这样,一个大的事务就被分成两个较小的事务。



按照上述方法可以根据需要任意拆分大的事务。若这个事务需要备份到介质上,则不用“with truncate_only”选项。若执行“dump transaction with truncate_only”命令,应该先执行“dump database”。以此类推,我们可以对表删除、表插入等大事务做相应的拆分。






免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空