中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 数据库开发 > Sybase > 综合技术
Numeric数据类型字段出现跳号的问题
作者:himimjo 时间:2007-06-30 14:26 出处:qqread 责编:月夜寒箫
              摘要:Numeric数据类型字段出现跳号的问题

环境: WIN2000 ADV , SYBASE12.5 中文版.

数据加工生产库, 白天上班应用,晚上关机.

问题描述: 今天早上开服务器,启动SYBASE服务时,感觉比平时慢了许多. 查看NT日志,有一条'

Sybase SQLServer _ YESKY 服务因 13 服务性错误而停止。 '

晕了,昨天晚上没有服务就关服务器了? 服务起来了,当时检查数据库也没发现什么问题..

上班了,有一道工序的员工反应应用程序出现: 'XX值超出最大范围,请与管理员联系' . 检查相应表里的数据,(该表里有一个字段为numeric,设为自动加1,字段定义为 test1 numeric(10,0) IDENTITY ,) 表现该字段最大值为5028502,而它下面比它小的那个字段值为28501,将值为5028502的这条记录删除,再来,最大值成了5028503.删了再来,5028504. 不行了,看来出问题了....

经多方求教,问题已经得到解决,现写出对问题的分析及解决办法,共大家参考:

出现这个错误与SYBASE处理IDENTITY的策略有关.SYBASE在启动时会取出一段值放在内存中,IDENTITY是从内存中取的,在关机时,再写回到数据库中,如果非正常关机,则,,,

分析原因:db-server服务器出现故障或用no wait关机。导致分配ID号码块被‘烧毁’,当db-server服务器再次运行时,它会以先前写入磁盘的块的最高号码为基础,开始为下一号码块编号。依据出现故障前被指派到行中的已分配号码的多少,ID号可能会有很大的间隔。

解决方法: 在该表上加上 with identity_gap = number 参数即可.

with identity_gap 是为表指定标识间距。此值仅替换为此表设置的标识距。

执行

 

sp_chgattribute 'table_name','identity_gap',number

可用sp_help 查看表的identity_gap的设置

number的值不要设置的过低,会使性能降低

建议为50, 这样你的数据最大的数据间隔是50

结果: 执行

 

sp_chgattribute 'table_name','identity_gap',number

问题解决.

教训:一定要正常关机!

其实,这也是大家帮助我解决的,在些也对你们表示感谢!

本人菜鸟一只,但我一直在努力,学习也是一个过程....

发这个帖子的目的,在于抛砖引玉.

希望大家把平时遇到的问题,即使问题已经解决了,

也整理一下,贴出来,对于自己也是一个总结.

对于大家也是一个学习,交流的机会....

说不定对这个问题,还可以有更好的解决办法呢.

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有