【问题标题】:Cleaning Up Oracle Sequences清理 Oracle 序列
【发布时间】:2011-02-09 17:30:30
【问题描述】:

我曾广泛使用 SQL Server,但对 Oracle 的经验很少。我的任务是“清理”Oracle 数据库中的序列,但不知道如何安全地进行。

我需要确定表中实际的最大值(比如 ID = 105)。然后查看该 ID 的下一个序列是什么。如果是106,那么一切都会好的。如果是 110,那么我需要将它重置回 106。

我可以安全地删除一个序列然后重新创建它还是会破坏已经存在的主键?我猜这不会是一个问题,但在我提升别人的系统之前,我想问一下。

这是我要使用的命令

Drop Sequence blah.foo_seq
Create Sequence blah.foo_seq Start WIth 106 Min 1 Max 2147483647 yada yada

【问题讨论】:

  • 如果你真的需要连续的数字,序列不是合适的工具。

标签: oracle sequence reset


【解决方案1】:

我通常对“清理”Oracle 序列的需要持谨慎态度。由于 Oracle 序列不能用于生成无间隙值,如果 110 会导致应用出现问题,则需要解决更大的问题。

删除序列对主键没有影响。但它确实使引用该序列的任何对象无效并删除任何特权授予。您可以在重新创建序列后重新编译代码,删除权限可能会出现问题。

避免需要处理丢失权限的另一种方法是更改​​ INCREMENT BY 参数以减小序列值,即

ALTER SEQUENCE foo_seq
  INCREMENT BY -4;

SELECT foo_seq.nextval
  FROM dual;

ALTER SEQUENCE foo_seq
  INCREMENT BY 1;

【讨论】:

    猜你喜欢
    • 2020-11-23
    • 2015-04-05
    • 1970-01-01
    • 2016-07-01
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    相关资源
    最近更新 更多