oracle数据库sequence的作用

news2024/12/25 1:19:38

sequence概念及作用

sequence是用来在多用户环境下产生唯一整数的数据库对象。序列产生器顺序生成数字,它可用于自动生成主键值,并能协调多行或者多表的主键操 作。没有sequence,顺序的值只能靠编写程序来生成。先找出最近产生的值然后自增长。这种方法要求一个事务级别的锁,这将导致在多用户并发操作的环 境下,必须有人等待下一个主键值的产生。而且此方法很容易产生主键冲突的错误,如下图:

如上图,事务2会报主键冲突的错误,而再刷新一下页面(再执行一边程序),可能就正常了。 还有一个问题,那就是完成生成主键的程序 (一般情况包含plsql块)本身对于并发调用也是一个瓶颈,因为这样的程序段往往是提供给好多程序去调用,如果代码端写的不够优化(比如没有使用邦定变 量等等),或者此代码段存在问题,那么它所影响的是系统的全局。我们应该提倡开发人员使用sequence。sequence消除了序列化问题,而且改善 了应用的并发能力。

创建sequence

sequence的命名最重要的是要统一,命名规则是次要的。 CREATE SEQUENCE emp_sequence INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE CACHE 10; 这 里需要重点说明的是cache参数,它是为了应对并发访问的。cache参数告诉oracle预先分配一个sequence numbers的集合,并且保留在内存中,以便sequence number能够被快速的访问。这个内存的大小就是cache所指定的大小,当多个用户同时访问一个sequence的时候,是在oracle SGA中读取sequence当前的合理数值,如果并发访问太大,cache的大小不够,那么就会产生sequence cache相关的等待(enq: SQ – contention),影响系统性能。 既然cache涉及到了内存,那么就会想到oracle实例恢复的问题。如果数据库shutdown abort,sequence会如何呢?当然会有问题,sequence number保存在内存里的但是没有被应用到表中的会丢失!

修改sequence

除了修改sequence的starting number,你什么都能改,如果想改starting number,只能先drop然后create。 ALTER SEQUENCE emp_sequence INCREMENT BY 10 MAXVALUE 10000 CYCLE CACHE 20; 修 改很有用,最典型的情况是“需要把sequence 的current value改大一点,避免程序报错!”。你就可以看看current value是多少,然后修改increment by 足够大的值,然后执行.nextval,最后别忘了再将increnent by改成原来的值,还要注意做这些工作的前提是当前没有人用此sequence。

注意:sequence与表没有关系,我们在使用的时候可以通过如下形式为每张表创建对应的sequence:seq_tablename.

使用 sequence

CURRVAL 和 NEXTVAL 能够在以下情况使用: insert的values字句、select中的select列表、update中的set字句

CURRVAL 和 NEXTVAL 不能够在以下情况使用: 子查询、视图和实体化视图的查询、带distinct的select语句、带 group by和order by的select语句、带union或intersect或minus的select语句、select中的where字句、create table与alter table中的default值、check约束条件。

删除sequence

drop sequence seq_a; 当删除sequence后,对应它的同义词会被保留,但是引用时会报错。

oracle rac环境中的sequence

oracle为了在rac环境下为了sequence的一致性,使用了三种锁:row cache lock、SQ锁、SV锁。 row cache lock的目的是在sequence指定nocache的情况下调用sequence.nextval过程中保证序列的顺序性; SQ锁是应用于指定了cache+noorder的情况下调用sequence.nextval过程中。 SV 锁(dfs lock handel) 是调用sequence.nextval期间拥有的锁。前提是创建sequence时指定了cache 和order属性 (cache+order)。order参数的目的是为了在RAC上节点之间生成sequence的顺序得到保障。

创建sequence赋予的cache值较小时,有enq:sq-contention等待增加的趋势。 cache的缺省值是20.因此创建并发访问多的sequence时,cacheh值应取大一些。否则会发生enq:sq-contention等待事件。

rac上创建sequence时,如果指定了cache大小而赋予noorder属性,则各节点将会把不同范围的sequence值cache到内 存上。若两个节点之间都必须通过依次递增方式使用sequence,必须赋予如下的order属性(一般不需要这样做)”sql> create sequence seq_b cache 100 order”。如果是已赋予了cache+order属性的sequence,oracle使用SV锁进行同步。SV锁争用问题发生时的解决方法与sq锁 的情况相同,就是将cache 值进行适当调整。

在RAC多节点环境下,Sequence的Cache属性对性能的影响很大。应该尽量赋予cache+noorder属性,并要给予足够的 cache值。如果需要保障顺序,必须赋予cache+order属性。但这时为了保障顺序,实例之间需要不断的交换数据。因此性能稍差

 

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

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

相关文章

零基础初学前端—新建项目

对于一个没有基础的新手来说,如何使用 vscode 新建一个前端项目,写一些html页面,并能进行运行。 需要吐下几个步骤: 新建一个文件夹在文件夹里新建一个文件,命名为 xxx.html ,例如 index.html打开 vscode …

前端:使用rollup的简单记录

