程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase教程 >> hibernate sybase主鍵生成出現大跨度

hibernate sybase主鍵生成出現大跨度

編輯:SyBase教程

hibernate實體在sybase數據庫下使用native或identity主鍵生成策略會出現主鍵跳躍的現象。
 現象如下:
 
Sql代碼 
select * from tablename;  
 1 
 2 
 3 
 5000000000001 
       出現此種問題一般由於sybase數據庫不正常關閉導致的。
 
       深層原因:
  由於sybase數據庫每次啟動後都會緩存一定跨度的主鍵到內存中,默認是主鍵字段長度的0.5%的跨度;如果sybase數據庫不正常關閉,導致sybase無法把當前正在使用的主鍵id的序號寫入磁盤;當數據庫再次啟動後,無法讀取上次正在使用的主鍵id,sybase會重新取下一個跨度的主鍵序號進內存。導致表主鍵的數值跨度非常大
 
 譬如說: 主鍵 id_ numeric(6,0),首次緩存到內存中的主鍵跨度從1到 1000000*0.5%,如果不正常關閉後,下次啟動數據庫加載到內存的主鍵跨度從 1000000*0.5%到 1000000*1%。
 
 解決方法:
  設定sybase數據庫每次加載到內存的主鍵序號的跨度,命令是:
Sql代碼 
sp_chgattribute tablename ,'identity_gap', 1000; 
   注意語句中的引號和逗號。

作者“loginin”
 

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