Oracle Sequence使用总结

Oracle Sequence使用总结如下:

一、定义与特点

Oracle Sequence是Oracle数据库中用于生成唯一数值的数据库对象。它常被用于为表中的记录自动产生唯一序号,如主键值,以标识记录的唯一性。其主要特点包括:

  • 由用户创建并可以被多个用户共享。
  • 允许同时生成多个序列号,且每一个序列号是唯一的。
  • 典型应用是生成主键值。
  • 使用缓存可以加速序列的访问速度。

二、创建序列

创建序列的语法如下:

CREATE SEQUENCE [schema.]sequence  
[  INCREMENT BY integer |  START WITH integer |  { MAXVALUE integer | NOMAXVALUE } |  { MINVALUE integer | NOMINVALUE } |  { CYCLE | NOCYCLE } |  { CACHE integer | NOCACHE } |  { ORDER | NOORDER }  
]  
...

其中:

  • INCREMENT BY:设置相邻两个元素之间的差值,默认为1。
  • START WITH:设置序列初始值,默认值为1。
  • MAXVALUE 和 MINVALUE:设置序列的最大值和最小值。默认情况下,递增序列的最大值为1028 - 1,最小值为1;递减序列的最大值为-1,最小值为-(1027 - 1)。
  • CYCLE 和 NOCYCLE:决定当序列值达到其最大值或最小值时是否循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值会发生错误。
  • CACHE 和 NOCACHE:决定是否在内存中预先放置一些序列值以加速访问。使用CACHE可能会因系统故障导致未使用的缓存序列值丢失。

示例
CREATE SEQUENCE seq_t_testemp INCREMENT BY -1 MINVALUE 1 MAXVALUE 999999999999 START WITH -1 CACHE 100 ORDER;

[oracle@orcl23c ~]$ sqlplus / as sysdbaSQL*Plus: Release 23.0.0.0.0 - Production on Tue Jun 25 09:13:28 2024
Version 23.4.0.24.05Copyright (c) 1982, 2024, Oracle.  All rights reserved.Connected to an idle instance.TESTUSER@FREEPDB1> CREATE SEQUENCE seq_t_testemp INCREMENT BY 1 MINVALUE 1 MAXVALUE 999999999999 START WITH 1 CACHE 100 ORDER;Sequence created.TESTUSER@FREEPDB1> select seq_t_testemp.nextval from dual;NEXTVAL
----------1TESTUSER@FREEPDB1> select seq_t_testemp.nextval;NEXTVAL
----------2-- 查询当前序列的值
TESTUSER@FREEPDB1> select seq_t_testemp.currval;CURRVAL
----------2TESTUSER@FREEPDB1> select seq_t_testemp.currval from dual;CURRVAL
----------2

三、使用序列

序列具有CURRVAL和NEXTVAL两个伪列。CURRVAL返回当前序列的值,但在第一次使用NEXTVAL初始化之后才能使用,否则会出错。NEXTVAL返回序列的下一个值,并自动增加定义的INCREMENT BY值。

可以在SELECT语句、INSERT语句、UPDATE语句等中使用序列。例如:

INSERT INTO t_testemp VALUES (seq_t_testemp .nextval, 'super', 'seqtest', 8765, SYSDATE, 32000, NULL, 30);  SELECT seq_t_testemp.currval FROM DUAL;

四、注意事项

  • 如果指定了CACHE值,Oracle会预先在内存中放置一些序列值。当cache中的值取完后,Oracle会自动再取一组到cache。但如果数据库突然不正常关闭(如使用shutdown abort),cache中的序列值可能会丢失,导致跳号。

  • 在使用NEXTVAL时,不能直接在SELECT语句后跟具体的表名,否则可能会导致序列值设置错误。应该使用FROM DUAL来查询。

  • 如果事务中途失败,使用Sequence生成的主键值可能会导致数据重复或不一致。因此,在使用时需要注意事务的完整性和错误处理。

  • 如果是RAC集群,确保sequence不出现跳号现象是一个重要考虑因素,通过合理配置sequence的CACHE和NOCACHE属性、使用KEEP CACHE选项、仔细创建和修改sequence以及定期监控和维护,可以有效减少或避免sequence的跳号现象。

