環境: 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
問題解決.
教訓:一定要正常關機!
其實,這也是大家幫助我解決的,在些也對你們表示感謝!
本人菜鳥一只,但我一直在努力,學習也是一個過程....
發這個帖子的目的,在於拋磚引玉.
希望大家把平時遇到的問題,即使問題已經解決了,
也整理一下,貼出來,對於自己也是一個總結.
對於大家也是一個學習,交流的機會....
說不定對這個問題,還可以有更好的解決辦法呢.