【问题标题】:DB2 auto increment changed by itself after restartedDB2 自动增量在重新启动后自行更改
【发布时间】:2013-04-22 11:35:43
【问题描述】:

每次我重新启动我的 DB2 服务时,自动增量字段总是自行更改, 例如:在我重新启动之前,自动增量值是13,并且它增加了1,并且在我重新启动后它总是变成31并且它总是增加20 知道是什么原因造成的吗?

每次我重新启动我的 Db2 服务时,我都必须执行这个命令

ALTER TABLE <table> ALTER COLUMN <column> RESTART WITH 1

【问题讨论】:

    标签: sql db2


    【解决方案1】:

    DB2 具有生成值的缓存,以减少生成值的开销(减少 IO)。此缓存在内存中,并根据请求分配值。

    在创建/更改表时查看缓存选项。默认缓存值为 20。

    了解序列在 DB2 中的工作方式很重要。序列与生成的值/标识列共享许多概念。

    【讨论】:

    • 我尝试使用此函数更改表 ALTER TABLE INVENTORY ALTER COLUMN ID RESTART WITH 11 CACHE 1;但它似乎不是正确的格式
    【解决方案2】:

    来自W3schools

    “自动增量允许在向表中插入新记录时生成唯一编号。”

    这是您唯一可以期待的:唯一(=非冲突)数字。这些是如何生成的则留给 DBMS。你不能期望一个没有任何间隔的数列。

    例如,出于性能原因,DBMS 可能会选择“预分配”十个数字(23..32、33..42、...)的块,因此自动递增字段只能递增每(最多)十个记录。如果您有一个INSERT 语句,它只将 5 条记录插入到新创建的表中,它可以“获取 10 个数字的块”(0..9),使用它的前五个值(0..4)并剩下的不用。通过获取这一个数字块,计数器从 0 增加到 10。因此,下一个获取块的 INSERT 语句将获取范围从 10 到 19 的数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 2019-03-04
      • 1970-01-01
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多