五、sequence 在RAC环境

在Oracle的RAC(Real Application Clusters)环境中,确保sequence不出现跳号现象是一个重要考虑因素。以下是关于如何在RAC环境中配置Oracle sequence以减少或避免跳号的一些建议和措施:

  1. 序列的CACHE和NOCACHE属性

    • CACHE属性:当为sequence指定CACHE属性时,Oracle会预先生成并缓存一组序列号在内存中。这可以提高获取新序列号的效率。然而,在某些情况下(如数据库实例崩溃、sequence缓存被清除等),可能会导致跳号现象。
      • CACHE+NOORDER:这是RAC环境下的推荐配置。在不指定order属性的情况下,RAC默认使用此配置,并且cache的默认值通常为20。对于频繁使用的sequence,建议将cache值调整为1000~2000。
      • CACHE+ORDER:如果应用要求sequence具有严格的顺序性,则需要设置order属性。但请注意,即使设置了order属性,sequence也可能在特定情况下(如flush、instance shutdown等)出现跳号。
    • NOCACHE属性:不预先在内存中生成序列号。虽然这可以避免由CACHE引起的跳号问题,但会降低获取新序列号的效率。
  2. 序列的KEEP CACHE选项

    • 使用DBMS_SHARED_POOL.KEEP过程将sequence的cache保持在shared pool中,以防止其因LRU(最近最少使用)算法而被清除,从而减少跳号的可能性。
  3. 序列的创建和修改

    • 在创建sequence时,应仔细考虑其START WITH、INCREMENT BY、MAXVALUE、MINVALUE、CYCLE/NOCYCLE等属性,以确保其满足应用需求。
    • 使用ALTER SEQUENCE语句可以修改已存在的sequence的属性(但注意不能修改初始值)。
  4. 监控和维护

    • 定期监控sequence的使用情况和跳号现象,以便及时发现并解决问题。
    • 在进行数据库维护操作(如备份、恢复、升级等)时,应特别注意对sequence的影响,并采取适当的措施来避免跳号。

总结
在Oracle的RAC环境中,通过合理配置sequence的CACHE和NOCACHE属性、使用KEEP CACHE选项、仔细创建和修改sequence以及定期监控和维护,可以有效减少或避免sequence的跳号现象。同时,应注意根据应用的实际需求来选择合适的配置和策略。

六、dba_sequences(all_sequences)视图

在这里插入代码片

官方描述
ALL_SEQUENCES describes all sequences accessible to the current user.
Related Views

  • DBA_SEQUENCES
  • USER_SEQUENCES
select * from all_sequences where sequence_name=upper('seq_t_testemp');SQL> desc all_sequences;
Name           Type          Nullable Default Comments                                                                             
-------------- ------------- -------- ------- ------------------------------------------------------------------------------------ 
SEQUENCE_OWNER VARCHAR2(128)                  Name of the owner of the sequence                                                    
SEQUENCE_NAME  VARCHAR2(128)                  SEQUENCE name                                                                        
MIN_VALUE      NUMBER        Y                Minimum value of the sequence                                                        
MAX_VALUE      NUMBER        Y                Maximum value of the sequence                                                        
INCREMENT_BY   NUMBER                         Value by which sequence is incremented                                               
CYCLE_FLAG     VARCHAR2(1)   Y                Does sequence wrap around on reaching limit?                                         
ORDER_FLAG     VARCHAR2(1)   Y                Are sequence numbers generated in order?                                             
CACHE_SIZE     NUMBER                         Number of sequence numbers to cache                                                  
LAST_NUMBER    NUMBER                         Last sequence number written to disk                                                 
SCALE_FLAG     VARCHAR2(1)   Y                Is this a scalable sequence?                                                         
EXTEND_FLAG    VARCHAR2(1)   Y                Does this scalable sequence's generated values extend beyond max_value or min_value? 
SHARDED_FLAG   VARCHAR2(1)   Y                Is this a sharded sequence?                                                          
SESSION_FLAG   VARCHAR2(1)   Y                Is this a session sequence?                                                          
KEEP_VALUE     VARCHAR2(1)   Y                Are sequence values kept during replay after failure      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/34317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

