Sybase自增字段跳号处理

跳号原因及影响:
     在Sybase数据库中如果数据库在开启的情况下,因为非正常的原因(死机、断电)而导致数据库服务进程强制结束。
那么自动增长的字段将会产生跳号的情况,再往数据表里面插入记录时,自增字段会跳到一个相当大的值上面,以至于主键的自增值极有可能被用尽,或由于数值太大,应用程序中的数据类型如int型等已无法容下这么大的值,而无法在程序里面进行相关的操作。

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

后话:
    Sybase自增字段有个最大的问题是,再移植数据库时,如果是按自增主键进行关联的数据表,在数据重新导入后,可能出现主从表的外键无法关联的情况,我是开始时没预料到这样的情况,现木已成舟,没有办法了。 以后还是要慎用自增字段作为主键。


create   table   mytable   (IdNum   numeric(12,0)   identity)  
  with   identity_gap   =   1


分析原因: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

问题解决.

教训:一定要正常关机!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值