程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase綜合文章 >> Numeric數據類型字段出現跳號的問題

Numeric數據類型字段出現跳號的問題

編輯:SyBase綜合文章

環境: 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

問題解決.

教訓:一定要正常關機!

其實,這也是大家幫助我解決的,在些也對你們表示感謝!

本人菜鳥一只,但我一直在努力,學習也是一個過程....

發這個帖子的目的,在於拋磚引玉.

希望大家把平時遇到的問題,即使問題已經解決了,

也整理一下,貼出來,對於自己也是一個總結.

對於大家也是一個學習,交流的機會....

說不定對這個問題,還可以有更好的解決辦法呢.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved