[20150401]关于sequence问题.txt

简介: [20150401]关于sequence问题.txt --昨天别人关于sequence问题,要使用sequence保持连续实际上很困难,更多是关于跳号的问题,实际上这些都是无法避免的.

[20150401]关于sequence问题.txt

--昨天别人关于sequence问题,要使用sequence保持连续实际上很困难,更多是关于跳号的问题,实际上这些都是无法避免的.
--自己也做一些测试:

1.建立测试环境:
SCOTT@test> @ver1

PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.3.0     Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

SCOTT@test> create sequence seq2;
Sequence created.

SCOTT@test> select * from dba_sequences where sequence_name = 'SEQ2' and sequence_owner=user;
SEQUENCE_OWNER                 SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
------------------------------ ------------------------------ ---------- ---------- ------------ - - ---------- -----------
SCOTT                          SEQ2                                    1 1.0000E+28            1 N N         20           1

--缺省定义cache=20,增1.  CYCLE_FLAG=N, ORDER_FLAG =N.

SCOTT@test> select seq2.nextval from dual;
                      NEXTVAL
-----------------------------
                            1

SCOTT@test> select seq2.nextval from dual;
                      NEXTVAL
-----------------------------
                            2

SCOTT@test> select * from dba_sequences where sequence_name = 'SEQ2' and sequence_owner=user;

SEQUENCE_OWNER                 SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
------------------------------ ------------------------------ ---------- ---------- ------------ - - ---------- -----------
SCOTT                          SEQ2                                    1 1.0000E+28            1 N N         20          21

--使用后LAST_NUMBER=21,也就是使用20完成后,下次从21开始.

2.测试异常关机的情况:

SYS@test> shutdown abort ;
ORACLE instance shut down.

SCOTT@test> select * from dba_sequences where sequence_name = 'SEQ2' and sequence_owner=user;

SEQUENCE_OWNER                 SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
------------------------------ ------------------------------ ---------- ---------- ------------ - - ---------- -----------
SCOTT                          SEQ2                                    1 1.0000E+28            1 N N         20          21


SCOTT@test> select seq2.nextval from dual;
   NEXTVAL
----------
        21


SCOTT@test> select seq2.nextval from dual;
   NEXTVAL
----------
        22

--可以发现出现了跳号.

3.测试正常关机的情况:

SCOTT@test> select * from dba_sequences where sequence_name = 'SEQ2' and sequence_owner=user;

SEQUENCE_OWNER                 SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
------------------------------ ------------------------------ ---------- ---------- ------------ - - ---------- -----------
SCOTT                          SEQ2                                    1 1.0000E+28            1 N N         20          23

--可以发现一个奇特的特性,正常关机是可以保证取号连续的.也就是讲在正常关机的情况下,系统会更新sys.seq$表.

SCOTT@test> select seq2.nextval from dual;
   NEXTVAL
----------
        23
SCOTT@test> select seq2.nextval from dual;
   NEXTVAL
----------
        24

4.刷新共享池呢?
SCOTT@test> alter system flush shared_pool;

System altered.

SCOTT@test> select * from dba_sequences where sequence_name = 'SEQ2' and sequence_owner=user;
SEQUENCE_OWNER                 SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER
------------------------------ ------------------------------ ---------- ---------- ------------ - - ---------- -----------
SCOTT                          SEQ2                                    1 1.0000E+28            1 N N         20          43


--可以推断刷新共享池以后,也会出现跳号情况.
SCOTT@test> select seq2.nextval from dual;
   NEXTVAL
----------
        43

SCOTT@test> select seq2.nextval from dual;
   NEXTVAL
----------
        44


5.如何知道现在系统那些顺序号在使用.
dba_sequences之类的视图是查询seq属性的,并无法确定那些正在使用的seq.

SCOTT@test> select distinct KGLHDNSP,KGLHDNSD from x$kglob;
  KGLHDNSP KGLHDNSD
---------- ----------------------------------------------------------------
         0 SQL AREA
         4 INDEX
         1 TABLE/PROCEDURE
         3 TRIGGER
        52 SCHEDULER EARLIEST START TIME
        64 EDITION
        69 DBLINK
         2 BODY
        79 ACCOUNT_STATUS
        10 QUEUE
        23 RULESET
        24 RESOURCE MANAGER
        73 SCHEMA
        74 DBINSTANCE
        51 SCHEDULER GLOBAL ATTRIBUTE
        75 SQL AREA STATS
        82 SQL AREA BUILD
         5 CLUSTER
        18 PUB SUB INTERNAL INFORMATION
