从不sequential的sequence

原创 2003年12月02日 22:02:00

       遇到过好多问题关于如何在ORACLE 中创建类似SQLSERVERACCESS自增长字段。答案多是先建立一个Sequence,然后在Trigger中将SequenceNEXTVAL的取值赋予所需要的列。看上去还不错。

       

        但是一切真的那么顺利吗?Sequence 真的可以做到提供一序列连续没有遗漏的序列数值吗?

         不妨作个实验:

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

SQL> create sequence test_seq start with 1;

Sequence created.

SQL> create table test_tab ( x int) ;

Table created.

SQL> insert into test_tab values (test_seq.nextval) ;

1 row created.

SQL> insert into test_tab values (test_seq.nextval) ;

1 row created.

SQL> insert into test_tab values (test_seq.nextval) ;

1 row created.

SQL> commit;

Commit complete.

SQL> select * from test_tab ;

X
----------
1
2

3

SQL> conn / as sysdba;
Connected.
SQL> alter system flush shared_pool ;

System altered.

SQL> conn user1/user1
Connected.
SQL> insert into test_tab values (test_seq.nextval) ;

1 row created.

SQL> commit;

Commit complete.

SQL> select * from test_tab ;

X
----------
1
2

3
21

 

 

         从试验中可以看出,在缺省情况下,我们建立的是带有Cache选项的Sequence (缺省值是20), 它的作用是预先将一定数量的序列值存放在SGA中,便于快速访问。可是它的副作用就是这部分数值可能会被清除, 当下一次获取NEXTVAL时,就会不可避免地造成序列值丢失。

         总结一下,在以下情况下,序列值会丢失:

 

1.  数据库关闭或重起 ,由于整个SGA会被清除,所以Cached的序列值同样会被清除。

2.        类似于普通的Data Block ,SGA中需要放置新的数据,Cached的序列值可能会按照SGA的数据存放规则被清除。

 

读到这里,细心的读者也许会问,如果在创建Sequence时,有意不选用Cache选项,问题不就解决了吗?且慢,还有两点需要注意:

 

1 访问效率降低,没有Cache功能的Sequence取值将无法直接访问内存

2 不论是Nocache还是Cache , 每次访问NEXTVAL的过程都是不可逆的,在同一session中,在执行一系列DMLSequence的操作后,用户执行Rollback,希望将操作回滚,但是Sequence此时就显得异常顽固,用掉的NEXTVAL将无法被重现。当下一次试图读取NEXTVAL时,Sequence的指针又移动到下一位了。

 

        看来Oracle真是一个海洋,每个细小的知识点都是那么饶有趣味,值得我们去努力专研啊。

 

 

备注:使用Cache功能对Sequence读取效率的影响

Connected to:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

       

                                                                BLACK_SNAIL

                                                                欢迎交流,转载注明

                                                             ligang1000@hotmail.com/ligang@fujitsu.sh.cn                                                                                                                      

[agc003e]Sequential operations on Sequence

前言利用了经典性质的题。题目大意有一个数字串S,初始长度为n,是1 2 3 4 …… n。 有m次操作,每次操作给你一个正整数a[i],你先把S无穷重复,然后把前a[i]截取出来成为新的S。 求m...
  • WerKeyTom_FTD
  • WerKeyTom_FTD
  • 2017年10月27日 10:12
  • 252

Deep learning基于theano的keras学习笔记(1)-Sequential模型

最近在看keras文档,想写博客却真的无从下手(其实就是没咋学会),想想不写点笔记过段时间估计会忘得更多,所以还是记录一下吧,感觉学习keras最好的方式还是去读示例的代码,后期也有想些keras示例...
  • zhili8866
  • zhili8866
  • 2016年11月17日 17:12
  • 2376

keras中文-快速开始Sequential模型

本文转自微信公众号  createamind keras中文-快速开始Sequential模型 2016-09-27 keras-cn 大脑模拟 快速开始Sequen...
  • qq_36190147
  • qq_36190147
  • 2016年09月29日 19:15
  • 1753

成功者不是从不失败,而是从不放弃

Winners are not those who never fail but those who never quit. 成功者不是从不失败,而是从不放弃。(Edwin Louis Cole...
  • bigheadsheep
  • bigheadsheep
  • 2014年09月29日 08:42
  • 751

2——快速开始Sequential模型

这一节学习了一下keras的sequential models的大致流程。   以下记录笔记使用的keras版本为1.0.0   流程分为以下几步:   一:The Model layer     ...
  • u014180259
  • u014180259
  • 2016年12月12日 11:13
  • 2224

Keras-Sequential模型(2)

重点介绍Sequential模型方法 compilecompile(self, optimizer, loss, metrics=[], sample_weight_mode=None, **kwar...
  • u011437229
  • u011437229
  • 2016年12月06日 15:43
  • 2364

Java8 Stream API使用

Java8面世后,目前工作中使用最多的特性就当是Stream API。Stream API结合lamada表达式带来的是全新的编程体验,以往一些繁琐的数据处理,如今不仅条理清晰,而且代码量至少减少了一...
  • qq_31780525
  • qq_31780525
  • 2017年12月15日 01:22
  • 57

开始 Keras 序列模型(Sequential model)

开始 Keras 序列模型(Sequential model)序列模型是一个线性的层次堆栈。 你可以通过传递一系列 layer 实例给构造器来创建一个序列模型。The Sequential mode...
  • fendouaini
  • fendouaini
  • 2017年08月07日 14:45
  • 672

db file sequential read等待事件

最近某个应用的AWR中总显示“db file sequential read“等待事件位于top 5之首,下面检索下MOS关于这个等待事件的说明。 等待事件: "db file sequentia...
  • bisal
  • bisal
  • 2013年10月01日 23:33
  • 9849

keras学习笔记-二(Sequential 模型)

keras学习笔记-二(Sequential 模型) Sequential是多个网络层的线性堆叠 from keras.models import Sequential from keras....
  • m0_37407756
  • m0_37407756
  • 2017年09月27日 20:05
  • 221
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从不sequential的sequence
举报原因:
原因补充:

(最多只允许输入30个字)