避免新能源发电乙级资质申请中的常见错误

误解资质标准:确保完全理解并准确解读最新的资质申请标准和要求,避免因标准解读错误导致的资料准备不全或不符合要求。 资料不完整或不准确:在准备申请材料时,务必保证所有文件的完整性、真实性和准确性。错误、遗漏或虚假信息都…

关于P1077 [NOIP2012 普及组] 摆花和P1757 通天之分组背包的思考

P1077 [NOIP2012 普及组] 摆花 为什么以下这些代码都对&#xff1f; 二维&#xff0c;第二层循环升序 #include <bits/stdc.h> using namespace std; int n, m, a[102], ans, dp[102][102]; //dp[i][j]表示前i种花&#xff0c;摆放j盆的方案数 int main() {scanf(&qu…

【安全审核】音视频审核开通以及计费相关

融云控制台音视频审核入口&#xff1a;音视频审核 1 音视频审核文档&#xff1a;融云开发者文档 1 提示&#xff1a; 开发环境&#xff1a; 免费体验 7 天&#xff08;含 21 万分钟音频流和 420 万张视频审核用量&#xff09;&#xff0c;免费额度用尽后&#xff0c;将关停服务…

FineReport聚合报表与操作

一、报表类型 模板设计是 FineReport 学习过程中的主要难题所在&#xff0c;FineReport 模板设计主要包括普通报表、聚合报表、决策报表三种设计类型。 报表类型简介- FineReport帮助文档 - 全面的报表使用教程和学习资料 二、聚合报表 2-1 介绍 聚合报表指一个报表中包含多个…

运行ChatGLM大模型时,遇到的各种报错信息及解决方法

①IMPORTANT: You are using gradio version 3.49.0, however version 4.29.0 is available, please upgrade 原因分析&#xff1a; 因为使用的gradio版本过高&#xff0c;使用较低版本。 pip install gradio3.49.0 会有提示IMPORTANT: You are using gradio version 3.49.…

【SQL】MySQL ⽇志⽂件分类以及作用

MySQL 中常见的日志文件主要有以下几种&#xff0c;它们记录了不同层次和类型的数据库操作和事件&#xff0c;对于数据库的管理、故障排查以及性能优化都非常重要&#xff1a; 1. 错误日志&#xff08;Error Log&#xff09; 作用&#xff1a;记录 MySQL 服务器启动和运行过程…

面试神器!AI大模型快速上手,轻松拿下高薪工作!

AI大模型面试秘籍分享 在的职业发展道路上&#xff0c;无论是面临跳槽面试的挑战、寻求升职加薪的机会&#xff0c;还是面对职业发展的困境&#xff0c;掌握AI大模型的技术栈都将成为你的一大助力。为此&#xff0c;我们精心整理了一套涵盖AI大模型所有技术栈的快速学习方法和…

华为HCIP Datacom H12-821 卷15

1.判断题 OSPF 路由协议中, asbr-summary 命令可以跟 not-advertise 参数,该参数的意义时 不通告聚合路由 A、对 B、错 正确答案: A 解析: not-advertise 设置不发布聚合路由。如果不指定该参数则将通告聚合路由。 2.判断题 ASBR 边界路由器可以是内部路由器 R, 或者是 …

VisualStudio2019受支持的.NET Core

1.VS Studio2019受支持的.NET Core&#xff1f; 适用于 Visual Studio 的 .NET SDK 下载 (microsoft.com)

《Redis设计与实现》阅读总结-2

第 7 章 压缩列表 1. 概念&#xff1a; 压缩列表是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项&#xff0c;并且每个列表项是小整数值或长度比较短的字符串&#xff0c;那么Redis就会使用压缩类别来做列表键的底层实现。哈希键里面包含的所有键和值都是最小…

