none
sys.objects的id欄位是否會爆掉 RRS feed

  • 問題

  • 因為業務需求

    資料庫的table,每日均需刪除後再重建(主要是避免欄位的新增刪除,欄位型態的改變),

    且因資料庫每一個物件(table view ...)均會紀錄相關資訊於sys.objects(SQL SERVER 2000為sysobjects),而該系統TABLE的ID欄位為物件識別碼,為資料庫物件的唯一id,

    但該ID欄位的型態為INT.

    故想請問,因每日刪除再重建,不知是否會發生物件識別碼爆掉情形發生,因INT型態是有上限的

    那當爆掉時,要如何處理?

    SQL SERVER 2000及SQL SERVER 2005均需要解決方案,感謝.

     

     

    2008年2月19日 上午 09:45

解答

  • int 這個資料型別的大小是:-2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647),假設 object_id 這個欄位一天的變化量是 10,000 次,一年以 365 天來計算,需要耗費 588 (2,147,483,647 / 10,000 / 365) 年,才有辦法用完

     

    個人是不會去考慮這個杞人憂天的問題,畢竟 Microsoft SQL Server 的設計團隊在設計之初,會採用 int,自然有它的道理,比方說,為什麼不改用 bigint ,這樣不是可以儲存更多的資料,從 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807) ?

    2008年2月26日 上午 10:18
    版主

所有回覆

  • int 這個資料型別的大小是:-2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647),假設 object_id 這個欄位一天的變化量是 10,000 次,一年以 365 天來計算,需要耗費 588 (2,147,483,647 / 10,000 / 365) 年,才有辦法用完

     

    個人是不會去考慮這個杞人憂天的問題,畢竟 Microsoft SQL Server 的設計團隊在設計之初,會採用 int,自然有它的道理,比方說,為什麼不改用 bigint ,這樣不是可以儲存更多的資料,從 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807) ?

    2008年2月26日 上午 10:18
    版主
  • 那如果真的發生此情形(我比較杞人憂天),該如何處理,,以最快最佳的速度及方法,令資料庫仍繼續正常運作下去

    2008年2月27日 上午 01:37