oracle中如何获得某个表的正在或曾经使用的sequence?

设oracle中有两个sequence分别为myseq1和myseq2.某个表test(idnumberprimarykey,namevarchar2(20));test... 设oracle中有两个sequence分别为myseq1和myseq2.
某个表test(id number primary key,name varchar2(20));
test中的id字段是用myseq1生成的.
试问:我如何查到test表id字段使用的是myseq1而不是myseq2?
展开
 我来答
yangzh_851
推荐于2017-11-24 · TA获得超过892个赞
知道小有建树答主
回答量:120
采纳率:66%
帮助的人:68.7万
展开全部
好象它们两者没有依属联系,而确实在工作中又容易遇见此类问题.
从序列的角度来思考的话,仅跟用户相关。
以下步骤可以参考:
1 从系统视图中取得所有序列的相关信息。
注意相关权限。
select sequence_name,min_value,max_value,increment_by,last_number from all_sequences
如果能够能够排除 用户A的表数据,采用了用户B的sequence来生成数据的情况,那可以加上
where sequence_owner=' '; -----适合的用户
或者从USER_SEQUENCES中提取。
2 从关心的表中提取敏感字段的最大值
select max(id) from test;
3 将两者对比。或者将上述两个查询连接到一起来查询。如果当前该表没有被插入,并且,近期没有被删除,那么,该max(id)+1=last_number ;
如果非要弄清楚的话,那就将表数据保护起来,拒绝删除数据,当发现数据插入后,观察插入的频度和事务提交后序列列值变化的大小,由此最终能判断出是哪个序列号。基于非要准确的搞清楚的前提下,使用排出法,将上述最接近的序列按照从轻度怀疑到高度怀疑的顺序,再备份的情况下,依次删除、恢复.....这样肯定能搞准。

还有一个最好的办法以后遇到这种情况就简单了。在该表上建立基于插入后的触发器,在触发器中包含上面查询思想,将max(id)+1=last_number 的序列名返回。。。。则绝对不会错
.
知识有限,在此也期盼能学习到更高级的方法。
希望能帮到你。.
llsh2009
2011-02-24 · TA获得超过3171个赞
知道小有建树答主
回答量:710
采纳率:100%
帮助的人:499万
展开全部
从USER_SEQUENCES表中找 。

SQL> desc USER_SEQUENCES;
Name Null? Type
----------------------------------------- -------- ----------------------------
SEQUENCE_NAME NOT NULL VARCHAR2(30)
MIN_VALUE NUMBER
MAX_VALUE NUMBER
INCREMENT_BY NOT NULL NUMBER
CYCLE_FLAG VARCHAR2(1)
ORDER_FLAG VARCHAR2(1)
CACHE_SIZE NOT NULL NUMBER
LAST_NUMBER NOT NULL NUMBER
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式