更改 currval 的 Oracle 序列为什么不删除它并重新创建?
Oracle Sequence to change currval why not just drop it and recreate?
我想增加一组序列的 CURRVAL。
一个选项是删除序列并使用等于我想要增加的值的起始值重新创建它,但是我遇到了许多建议 (here, here and here),这些建议不会删除它而是 :
- 限制访问
- 将 "increment by" 更改为任何值以将 CURRVAL 增加
- 拉一个值
- 将 "increment by" 改回 1
- 取消访问限制
一切都很好,但我想知道删除序列有什么不好?
我知道触发器会失效,但下次使用它们时它们会被重新编译 - 这真的有什么大不了的吗?
我是否忽略了什么?
当序列上或触发代码与其他 pl/sql 包之间存在大量复杂的依赖关系时,这就变得很重要了。
作为一般做法,您希望将导致无效 pl/sql 代码(存储过程、程序包和触发器代码)的情况降至最低。下次调用代码时,自动编译将按需 运行。但是如果你有一个大容量的事务系统或者一个依赖复杂的大型应用程序,那些重新编译造成的延迟(或后续异常)可能是不可接受的。
如果您的特定设置使得触发器代码非常简单且没有依赖关系,并且您可以在不会触发触发器的时间内执行 DDL,则删除并重新创建同义词可能是可以接受的,然后重新编译触发代码。
我想增加一组序列的 CURRVAL。
一个选项是删除序列并使用等于我想要增加的值的起始值重新创建它,但是我遇到了许多建议 (here, here and here),这些建议不会删除它而是 :
- 限制访问
- 将 "increment by" 更改为任何值以将 CURRVAL 增加
- 拉一个值
- 将 "increment by" 改回 1
- 取消访问限制
一切都很好,但我想知道删除序列有什么不好?
我知道触发器会失效,但下次使用它们时它们会被重新编译 - 这真的有什么大不了的吗?
我是否忽略了什么?
当序列上或触发代码与其他 pl/sql 包之间存在大量复杂的依赖关系时,这就变得很重要了。
作为一般做法,您希望将导致无效 pl/sql 代码(存储过程、程序包和触发器代码)的情况降至最低。下次调用代码时,自动编译将按需 运行。但是如果你有一个大容量的事务系统或者一个依赖复杂的大型应用程序,那些重新编译造成的延迟(或后续异常)可能是不可接受的。
如果您的特定设置使得触发器代码非常简单且没有依赖关系,并且您可以在不会触发触发器的时间内执行 DDL,则删除并重新创建同义词可能是可以接受的,然后重新编译触发代码。