19 rows selected.

select  * from x$kglob a where kglobtyd='SEQUENCE';
--很奇怪对应的KGLHDNSP,KGLHDNSD是1,TABLE/PROCEDURE.

SCOTT@test> column VIEW_DEFINITION format a100
SCOTT@test> select * from V$FIXED_VIEW_DEFINITION where view_name like '%_SEQUENCES%';
VIEW_NAME                      VIEW_DEFINITION
------------------------------ ----------------------------------------------------------------------------------------------------
GV$_SEQUENCES                  select inst_id, KGLNAOWN,KGLNAOBJ,KGLOBT08,decode(bitand(KGLOBT00,1),0,'N','Y'),decode(bitand(KGLOBT
                               00,2),0,'N','Y'),decode(bitand(KGLOBT00,16),0,'N','Y'),KGLOBTN0,KGLOBTN2,KGLOBTN3,KGLOBTN1,decode(bi
                               tand(KGLOBT09,1),0,'N','Y'),decode(bitand(KGLOBT09,2),0,'N','Y'),KGLOBTN4,KGLOBTN5,decode(KGLOBT10,1
                               ,'Y','N'),decode(KGLOBT10,1,KGLOBT02,null)from X$KGLOB where KGLOBTYP = 6 and KGLOBT11 = 1

V$_SEQUENCES                   select  SEQUENCE_OWNER , SEQUENCE_NAME , OBJECT# , ACTIVE_FLAG , REPLENISH_FLAG , WRAP_FLAG , NEXTVA
                               LUE , MIN_VALUE , MAX_VALUE , INCREMENT_BY , CYCLE_FLAG , ORDER_FLAG , CACHE_SIZE , HIGHWATER , BACK
                               GROUND_INSTANCE_LOCK , INSTANCE_LOCK_FLAGS from GV$_SEQUENCES where inst_id = USERENV('Instance')

--有一个内部视图可以访问,其实其基表就是 X$KGLOB.如果你查询dba_objects无法找到对应的视图的.也就是oracle没有放出来.

SYS@test> column SEQUENCE_NAME format a20
SYS@test> select * from sys.V$_SEQUENCES;
SEQUENCE_OWNER  SEQUENCE_NAME           OBJECT# A R W  NEXTVALUE  MIN_VALUE  MAX_VALUE INCREMENT_BY C O CACHE_SIZE  HIGHWATER B INSTANCE_LOCK_FLAGS
--------------- -------------------- ---------- - - - ---------- ---------- ---------- ------------ - - ---------- ---------- - -------------------
SYS             IDGEN1$                    1138 Y N N   58545651          1 1.0000E+28           50 N N       1000   58595601 N
SYS             AUDSES$                     361 Y N N    9662565          1 2000000000            1 Y N      10000    9672551 N
SCOTT           SEQ2                     301422 Y N N         45          1 1.0000E+28            1 N N         20         63 N

--如果删除 KGLOBT11 = 1 条件,与查询select  * from x$kglob a where kglobtyd='SEQUENCE';的数量一致.

--也可以查询视图v$access来确认正在使用的seq.

select * from v$access where type='SEQUENCE';

