当前位置: 代码迷 >> Sybase >> SyBase 常见有关问题
  详细解决方案

SyBase 常见有关问题

热度:10419   发布时间:2013-02-26 00:00:00.0
SyBase 常见问题
1. Sybase数据库日志满
    碰到这种情况,常会出现能查询数据,但无法更新数据,启动事务等。在代码中跟踪可以发现,连接能够打开,但事务却无法开启。常会提示“Connection to Sybase server has been lost. All active transactions have been rollbacked”的错误信息。
    解决办法:
    若是开发数据库,则直接清除日志即可。  若是正式数据库:建议备份当前日志  再清空日志,扩日志设备及日志数据库。清空日志的语句为『dump   transaction   database_name   with   no_log 』

2.Sybase中文乱码
    出现这种情况的原因是sybase的服务器字符集不支持中文或是客户端的字符集与服务端字符集不一致。可以考虑更改sybase的默认字符集。在Sybase12.5的版本中支持中文的字符集有CP936、EUCGB、UTF-8和GB18030。这里我们针对Sybase服务器字符集不支持中文给出解决办法:
   解决办法(安装cp936字符集):
   假设sybase的安装路径为"D:\Sybase"。
   (1)D:\>cd \sybase\charsets\cp936
   (2) D:\sybase\charsets\cp936> charset -Usa -Psa_pass -Sserver_name binary.srt cp936
   (3) 在InterActiveSQL中执行『select name,id from syscharsets』,需注意的是这里要选择在“master”数据库下执行,第4步也是。找到name为cp936的ID,假定是171。
    (4)在InterActiveSQL中执行『sp_configure 'default character set id',171』
     (5) 重启Sybase服务两次。因为第一次启动后会自动结束掉,所以需要重启第二次。 
3.Sybase自增字段跳号处理
跳号原因及影响:
     在Sybase数据库中如果数据库在开启的情况下,因为非正常的原因(死机、断电)而导致数据库服务进程强制结束。
那么自动增长的字段将会产生跳号的情况,再往数据表里面插入记录时,自增字段会跳到一个相当大的值上面,以至于主键的自增值极有可能被用尽,或由于数值太大,应用程序中的数据类型如int型等已无法容下这么大的值,而无法在程序里面进行相关的操作。

解决办法:
如果还未发生过跳号情况,可按如下办法解决:
    1.执行【 select 'sp_chgattribute ' + name + ', ''' + 'identity_gap' + '''' + ', 60 go'
      from sysobjects
      where type='U'】。其中的60是凭感觉给的一个值,一般来说这个值越大性能越好,但越大,再发生数据库服务进程非正常结束时,所跳的号也就越大。
    2.对1执行的结果,拷贝到SQL编辑区域,再执行。
若已经发生跳号,需要将表中数据导出,再重建数据表,再执行1和2。再导入数据。

后话:
    Sybase自增字段有个最大的问题是,再移植数据库时,如果是按自增主键进行关联的数据表,在数据重新导入后,可能出现主从表的外键无法关联的情况,我是开始时没预料到这样的情况,现木已成舟,没有办法了。 以后还是要慎用自增字段作为主键。
4.从sybase数据库中读取图片无法完整显示
原因:
由于其存取大文件的默认大小为32K,所以导致数据不能全部读出,所以大于32k的图片就只能显示部分。
解决办法
非常简单,只需要在你响应的sql语句之前,再加上【set   textsize   3000000  】就OK了。