数据库中有numeric数据类型的字段问题 |
| [ 作者:佚名 转贴自:网络转载 阅读次数:58 更新时间:2007-10-4 13:30:00 录入:刘光勇 ] 热 |
|
|
|
问题描述: 今天早上开服务器,启动SYBASE服务时,感觉比平时慢了许多. qT%A1;L/ 查看NT日志,有一条' >L* N#4FC wPGJ ;+" Sybase SQLServer _ YESKY 服务因 13 服务性错误而停止。 ' 9veutSW: 晕了,昨天晚上没有服务就关服务器了? 服务起来了,当时检查数据库也没发现什么问题.. @6LA}Hg 上班了,有一道工序的员工反应应用程序出现: 'XX值超出最大范围,请与管理员联系' . 检查相应表里的数据,(该表里有一个字段为numeric,设为自动加1,字段定义为 test1 numeric(10,0) IDENTITY ,) 表现该字段最大值为5028502,而它下面比它小的那个字段值为28501,将值为5028502的这条记录删除,再来,最大值成了5028503.删了再来,5028504. 不行了,看来出问题了.... `c!C 5D]Q B%l3<p; 经多方求教,问题已经得到解决,现写出对问题的分析及解决办法,共大家参考: 5Auv\/_ = }.qZ "+|$b 出现这个错误与SYBASE处理IDENTITY的策略有关.SYBASE在启动时会取出一段值放在内存中,IDENTITY是从内存中取的,在关机时,再写回到数据库中,如果非正常关机,则,,, )5W,1FH_ NJ@pSvHi<P 分析原因:db-server服务器出现故障或用no wait关机。导致分配ID号码块被‘烧毁’,当db-server服务器再次运行时,它会以先前写入磁盘的块的最高号码为基础,开始为下一号码块编号。依据出现故障前被指派到行中的已分配号码的多少,ID号可能会有很大的间隔。 -,GmPus 9`4s:&s2 解决方法: 在该表上加上 with identity_gap = number 参数即可. 8/p?3"%h` with identity_gap 是为表指定标识间距。此值仅替换为此表设置的标识距。 ~!8 <M pMi'7> 执行sp_chgattribute 'table_name','identity_gap',number 'N 可用sp_help 查看表的identity_gap的设置 Y8$.e&1J xOeDIFWY number的值不要设置的过低,会使性能降低 * ",R+r lmJZzU C 建议为50, 这样你的数据最大的数据间隔是50 ~!e,eh88 F xb u?>1@I 结果: 执行sp_chgattribute 'table_name','identity_gap',number Uy3FT6 0t 问题解决. }|ptj/% P!pt (T 教训:一定要正常关机! P5m?+7e %RDCuKn) esl_H w 其实,这也是大家帮助我解决的,在些也对你们表示感谢! & ?3V_Z# 本人菜鸟一只,但我一直在努力,学习也是一个过程....
|
|
|
|