目录
相关文章
|
网络安全 网络架构
ENSP-Kali环境联动
1.ENSP介绍 eNSP(Enterprise Network Simulation Platform)是一款由华为提供的免费的、可扩展的、图形化的网络设备仿真平台,主要对企业网路由器、交换机、WLAN等设备进行软件仿真,完美呈现真实设备部署实景,支持大型网络模拟,让你有机会在没有真实设备的情况下也能够开展实验测试,学习网络技术。
1810 0
ENSP-Kali环境联动
|
26天前
|
人工智能 供应链 机器人
8个AI员工,2个月卖出3000顶棒球帽:97年小伙AI出海OPC案例深度拆解
本文是「OPC一人公司通关手册」第25篇,真实拆解97年小伙用8个AI员工做跨境定制帽生意的逆袭:月成本仅千元,2个月售出3000+顶,12分钟成交4000美元订单。核心不在AI,而在他十年踩坑淬炼出的判断力——把亏300万换来的选品、市场、合规经验蒸馏成AI指令。AI是放大器,不是替代品。
|
2月前
|
人工智能 API 调度
DeepSeek V4‑Pro对接Claude Code完整实操:配置、测试、排错全流程指南
Claude Code作为一款成熟的命令行AI编程助手,内置完整的斜杠命令、工具调用、本地文件操作、多步骤任务调度能力,深受开发者喜爱。但原生使用会受到调用成本、网络环境等因素制约。DeepSeek V4‑Pro作为具备百万级上下文窗口的高性能代码模型,在大型代码库理解、复杂逻辑推演、超长文件解析场景表现突出。通过官方提供的Anthropic兼容协议,就可以把DeepSeek V4‑Pro作为底层推理基座接入Claude Code,在完全保留原有操作习惯、工具链能力不变的前提下,获得更强长文本处理能力,同时降低API调用开销。
386 3
|
6月前
|
人工智能 算法 搜索推荐
深度集成 AI 面部分析 API 的技术路径与实践
玩美移动AI面部分析API,支持亚像素级关键点追踪、肤色量化(Hex/ITA)及语义化脸型/五官识别,输出结构化3D面部数据。开发者可快速集成,实现智能粉底匹配、脸型自适应推荐等超个性化美妆场景,跨端一致、开箱即用。(239字)
334 6
|
6月前
|
SQL 算法 关系型数据库
【MySQL百日打怪升级第10天】JOIN的底层原理与优化:NLJ、Hash Join 与 Merge Join
本文系统解析MySQL三大JOIN算法:NLJ(含Simple/Index/Block变体)、8.0.18引入的Hash Join(O(N+M)复杂度,专治无索引大表连接),以及面试常考但MySQL原生不支持的Sort-Merge Join,附实战EXPLAIN识别与优化指南。(239字)
468 5
|
6月前
|
NoSQL Unix Linux
别再死记硬背了!一文扒光 I/O 多路复用的底裤(Epoll/Select/Poll)
本文深入剖析I/O多路复用本质:以“一个服务员服务百桌客人”类比,讲清select/poll/epoll核心差异;揭秘红黑树+就绪队列如何实现O(1)高效通知;厘清LT/ET触发模式与同步/异步误区;直击高并发内存、上下文切换、锁竞争三大痛点。助你面试不背书,架构有底气!(239字)
418 3
|
8月前
|
弹性计算 人工智能 Linux
阿里云服务器使用指南:新用户必看,少走 90% 弯路
2026阿里云服务器新手指南:详解ECS与轻量应用服务器区别,推荐99%新手选轻量(2核2G仅38元/年);涵盖选购、远程连接、WordPress/OpenClaw一键部署、安全加固及故障排查,助你少走90%弯路!
|
人工智能 算法 调度
端侧宠物识别+拍摄控制智能化:解决设备识别频次识别率双低问题
随着宠物成为家庭重要成员,其影像创作需求激增。传统相机“人脸优先”逻辑难以应对宠物拍摄的复杂场景,如毛发模糊、动态多变、光照反差大等。本文基于端侧AI与影像工程经验,系统梳理宠物识别驱动的对焦曝光重构技术,结合算法与产业实践,构建从检测到参数调度的完整解决方案,推动拍摄技术向“宠物优先”转型。
656 0
|
关系型数据库 MySQL 网络安全
vulnhub靶机实战_DC-7
本文介绍DC-7靶机渗透测试全过程,包括靶机下载、VMware导入、网络配置、Nmap扫描发现开放80和22端口,通过信息搜集获取数据库凭证,尝试登录SSH成功,获得系统访问权限。适合网络安全学习者实践渗透流程。
674 0
|
敏捷开发 存储 SQL
Quick BI × 宜搭:低代码敏捷开发与专业数据分析的完美融合,驱动企业数字化转型新范式
钉钉低代码平台宜搭与瓴羊QuickBI深度融合,提供前端敏捷构建+后端智能决策的解决方案。通过无缝对接的数据收集与分析、一站式数据分析及报表嵌入等功能,实现业务与数据双重赋能。
1335 3