[20181007]Scalable sequences oracle database 12c.txt

[20181007]Scalable sequences oracle database 12c.txt

--//链接 : https://oracle-base.com/articles/18c/scalable-sequences-18c

Scalable Sequences in Oracle Database 18c

Scalable sequences are designed to reduce problems with hot index blocks during large scale data loads into tables with
sequence generated primary keys on single instance and RAC databases.

Scalable sequences have been available since the first release of Oracle 12c, but they were not documented and therefore
not supported. They are included in the documentation for the first time in Oracle 18c, so they are now a supported
feature.

    The Problem
    Creating Scalable Sequences
    Altering Scalable Sequences
    Views
    Implications

Related articles.

    Oracle Sequences

The Problem

A sequence is a database object used to produce unique integers, which are commonly used to populate a synthetic primary
key column in a table. Since the sequence number always increases, typically by 1, each new entry is placed on the
right-most leaf block of the index, making it a hot block. By itself this can cause contention, but things can get worse
when dealing with a RAC database, where the contention on the right-most leaf block can cause cluster waits, with the
RAC instances fighting over the block.

Since Oracle 8 you might have used reverse key indexes to solve this problem, but scalable sequences may be a better
solution.

Creating Scalable Sequences

A scalable sequence adds a 6 digit prefix to the sequence. The prefix is made up of a 3 digit instance offset
concatenated to a 3 digit session offset, which the documentation describes as follows.

[(instance id % 100) + 100] || [session id % 1000]

The final sequence number is in the format "prefix || zero-padding || sequence", where the amount of padding depends on
the definition of the sequence.

With the introduction of scalable sequences, the default attribute for a sequence is NOSCALE, but you can specify it
explicitly if you wish. You will see it functions like a normal sequence.

--//实际上12cR2版本已经支持这个特性,自己简单测试看看:

1.环境:
SCOTT@test01p> @ ver1
PORT_STRING                    VERSION        BANNER                                                                               CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0           12.2.0.1.0     Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production              0

2.测试:
SCOTT@test01p> @ spid
       SID    SERIAL# PROCESS                  SERVER    SPID                     PID  P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- --------------------------------------------------
         9      51442 2352:2256                DEDICATED 2952                      24          3 alter system kill session '9,51442' immediate;

--//我的测试环境仅仅1个实例.

SCOTT@test01p> CREATE SEQUENCE scale_seq START WITH 1 MAXVALUE 9999999 SCALE;
Sequence created.

--//按照前面的格式介绍 "prefix || zero-padding || sequence",前面的inst_id,sid已经占了6位(十进制).这样实际上仅仅用户1位.

SCOTT@test01p> SELECT scale_seq.nextval FROM dual;
   NEXTVAL
----------
   1010091

--//再打开另外1个会话:
SCOTT@test01p> @ spid
       SID    SERIAL# PROCESS                  SERVER    SPID                     PID  P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- --------------------------------------------------
         6      33953 3316:1380                DEDICATED 3656                      28         41 alter system kill session '6,33953' immediate;

SCOTT@test01p> SELECT scale_seq.nextval FROM dual;
   NEXTVAL
----------
   1010062

--//如果连续取sequence.
....

SCOTT@test01p> SELECT scale_seq.nextval FROM dual;
   NEXTVAL
----------
   1010069

SCOTT@test01p> SELECT scale_seq.nextval FROM dual;
SELECT scale_seq.nextval FROM dual
*
ERROR at line 1:
ORA-64603: NEXTVAL cannot be instantiated for SCALE_SEQ. Widen the sequence by 1 digits or alter sequence with SCALE EXTEND.

--//留给seq位数仅仅1位,也就是到9就满了.

3.另外可以定义sequence EXTEND(缺省是NOEXTEND).

SCOTT@test01p> CREATE SEQUENCE scale_ext_seq START WITH 9 MAXVALUE 999 SCALE EXTEND;
Sequence created.

SCOTT@test01p> @spid
       SID    SERIAL# PROCESS                  SERVER    SPID                     PID  P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- --------------------------------------------------
         6      33953 3316:1380                DEDICATED 3656                      28         41 alter system kill session '6,33953' immediate;

SCOTT@test01p> SELECT scale_ext_seq.nextval FROM dual;
   NEXTVAL
----------
 101006009

SCOTT@test01p> SELECT scale_ext_seq.nextval FROM dual;
   NEXTVAL
----------
 101006010

--//这样实际上前面有6位留给了inst_id,sid. 后面才是sequence.这样最大的好处避免索引插入在相同的数据块,特别在rac环境有用.

4.另外以前的seq也可以修改属性加入scale,EXTEND.

SCOTT@test01p> CREATE SEQUENCE seq1 START WITH 1 MAXVALUE 99999999999 ;
Sequence created.

