DB2 for AS/400中删除记录后新插入记录的RRN能否递增?
DB2 for AS/400中实现RRN递增的方案
能实现,但需要根据需求选择对应的操作方式,以下是两种可行方案:
方案一:使用IDENTITY列替代原生RRN
原生RRN(相对记录号)是DB2 for i(原AS/400)默认分配的物理存储标识,它会复用已删除记录的空间位置,这是系统优化存储的默认行为。如果需要严格递增的序列值,更推荐创建带IDENTITY属性的业务列,示例SQL如下:
CREATE TABLE YOUR_TABLE ( SEQ_ID INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1), -- 其他业务列 NAME VARCHAR(50), CREATE_DATE DATE );
该列的值会严格递增,不会复用已删除记录的ID,即使删除之前的记录,新插入的ID也会持续向上累加,完全满足递增需求。
方案二:修改表的REUSEDLT属性
如果必须依赖原生RRN实现递增,可以修改表的REUSEDLT(重用已删除记录空间)属性为*NO,示例SQL如下:
ALTER TABLE YOUR_TABLE ALTER REUSEDLT *NO;
当REUSEDLT设为*NO时,DB2 for i不会复用已删除记录的物理存储位置,新插入的记录会被分配到新的位置,对应的RRN就会持续递增。
注意:该设置会导致表占用的存储空间不断增大,已删除的记录空间无法自动回收,需要定期执行
REORG TABLE YOUR_TABLE来重组表、释放闲置空间,否则可能影响系统性能和存储利用率。
补充说明:原生RRN的设计定位是物理存储的定位标识,并非用于业务场景的递增序列,因此从业务稳定性和可维护性角度,优先推荐方案一。
内容的提问来源于stack exchange,提问作者suman biswas
相关产品推荐
相关产品推荐

