我们在 Db2 数据库中使用序列。最近,我们将数据从 AIX 服务器迁移到了 Linux 服务器。在此期间,该序列的最新编号没有移动到 Linux 系统。结果,我们现在看到重复值。
以下是我们如何使用序列:
SELECT NEXTVAL FOR SEQ_YFS_ORDER_NO FROM SYSIBM.SYSDUMMY1
Linux 上序列的当前值为 100092142。如何将其更新为 AIX 系统上的当前值,即 (100110960)?
我们在 Db2 数据库中使用序列。最近,我们将数据从 AIX 服务器迁移到了 Linux 服务器。在此期间,该序列的最新编号没有移动到 Linux 系统。结果,我们现在看到重复值。
以下是我们如何使用序列:
SELECT NEXTVAL FOR SEQ_YFS_ORDER_NO FROM SYSIBM.SYSDUMMY1
Linux 上序列的当前值为 100092142。如何将其更新为 AIX 系统上的当前值,即 (100110960)?
您可以使用ALTER SEQUENCE修改序列。ALTER SEQUENCE 提供的一个选项是使用特定值重新启动它。尝试这样的事情:
ALTER SEQUENCE SEQ_YFS_ORDER_NO RESTART WITH 100110960
另请注意,通常会缓存序列号。这可能会导致差距,并可能导致迁移期间出现问题。
使用以下查询从 DB2 数据库中获取下一个序列值。
SELECT NEXT VALUE FOR "Sequence_name" FROM SYSIBM.SYSDUMMY1
解决问题
ALTER SEQUENCE SEQ_YFS_ORDER_NO INCREMENT BY (100110960-100092142);
SELECT SEQ_YFS_ORDER_NO FROM dual;
ALTER SEQUENCE SEQ_YFS_ORDER_NO INCREMENT BY 1;
在备份数据库之前,您也可以创建一个存储过程以将 current_value 设置为“START WITH”到您的所有 SEQUENCES,因此当您进行恢复时,它们将以您想要的开始进行恢复。