B端页面:日志管理页面,简洁实用的设计法门

B端日志管理是指在企业级后台系统中对系统操作日志进行记录、查看和管理的功能。 它的作用主要有以下几点&#xff1a; 1. 安全审计&#xff1a;通过记录用户的操作日志&#xff0c;可以对系统的安全性进行审计和监控&#xff0c;及时发现异常操作和安全漏洞。 2. 故障排查&a…

TEC相关专利研究

每天一篇行业发展资讯&#xff0c;让大家更及时了解外面的世界。 更多资讯&#xff0c;请关注B站/公众号【莱歌数字】&#xff0c;有视频教程~~ 关于TEC在电子行业的部署有很多讨论&#xff0c;这些专利显示了不同发明者关注的一些显著特征。下面的表1列出了本期将审查的专利…

[深度学习] 卷积神经网络CNN

卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;是一种专门用于处理数据具有类似网格结构的神经网络&#xff0c;最常用于图像数据处理。 一、CNN的详细过程&#xff1a; 1. 输入层 输入层接收原始数据&#xff0c;例如一张图像&#xff0c;它可以被…

STM32存储左右互搏 模拟U盘桥接QSPI总线FATS读写FLASH W25QXX

STM32存储左右互搏 模拟U盘桥接QSPI总线FATS读写FLASH W25QXX STM32的USB接口可以模拟成为U盘&#xff0c;通过FATS文件系统对连接的存储单元进行U盘方式的读写。 这里介绍STM32CUBEIDE开发平台HAL库模拟U盘桥接Quad SPI总线FATS读写W25Q各型号FLASH的例程。 FLASH是常用的一种…

环境配置的相关问题

一、shap安装踩坑 遇到错误&#xff1a; A module that was compiled using NumPy 1.x cannot be run in NumPy 2.0.0 as it may crash. To support both 1.x and 2.x versions of NumPy, modules must be compiled with NumPy 2.0. Some module may need to rebuild instead…

PyTorch(四)数据转换与构建神经网络

#c 总结 文档总结 文档目录&#xff1a; 数据转换&#xff1a;主要讲解「transforms」&#xff0c;涉及到的知识点有「匿名函数」&#xff0c;「对象自调用」 创建神经模型&#xff1a;涉及的知识点有「加速训练」「神经网络定义」「调用神经网络」「模型层」「模型参数」 …

Maven私服批量上传pom和jar实操

Maven私服上传pom和jar实操-CSDN博客 Maven私服上传jar实操_maven fakepath-CSDN博客 之前写过两篇向maven私服上传jar的操作&#xff0c;看到阅读量还可以&#xff0c;觉得应该有很多人有这个需求&#xff0c;所以这次再放一个大招&#xff0c;通过批量的方式向私服传jar和p…

使用递归时的几种优秀处理手法(持续更新中,欢迎评论补充)

一、记忆缓存 遇到出现同样的参数多次递归调用时&#xff0c;可以添加记忆缓存&#xff0c;以空间换时间。 原理说明&#xff1a; 1、如下面案例中的递归&#xff0c;调用时每次都从n执行到0&#xff08;n一次衰减&#xff09;&#xff0c;则可能存在n-1的阶乘次重复参数调用…

ChatGPT智能对话绘画系统 带完整的安装源代码包以及搭建教程

系统概述 ChatGPT 智能对话绘画系统是一款集智能语言处理和绘画创作于一体的综合性系统。它利用了深度学习和自然语言处理技术&#xff0c;能够理解用户的意图和需求&#xff0c;并通过与用户的交互&#xff0c;生成富有创意的绘画作品。该系统的核心是一个强大的人工智能模型…

【RAG】PDF Chatbot 个人练手项目

【RAG】PDF Chatbot 个人练手项目 项目的架构和技术选择&#xff0c;以及如何利用它来提升个人的开发能力和理解人工智能技术在文档处理中的应用。 项目截图 后端&#xff1a;FastAPI 应用 功能特性&#xff1a; PDF 文件上传&#xff1a;通过界面或 API&#xff0c;上传 P…