Pse*_*oad 2 oracle sequence reset
我与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
Run Code Online (Sandbox Code Playgroud)
Jus*_*ave 11
我一般都对"清理"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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
831 次 |
| 最近记录: |