`
itspace
  • 浏览: 978431 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Oracle Sequence Audses$研究

阅读更多
我们知道sqlplus连接Oracle时,会从sequence AUDSES$中取得Auditing session ID。研究版本为Oracle 10.2.0.4,需要注意的是在不同版本中略有不同。
引用
SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE    10.2.0.4.0      Production
TNS for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - Productio
NLSRTL Version 10.2.0.4.0 - Production

我们用普通业务用户连接至Oracle,注意并没有使用sysdba连接。取得当前会话的Auditing session ID
引用
SQL>  select USERENV('SESSIONID') from dual;

USERENV('SESSIONID')
--------------------
              640503

同样在V$SESSION也有所体现
引用
SQL> select SID,AUDSID,USERNAME,TYPE,PROGRAM
  2  FROM V$SESSION WHERE TYPE='USER';

       SID         AUDSID USERN TYPE       PROGRAM
---------- -------------- ----- ---------- ------------------------------
       141     4294967295 SYS   USER       sqlplus@mcsvr (TNS V1-V3)
       142         640503 ZHOUL USER       sqlplus@mcsvr (TNS V1-V3)

可以查看AUDSES$下一个取值。
引用
SQL> SELECT SYS.AUDSES$.NEXTVAL FROM DUAL;

   NEXTVAL
----------
    640504

进一步查看audses$的定义
引用
SQL> SELECT DBMS_METADATA.GET_DDL('SEQUENCE','AUDSES$') FROM DUAL;

DBMS_METADATA.GET_DDL('SEQUENCE','AUDSES$')
--------------------------------------------------------------------------------
   CREATE SEQUENCE  "SYS"."AUDSES$"  MINVALUE 1 MAXVALUE 2000000000 INCREMENT BY 1 START WITH 77409 CACHE 10000 NOORDER  CYCLE


我们用sysdba连接至Oracle,取得当前会话的Auditing session ID,发现sysdba权限的Auditing session ID并没有从AUDSES$取得,因为AUDSES$最大值为2000000000,而当前SESSIONID已经达到4294967295(取自x$ksuse.KSUUDSES)
引用
$ sqlplus "/as sysdba"
SQL> select USERENV('SESSIONID') from dual;

USERENV('SESSIONID')
--------------------
          4294967295

SQL> select sid from v$mystat where rownum=1;

       SID
----------
       141

SQL> SELECT AUDSID,USERNAME,TYPE,PROGRAM
  2  FROM V$SESSION WHERE SID=141;

        AUDSID USERN TYPE       PROGRAM
-------------- ----- ---------- ------------------------------
    4294967295 SYS   USER       sqlplus@mcsvr (TNS V1-V3)




进一步查看后台核心进程的Auditing session ID,都取值为0
引用
SQL> select SID,AUDSID,USERNAME,TYPE,PROGRAM
  2  FROM V$SESSION WHERE TYPE='BACKGROUND';

       SID         AUDSID USERN TYPE       PROGRAM
---------- -------------- ----- ---------- ------------------------------
       150              0       BACKGROUND oracle@mcsvr (q001)
       151              0       BACKGROUND oracle@mcsvr (q000)
       154              0       BACKGROUND oracle@mcsvr (QMNC)
       160              0       BACKGROUND oracle@mcsvr (SMON)
       161              0       BACKGROUND oracle@mcsvr (MMNL)
       162              0       BACKGROUND oracle@mcsvr (MMON)
       163              0       BACKGROUND oracle@mcsvr (CJQ0)
       164              0       BACKGROUND oracle@mcsvr (RECO)
       165              0       BACKGROUND oracle@mcsvr (DBW0)
       166              0       BACKGROUND oracle@mcsvr (CKPT)
       167              0       BACKGROUND oracle@mcsvr (LGWR)

       SID         AUDSID USERN TYPE       PROGRAM
---------- -------------- ----- ---------- ------------------------------
       168              0       BACKGROUND oracle@mcsvr (MMAN)
       169              0       BACKGROUND oracle@mcsvr (PSP0)
       170              0       BACKGROUND oracle@mcsvr (PMON)

14 rows selected.


在Oracle 10.2.0.4中可以看到sequence audses$的cache size已经变为10000。

引用
SQL> select sequence_owner,sequence_name,cache_size
  2  from dba_sequences
  3  where sequence_name='AUDSES$';

SEQUENCE_OWNER                 SEQUENCE_NAME                  CACHE_SIZE
------------------------------ ------------------------------ ----------
SYS                            AUDSES$                             10000


而在Oracle 9.2.0.4中
引用
SQL> select * from v$version;   

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
PL/SQL Release 9.2.0.4.0 - Production
CORE    9.2.0.3.0       Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production

如果用sysdba权限连接用户和后台进程(BACKGROUND)一样,其AUDSID为0
引用
SQL> SELECT SID,AUDSID,USERNAME,TYPE FROM V$SESSION;

       SID     AUDSID USERNAME                       TYPE
---------- ---------- ------------------------------ ----------
         1          0                                BACKGROUND
         2          0                                BACKGROUND
         3          0                                BACKGROUND
         4          0                                BACKGROUND
         5          0                                BACKGROUND
         6          0                                BACKGROUND
         7          0                                USER
         8          0                                BACKGROUND
         9          0                                BACKGROUND
        10          0 SYS                            USER
        12          0                                BACKGROUND

其cache_size为20.
引用
SQL> select sequence_owner,sequence_name,cache_size
  2  from dba_sequences
  3  where sequence_name='AUDSES$';

SEQUENCE_OWNER                 SEQUENCE_NAME                  CACHE_SIZE
------------------------------ ------------------------------ ----------
SYS                            AUDSES$                                20



另外值得注意的是:在10.2.3以下的Rac平台中,如果客户端频繁短连接,因cache_size只有20,可能会导致数据库挂起,可以详见metalink doc:395314.1
0
0
分享到:
评论

相关推荐

    Oracle sequence 重置(失效恢复)

    ### Oracle Sequence 重置(失效恢复) 在进行Oracle数据库移植或维护时,可能会遇到Sequence失效的问题。这种情况通常发生在数据迁移后,原有的Sequence不再与表中的最大值相匹配,导致新记录插入时出现ID冲突或者...

    Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍

    Oracle 创建自增字段方法-ORACLE SEQUENCE 的简单介绍 Oracle SEQUENCE 是一种特殊的数据库对象,用于生成一系列唯一的数值,通常用于主键或其他需要唯一标识的字段。下面将详细介绍 Oracle 创建自增字段方法-...

    ORACLE SEQUENCE的简单介绍

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

    oracle中sequence介绍及应用

    ### Oracle中的Sequence介绍及应用 #### 一、Sequence概述 在Oracle数据库中,Sequence是一种用于自动产生数值序列的对象。它可以生成连续的整数或者非连续的整数序列,并且可以根据需求进行递增或递减。Sequence...

    让CoolSQL支持Oracle Sequence的GeneratedKey,懂的入

    本篇文章将围绕"让CoolSQL支持Oracle Sequence的GeneratedKey"这一主题展开,探讨如何在开发过程中利用Oracle的Sequence特性并将其与CoolSQL工具相结合,以实现更高效的数据操作。 首先,Oracle Sequence是一种用于...

    oracle中的sequence实现主键增长

    Oracle中的Sequence是数据库管理系统提供的一种机制,用于生成序列化的整数,通常用于主键或唯一标识符,确保数据的唯一性和有序性。在Oracle中,Sequence不同于其他数据库系统的自增字段,例如SQL Server中的`...

    分享ORACLE SEQUENCE跳号总结

    在ORACLE数据库中,序列(SEQUENCE)是使用非常频繁的一个数据库对象,但是有时候会遇到序列(SEQUECNE)跳号(skip sequence numbers)的情形,那么在哪些情形下会遇到跳号呢?  事务回滚引起的跳号  不管序列有...

    Degree Sequence for $k$-arc Strong Connected Multiple Digraphs

    $k$-弧强连通多重有向图的度序列,刘清海,洪艳梅,设~$D$ 为点集为~${v_1,ldots, v_n}$ 的有向图,则序列~${(d^+(v_1),d^-(v_1)),ldots, (d^+(v_n)$, $d^-(v_n))}$ 称为~$D$ 的度序列。对任意给定一个整数对构成�

    oracle GoldenGate 同步oracle sequence的步骤

    ### Oracle GoldenGate 同步 Oracle Sequence 的步骤 Oracle GoldenGate 是一款强大的数据复制软件,能够实现跨平台的数据复制。在企业级应用环境中,为了确保数据的一致性和完整性,经常需要将源数据库中的序列...

    Hibernate Oracle sequence的使用技巧

     1、在Oracle sequence首先创建sequence  create sequence seq_idminvalue 1start with 1increment by 1cache 20;  2、在你的hbm.xml中的配置  seq_id  这样再插入数据的时候,Hibernate会自动生成如下语句: ...

    使用JDeveloper开发WEB应用时同时使用Oracle的sequence和trigger

    本篇将重点介绍如何在使用JDeveloper这款强大的集成开发环境(IDE)时,结合Oracle的sequence和trigger来实现高效的数据操作。 首先,让我们理解一下sequence和trigger的概念。在Oracle中,sequence是一种自动递增...

    浅谈MyBatis-Plus学习之Oracle的主键Sequence设置的方法

    在Oracle数据库中,由于不支持自动递增的主键策略,开发者通常会使用Sequence来生成主键值。本文将深入探讨如何在MyBatis-Plus(MP)框架中配置Oracle的主键Sequence。 首先,Oracle Sequence是Oracle数据库提供的...

    oracle 主键自增 sequence

    ### Oracle 主键自增 Sequence 的实现与应用 #### 一、Sequence 的概念及用途 在 Oracle 数据库中,`Sequence` 是一种用于生成一系列唯一数值的对象。这些数值可以按照特定的规则递增或递减,并且可以设定是否循环...

    详解ORACLE SEQUENCE用法

    在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。 1、Create Sequence 首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限。 创建语句如下: CREATE SEQUENCE seqTest INCREMENT...

    oracle自动增长列

    在Oracle数据库中,实现自动增长列的功能主要依赖于`SEQUENCE`对象。通过创建一个序列(SEQUENCE),可以方便地为表中的某列自动生成唯一的值,这对于主键或者需要唯一标识符的场景非常有用。 #### 1. SEQUENCE概述...

    oracle sequence语句重置方介绍

    在开发过程中,可能会用到oracle sequence语句,本文以oracle sequence语句如何重置进行介绍,需要的朋友可以参考下Oracle重置sequence语句1 Sql代码 代码如下: DECLARE n NUMBER(10 ); tsql VARCHAR2(100 ); p_...

    oracle_sequence.rar_oracle

    在Oracle中,序列(Sequence)是一个非常重要的概念,它主要用于生成唯一的整数序列,常常被用来作为主键值,特别是在插入新记录时自动增加。在本篇文章中,我们将深入探讨Oracle序列的创建、使用以及其在实际应用中...

    java自动生成Oracle sequence管理类

    Oracle自增长主键自动生成类 public static int nextID String table { if table null return 1; table table toLowerCase ; String strKey table; if sequences containsKey strKey { ...

Global site tag (gtag.js) - Google Analytics