`

oracle seq

阅读更多
一. 理论知识

先看一个创建Sequence的语句:
SQL> create sequence seq_tmp
     increment by 1
     start with 1
     nomaxvalue
      nocycle
     ;
序列已创建。

相关参数说明:
      INCREMENT BY 1 -- 每次加几个
      START WITH 1 -- 从1开始计数
      NOMAXvalue -- 不设置最大值
      NOCYCLE -- 一直累加,不循环
      CACHE 10;  --设置缓存cache个序列
      CURRVAL=返回 sequence的当前值
      NEXTVAL=增加sequence的值,然后返回 sequence 值


查看user_sequences 表的结构:
SQL> desc user_sequences;


查看刚才创建的序列seq_tmp 的值:
SQL> select * from user_sequences where sequence_name='SEQ_TMP';


取下一个sequence的值:
SQL> select seq_tmp.nextval from dual;

查看当前sequence的值:
SQL> select seq_tmp.currval from dual;


修改Cache 大小:
            如果Cache已经指定,我们可以修改Cache 大小。 alter 命令可以修改sequence中除了start 以外的所有参数。

如:
alter sequence emp_sequence cache 100;


小结:

在自己的本本上测试的,Oracle 11gR2.  单Instance数据库单会话循环不间断取1-4万个值。
nocache:             2.26s          10000   
cache:20              0.46s          10000
cache:100             0.37s          10000
cache:1000            1.31s          40000
nocache:             9.33s         40000

基本上cache 大于20的时候性能基本可以接受,nocache的时候性能确实很差.



在以后每次请求nextval的时候,Oracle就从服务器缓存中去获取序列值。而不需要更新数据字典信息。只有在分配到缓存的10个数字都已经分配完,或者因为缓存刷新操作剩余数字被清理的情况下,才会再次调用sequence分配机制,再次分出cache个数字。

在cache问题上,我们经常会疑惑为什么我们sequence生成的数字序列会“跳号”。这种跳号现象实际上就是因为cache的数字在缓存中因为各种原因被flush出,这样才导致生成的数字序列不连续。

注意:在有cache的情况下,sequence只能保证每次获取到的数字都是唯一、递增的,从来没有保证过数字的连续性。



hibernate hbm配置:
<id name="id" type="java.lang.Long">
            <column name="ID"   />
             <generator class="sequence"> 
<param name="sequence">SEQ_emp</param> 
</generator>
        </id>
分享到:
评论

相关推荐

    ORACLE SEQUENCE的简单介绍

    ### ORACLE SEQUENCE 的详细介绍与应用 #### 一、概述 在数据库开发和管理中,自动编号是一项常用的功能。在 SQL Server 中,我们可以通过自增字段来实现这一功能。而在 Oracle 数据库中,则使用了一个名为 **...

    调试oracle触发器方法

    在Oracle数据库中,触发器(Triggers)是一种存储过程,它们自动执行,当特定的数据库事件发生时,如INSERT、UPDATE或DELETE操作。调试Oracle触发器是开发和维护数据库应用程序时的重要步骤,可以帮助我们找出潜在的...

    oracle数据库字段值自动加1

    Oracle 数据库字段值自动加 1 Oracle 数据库中,字段值自动加 1 是一个常见的需求,特别是在数据插入时需要自动生成唯一标识符的情况下。下面将详细介绍如何实现 Oracle 数据库字段值自动加 1。 首先,需要创建一...

    怎么用oracle打包

    在Oracle数据库环境中,"打包"通常指的是将一系列相关的对象,如表、存储过程、函数、触发器、视图等,组织成一个可移植的结构,以便于迁移、备份或分发。这通常涉及到PL/SQL代码的管理和部署。在本文中,我们将详细...

    批量修改Oracle序列值的存储过程

    在Oracle数据库中,序列(Sequences)是一种自动递增或递减的数字生成器,常用于主键生成或者自增字段。批量修改Oracle序列值的需求可能出现在数据迁移、恢复或测试环境中,确保序列与实际数据匹配。这篇博客分享的...

    oracle sql loader 用法详解

    ### Oracle SQL Loader 用法详解 Oracle SQL Loader是一款强大的数据加载工具,被广泛应用于将大量数据从操作系统文件导入到Oracle数据库中。对于大型数据仓库项目,SQL Loader因其提供的高速加载方式(如Direct ...

    Oracle和SqlServer语法区别

    Oracle和SqlServer语法区别 Oracle和SqlServer是两种流行的关系型数据库管理系统,它们之间存在着一些语法区别。了解这些区别对于开发者来说非常重要,因为它可以帮助他们更好地迁移到新的数据库管理系统。下面将...

    oracle脚本-oracle常用表及数据

    例如,可以创建一个名为emp_id_seq的序列,为新插入的员工记录生成唯一的ID。 5. **学习价值**:这些脚本对于学习Oracle数据库非常有价值,因为它们提供了实际操作的例子。通过实践这些脚本,学习者可以了解如何在...

    Oracle插入数据时获取自增ID

    ### Oracle插入数据时获取自增ID 在Oracle数据库中,当需要实现类似其他数据库系统(如MySQL、SQL Server等)中的自动增长字段功能时,通常会采用序列(sequence)和触发器(trigger)来实现这一需求。下面将详细...

    oracle 创建id主键序列 脚本

    这样,当向`table_name`插入新记录时,如果没有为`id`字段提供值,Oracle会自动使用`seq_id`序列的下一个值。 总结来说,Oracle序列是实现主键自增的有效工具,通过创建和管理序列,可以确保数据的唯一性和有序性。...

    oracle字段自增长

    Oracle 字段自增长 Oracle 字段自增长是指在 Oracle 数据库中,通过创建序列和触发器来实现字段的自动增长功能。在 Java 编程过程中,这种机制可以用来生成唯一的序号,例如订单号、流水号等。 在 Oracle 10g 中,...

    oracle,sysbase调试脚本!

    "oracle.sql.txt"可能包含了多种Oracle SQL命令或者PL/SQL代码示例,而"seq_log_id.sql.txt"和"seq_batch.sql.txt"可能与数据库序列管理和日志记录有关,序列在Oracle中常用于生成唯一的标识符,特别是在主键字段上...

    Oracle考试试题(带答案)

    13. 在 Oracle 中,有一个名为 seq 的序列对象,以下语句能返回序列值但不会引起序列值增加的是? 答案:c) select seq.CURRVAL from dual; 这是因为 CURRVAL 函数可以返回序列值,但不会引起序列值增加。 14. 在...

    Oracle数据库开发和设计规范

    Oracle 数据库开发和设计规范 Oracle 数据库开发和设计规范是指在开发和设计 Oracle 数据库时需要遵守的一系列规则和约定,以确保数据库的可维护性、可扩展性和可读性。本文档总结了 Oracle 数据库开发和设计规范的...

    mysql生成oracle序列

    ### MySQL生成Oracle序列知识点 #### 一、背景与概述 在数据库领域中,不同数据库管理系统(DBMS)之间存在显著差异,比如Oracle与MySQL在处理序列(sequence)的方式上就有本质的不同。Oracle提供了内置的支持来管理...

    Oracle自增序列和触发器生成工具.zip

    Oracle数据库在设计关系型数据库时,常常需要使用到自增序列和触发器来实现自动增长的主键。自增序列可以确保数据的唯一性,而触发器则可以在特定事件(如INSERT、UPDATE或DELETE)发生时执行一些额外的操作。本...

    ORACLE生成所有表对应的序列

    在Oracle数据库中,序列(Sequences)是一种自动递增或递减的数字生成器,常用于为表的主键字段生成唯一的标识符。在大型数据库系统中,它们是管理序列化和唯一性的重要工具。本篇文章将深入探讨如何在Oracle中生成...

    在Oracle VirtralBox 安装 Oracle 10g For Oracle Linux

    ### Oracle VirtualBox 安装 Oracle 10g for Oracle Linux 全程指南 #### 标题解析 - **Oracle VirtualBox**: 这是一款广受欢迎的虚拟化软件,它允许用户在其计算机上创建并运行多个虚拟操作系统。 - **安装 Oracle...

    oracle_sequence.rar_oracle

    Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和稳定性深受企业青睐。在Oracle中,序列(Sequence)是一个非常重要的概念,它主要用于生成唯一的整数序列,常常被用来作为主键值,特别是在插入新...

    oracle查询重复数据方法

    Oracle 查询重复数据方法 Oracle 查询重复数据方法是数据库管理中非常重要的一个问题, Oracle 数据库提供了多种方法来查询和删除重复数据。下面我们将详细介绍几种常见的方法。 方法一:使用 Having 子句 第一种...

Global site tag (gtag.js) - Google Analytics