Sybase自增字段跳号的解决方法

Sybase自增字段跳号原因及影响:

在Sybase数据库中如果数据库在开启的情况下,因为非正常的原因(死机、断电)而导致数据库服务进程强制结束。

那么自动增长的字段将会产生跳号的情况,再往数据表里面插入记录时,自增字段会跳到一个相当大的值上面,以至于主键的自增值极有可能被用尽,或由于数值太大,应用程序中的数据类型如int型等已无法容下这么大的值,而无法在程序里面进行相关的操作。

Sybase自增字段跳号解决办法:

如下:sybase在执行shutdown with nowait,再重启后,原来的ID值出现跳号。

如何关闭sybase时执行shutdown时,则不会出现跳号情况。

如果还未发生过跳号情况,可按如下办法解决:

1.执行 sp_chgattribute 表名, ‘identity_gap‘, 100

其中的100是凭感觉给的一个值,一般来说这个值越大性能越好,但越大,再发生数据库服务进程非正常结束时,所跳的号也就越大。

2. 若已经发生跳号,需要将表中数据bcp导出,再重建数据表,再执行1。再bcp命令导入数据。

后话:

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

《FROM:http://database.51cto.com/art/201011/235579.htm http://blog.sina.com.cn/s/blog_499ab6b20100xipp.html》

时间: 2024-11-06 03:29:52

Sybase自增字段跳号的解决方法的相关文章

PHP截取中文字符串不出现?号的解决方法[原创]

PHP截取中文字符串不出现?号的解决方法[原创] 大 | 中 | 小 [不指定 2007-8-15 18:51 | by 张宴 ] [文章作者:张宴 本文版本:v1.0 最后修改:2007.08.15 转载请注明出处:http://blog.zyan.cc] 当PHP截取中英文混合字符串时,最后一个汉字经常被拆成两半,例:截取字符串的前18个字 view plainprint? <?php $text = "1欢迎访问sina新浪播客"; $value = substr($tex

javaweb action无法跳转、表单无法跳转的解决方法

action无法跳转,表单无法跳转的解决方法 action无法跳转.表单无法跳转的原因: 说明 :在确保你项目的其它action.表单能正常跳转的情况下,查找以下3个原因. 1.确认action中有无写错,struts中有无指定action的class 如:<action name="*User" class="com.login.action.LoginAction" method="{1}">,如果后台java中没有这里class

【转】VMware-vSphere-SDK 引用内AppUtil、VimService2010、Vim25Service2010为黄色叹号的解决方法

最近用到VMware-vSphere-SDK-5.0.0-429209 来使用dotnet控制虚拟机的操作,发现引用内好多黄色叹号,附上解决方法: VMware-vSphere-SDK-5.0.0-429209\SDK\vsphere-ws\wsdl  此目录下有vim和vim25两个目录,用他们生成响应dll文件 打开Visual studio开发人员工具,依次输入如下命令:(已将wsdl文件夹复制到F盘下) wsdl /n:VimApi /o:F:\VimService.cs F:\wsdl

Entity Framework默认值字段不起作用解决方法

今日用EF添加数据时,发现表中的datatime字段的默认值不起作用,本来默认值时设置为getdate(),但添加数据后值是空. 我的代码没有为该字段指定值: tbl_City tc = new tbl_City { CityName = "Beijing", CountryId = 2 }; dbContext.tbl_City.Add(tc); dbContext.SaveChanges(); 结果: 解决方法: 设置mdex文件中对应CreatTime字段的属性 StoreGen

laravel 迁移文件中修改含有enum字段的表报错解决方法

解决方法: 在迁移文件中up方法最上方加上下面这一行代码即可: Schema::getConnection()->getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string'); 例如: public function up() { Schema::getConnection()->getDoctrineSchemaManager()->getDa

JDBC prepareStatement 存储在mysql上的datetime 时间字段报错的解决方法

遇到一个问题,网上找了很多资料 都不能解决 自己曲线救国解决了,记录一下,如果各位有更好的办法欢迎留言. 首先 我在mysql数据库上创建了一个表其中的createTime 字段用的dateTime类型(项目需要 我个人偏向bigint 毕竟做排序什么的 效率更高): 然后项目里用的JDBC ,当我使用prepareStatement时,prepareStatement.setTimestamp(6, qa.getCreateTime()); qa.getCreateTime()存的是new T

tomcat端口号被占用或者修改端口号的解决方法

一)修改端口号: 在tomcat文件中找到conf里面的server.xml 在tomcat解压后的文件中按照下图操作  打开该文件 文件打开后(如下图)Tomcat默认的8080 端口,系统默认的配置 将Tomcat服务器启动的端口修改为8081端口 这样就把原来的端口修改为8081端口,不过在修改配置文件(*.xml)后,Tomcat服务器要重新启动 修改之前的端口号: 修改之后的端口号: 重启后:访问Tomcat服务器也必须以新的访问端口去访问:http://localhost:8081/

关于jquery的serialize方法转换空格为+号的解决方法

jquery的 serialize()方法,可以对表单项进行序列化,这本来是很方便的一个功能:但是实际使用中去发现了如下问题:例如:< textarea name="content">abc 123 <  /  textarea >那么在执行 serialize()方法后,得到的却是  abc+123  这样的字符串:即jquery的序列化方法对空格进行了转义,转换成了 + 号.jquery中serialize方法的部分代码如下所示://............

oracle SQL查询number字段精度丢失之解决方法

解决办法: -- 3.3:表示原始数据 --fm9999999990.0000:表示保留到小数点后4位,若不存在则用0补位. select to_char(nvl(3.3,0),'fm9999999990.0000') as demo from dual; 原文地址:https://www.cnblogs.com/dqcer/p/9235847.html