如何解决为什么视图 V$_SEQUENCES 在 Oracle 12.1 中为空,但在 11.2、12.2、18.3、19.3 中有效?
我偶然发现了一个系统视图 V$_SEQUENCES
,它只对用户 SYS
可见。 Oracle 的 Doc ID 116883.1 How to Query Next Sequence Number 展示了如何让其他用户可以访问它:
CREATE VIEW v$sequences AS SELECT * FROM v$_sequences;
CREATE PUBLIC SYNONYM v$sequences FOR SYS.v$sequences;
GRANT SELECT ON v$sequences TO PUBLIC (or |<USER>);
CREATE SEQUENCE so.s;
SELECT sequence_name,active_flag,nextvalue,cache_size,highwater
FROM V$_SEQUENCES
WHERE sequence_name = 'S';
SEQUENCE_NAME ACTIVE_FLAG NEXTVALUE CACHE_SIZE HIGHWATER
S N (null) 20 1
如果您使用序列,它会变成 ACTIVE_FLAG=Y
并显示 NEXTVALUE
。 HIGHWATER
似乎与视图 LAST_NUMBER
的列 DBA_SEQUENCES
相同:
SELECT so.s.nextval FROM dual;
1
SELECT sequence_name,highwater
FROM V$_SEQUENCES
WHERE sequence_name = 'S';
SEQUENCE_NAME ACTIVE_FLAG NEXTVALUE CACHE_SIZE HIGHWATER
S Y 2 20 21
到目前为止,一切都很好,但它在 Oracle 12.1 中不起作用。该视图存在,与我可以访问的其他版本具有相同的定义,但只是空的。
视图基本定义为
SELECT inst_id AS inst_id,KGLNAOWN AS sequence_owner,KGLNAOBJ AS sequence_name,KGLOBT08 AS object#,decode(bitand(KGLOBT00,1),'N','Y') AS active_flag,2),'Y') AS replenish_flag,16),'Y') AS wrap_flag,KGLOBTN0 AS nextvalue,KGLOBTN2 AS min_value,KGLOBTN3 AS max_value,KGLOBTN1 AS increment_by,decode(bitand(KGLOBT09,'Y') AS cycle_flag,'Y') AS order_flag,KGLOBTN4 AS cache_size,KGLOBTN5 AS highwater,decode(KGLOBT10,1,'Y','N') AS background_instance_lock,KGLOBT02,null) AS instance_lock_flags
FROM X$KGLOB
WHERE KGLOBTYP = 6
AND KGLOBT11 = 1;
在 Oracle 12.1 中,我在 X$KGLOB 中找到了具有正确序列所有者和名称的行,它甚至具有正确的 KGLOBTYP = 6,但 KGLOBT11 = 0,这可以解释为什么视图不显示该行。但是,这个 KGLOBT11 = 0 没有任何列显示序列的下一个值。
这是怎么回事???
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。