目录 rollup安装 简单使用 1、命令行打包 2、配置文件打包 问题 1、报错提示:(node:23744) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.(Use node --trace-warnings ... to sho…

模拟电子 | 稳压管及其应用

模拟电子 | 稳压管及其应用 稳压二极管工作在反向击穿状态时,其两端的电压是基本不变的。利用这一性质,在电路里常用于构成稳压电路。 稳压二极管构成的稳压电路,虽然稳定度不很高,输出电流也较小,但却具有简单、经济实…

IDEA(版本2020)启动错误

错误信息:在运行Java应用程序时,发现没有找到Java虚拟机(JVM),并且需要手动设置JAVA_HOME环境变量。 idea启动时的提示如下: 解决方案如下: 确认已经安装了64位JDK,并且JDK的bin目录已经被添加到了系统的环…

YOLO算法入门知识概念

1.two-stage && one-stage two-stage(两阶段):Faster-rcnn,Mask-Rcnn系列(5EPS)---多了预选环节 one-stage(单阶段):YOLO系列(速度快)---实时检测时常用2.Map指标:综合衡量控制效果 包…

Android基站定位源代码

经过几天的调研以及测试,终于解决了联通2G、移动2G、电信3G的基站定位代码。团队里面只有这些机器的制式了。下面就由我来做一个详细的讲解吧。1 相关技术内容 Google Android Api里面的TelephonyManager的管理。 联通、移动、电信不同制式在获取基站位置的代码区别…

开源赋能 普惠未来|TKEStack 诚邀您参与 2023 开放原子全球开源峰会

TKEStack 是腾讯开源的一款集强壮性和易用性于一身的企业级容器编排引擎,以极简的向导式界面为用户提供了容器应用全生命周期管理能力,帮助用户在私有云环境中快速构建 PAAS 容器云平台,并敏捷、高效地管理和发布应用程序。作为完全开放的项目…

华秋硬创 | 全国科技工作者日,致敬每一位科技创新者!

2023年5月30日是第七个“全国科技工作者日”,“全国科技工作者日”的设立旨在弘扬科学家精神,团结引导广大科技工作者厚植家国情怀、勇于创新争先。 今年,全国科技工作者日主题是“点亮精神火炬”。每一次科学探索,都始于一束心中…

ipad手写笔哪个牌子好用?便宜的ipad触控笔

在这无纸化的时代,越来越多人向往简便、快速,人们会更想有自己的能够快速完成,电容笔是出现,深受大众喜欢,随着电容笔技术的不断进步,电容笔越来越普遍,价格也越来越低,使用效果也越…

建造者模式的学习与使用以及和抽象工厂模式的区别

1、建造者模式的学习 当创建一个复杂对象时,使用建造者模式可以将对象的构建过程和表示分离开来。它允许使用相同的构建过程来创建不同的表示形式。   建造者模式的主要思想是将一个复杂对象的构建过程分解为一系列简单的步骤,并且使用一个指导者&…

14届蓝桥杯青少组省赛(中级组)C++_2023.5.14

选择题: 1、设只含根结点的二叉树高度为1,共有62个结点的完全二叉树的高度为?(C) A.4 B.5 C.6 D.7 2、C++中,bool类型的变量占用字节字数为?(A) A.1 B.2 C.3 D.4 3、该程序的输出为?(A) A.127 B.97 C.63 D.126 4、以下关于数组的说法中…

力扣-根据前序和后序遍历构造二叉树(java)

根据前序和后序遍历构造二叉树 leetcode 889 题(中等)解题思路代码演示二叉树专题 leetcode 889 题(中等) 原题链接: https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-postorder-traversal/ 题…

echart实现地图展示

最近做的页面中需要展示省级地图精确到市级且悬浮到地区上时会显示一些信息 然后参考了网址: “绿色金融” - 江西省 - category-work,geo地理坐标,legend,series-map地图,series-scatter散点图,title标题,tooltip提示框,visualMap视觉映射 - makeapie echarts社区…

同心旋转圆弧

效果如图: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, i…

Unity新动画系统之动画状态机Animator Controller

1、创建动画状态机文件 &#xff08;1&#xff09;会在创建动画时自动创建 &#xff08;2&#xff09;Create----Animator Controller 2、动画状态机窗口相关 层级&#xff1a;可以在右侧齿轮设置参数大小 3、添加动画 为对象添加动画后会自动添加到状态机中 4、状态切换 …

halcon安装多个版本时,环境变量设置

记录halcon安装多个版本时&#xff0c;环境变量设置的步骤&#xff0c;方便以后查阅。 1.设置4个环境变量 找到电脑系统中的系统变量&#xff08;不同系统位置不一样&#xff09;&#xff0c;如下图&#xff1a; &#xff08;1&#xff09;变量名&#xff1a;HALCONARCH 变量…

49天精通Java,第36天,Java数组、java数组初始化、java数组赋值

目录 一、声明数组二、初始化数组三、访问数组元素四、遍历数组五、数组复制1、基本类型数组复制2、Object数组复制3、多维数组复制4、对象数组复制 大家好&#xff0c;我是哪吒。 &#x1f3c6;本文收录于&#xff0c;49天精通Java从入门到就业。 全网最细Java零基础手把手入…

企业开发前端框架2023最新前沿技术vue3+vite+vuetify+js+Tailwind Css

文章目录 前言创建项目1、打开vuetify的官网下载项目2、下载依赖3、添加tailwindcss依赖 结束 前言 最近需要开发新的项目&#xff0c;正好学习了Tailwindcss&#xff0c;所以就想着集成到新项目里来&#xff0c;一来可以精进项目经验&#xff0c;也可以感受一下tailwindcss的…

6.1黄金探底回升是否到顶,今日多空如何布局

近期有哪些消息面影响黄金走势&#xff1f;今日黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周三(5月31日)黄金期货价格攀升&#xff0c;美国国债收益率下降推动金价升至一周最高收盘位。美市尾盘&#xff0c;现货黄金收报1962.42美元/盎司&#xff0c;上升3…

实验篇(7.2) 05. SSL - 通过浏览器访问远端内网服务器 ❀ 远程访问

【简介】直接将内网服务器映射成公网IP&#xff0c;可以方便的从任何地方访问服务器的指定端口&#xff0c;但是这种方式下&#xff0c;服务器是公开且暴露的。那有没有即方便、又比较安全的远程访问服务器的方法呢&#xff1f;我们来看看SSL VPN的Web模式。 SSL VPN介绍 从概念…