SCOTT@test01p> SELECT sequence_name, min_value, max_value, scale_flag, extend_flag FROM user_sequences where sequence_name='SEQ1' ;
SEQUENCE_NAME              MIN_VALUE       MAX_VALUE S E
-------------------- --------------- --------------- - -
SEQ1                               1     99999999999 N N

SCOTT@test01p> SELECT seq1.nextval FROM dual;
        NEXTVAL
---------------
              1

SCOTT@test01p> ALTER SEQUENCE seq1 SCALE NOEXTEND;
Sequence altered.

SCOTT@test01p> @ spid
            SID         SERIAL# PROCESS                  SERVER    SPID                     PID       P_SERIAL# C50
--------------- --------------- ------------------------ --------- -------------------- ------- --------------- --------------------------------------------------
              9           51442 2352:2256                DEDICATED 2952                      24               3 alter system kill session '9,51442' immediate;

SCOTT@test01p> SELECT seq1.nextval FROM dual;
        NEXTVAL
---------------
    10100900002

SCOTT@test01p> ALTER SEQUENCE seq1 SCALE EXTEND;

Sequence altered.

SCOTT@test01p> SELECT seq1.nextval FROM dual;
        NEXTVAL
---------------
1.010090000E+16    

SCOTT@test01p> set numw 17
SCOTT@test01p> SELECT seq1.nextval FROM dual;
          NEXTVAL
-----------------
10100900000000005

SCOTT@test01p> ALTER SEQUENCE seq1 NOSCALE;
Sequence altered.

SCOTT@test01p> SELECT seq1.nextval FROM dual;
SELECT seq1.nextval FROM dual
       *
ERROR at line 1:
ORA-08004: sequence SEQ1.NEXTVAL exceeds MAXVALUE and cannot be instantiated

--//因为这个时候最大值是10100900000000005,已经超出了定义.

SCOTT@test01p> SELECT sequence_name, min_value, max_value, scale_flag, extend_flag FROM user_sequences where sequence_name='SEQ1' ;
SEQUENCE_NAME                MIN_VALUE         MAX_VALUE S E
-------------------- ----------------- ----------------- - -
SEQ1                                 1       99999999999 N N

SCOTT@test01p> SELECT seq1.currval FROM dual;
          CURRVAL
-----------------
10100900000000005

--//我个人的感觉加入EXTEND更好控制一些.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/267265/viewspace-2215504/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/267265/viewspace-2215504/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于微信小程序的家政服务预约系统采用PHP语言和微信小程序技术,数据库采用Mysql,运行软件为微信开发者工具。本系统实现了管理员和客户、员工三个角色的功能。管理员的功能为客户管理、员工管理、家政服务管理、服务预约管理、员工风采管理、客户需求管理、接单管理等。客户的功能为查看家政服务进行预约和发布自己的需求以及管理预约信息和接单信息等。员工可以查看预约信息和进行接单。本系统实现了网上预约家政服务的流程化管理,可以帮助工作人员的管理工作和帮助客户查询家政服务的相关信息,改变了客户找家政服务的方式,提高了预约家政服务的效率。 本系统是针对网上预约家政服务开发的工作管理系统,包括到所有的工作内容。可以使网上预约家政服务的工作合理化和流程化。本系统包括手机端设计和电脑端设计,有界面和数据库。本系统的使用角色分为管理员和客户、员工三个身份。管理员可以管理系统里的所有信息。员工可以发布服务信息和查询客户的需求进行接单。客户可以发布需求和预约家政服务以及管理预约信息、接单信息。 本功能可以实现家政服务信息的查询和删除,管理员添加家政服务信息功能填写正确的信息就可以实现家政服务信息的添加,点击家政服务信息管理功能可以看到基于微信小程序的家政服务预约系统里所有家政服务的信息,在添加家政服务信息的界面里需要填写标题信息,当信息填写不正确就会造成家政服务信息添加失败。员工风采信息可以使客户更好的了解员工。员工风采信息管理的流程为,管理员点击员工风采信息管理功能,查看员工风采信息,点击员工风采信息添加功能,输入员工风采信息然后点击提交按钮就可以完成员工风采信息的添加。客户需求信息关系着客户的家政服务预约,管理员可以查询和修改客户需求信息,还可以查看客户需求的添加时间。接单信息属于本系统里的核心数据,管理员可以对接单的信息进行查询。本功能设计的目的可以使家政服务进行及时的安排。管理员可以查询员工信息,可以进行修改删除。 客户可以查看自己的预约和修改自己的资料并发布需求以及管理接单信息等。 在首页里可以看到管理员添加和管理的信息,客户可以在首页里进行家政服务的预约和公司介绍信息的了解。 员工可以查询客户需求进行接单以及管理家政服务信息和留言信息、收藏信息等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值