文档详情

SQL数据库对象课案.doc

发布:2017-05-24约6.92千字共29页下载文档
文本预览下载声明
第十四章 其它数据库对象 我们前面学习了表、视图,本章将简要的学习其它数据库对象。 ======= 本章主要内容 ====== ⊙ 创建、维护、使用序列器 ⊙ 创建和维护索引 ⊙ 创建私用和公用同义词 其中INDEX非常复杂,将来会在DBA I、中级、高级课程深入去讲 DBA I我们会初步了解索引,中级课程详细了解索引的优化,高级课程了解索引的INTERNAL结构、索引遍历及索引拆分的原则。 我们看看这些ORACLE的对象 ORACLE对象 ======= 这些对象都可以在dba_objects里查的到,都是我们的SCHEMA对象,我们在第二章简单的介绍过. ⊙ SEQUENCE : 用于生成类似主键的序列值,还可以应用到其它列 ⊙ INDEX : 索引用于提高访问数据的速度 ⊙ SYNONYM : 同义词用于设置一个对象的别名,等同于原始对象,以便于书写方便 我们首先来了解下SEQUENCE,我们称为”序列器” SEQUENCE ===== 什么是SEQUENCE呢? 这个大家应该都了解一点,比如我们QQ群的学号等,我们在500群曾经有多个学生为一个学号250挣的死去活来,因为大家有并发,或者大家没有去判断别人有没有用了250号.而SEQUENCE很好的解决了这个问题。 序列是用户创建的数据库对象,它可以由多个用户共享,用来生成唯一的整数。 它通常用途是创建主键值,主键值对于每行必须是唯一的。序列可以递增,也可以递减。使用序列器代替应用控制,将节约时间,这是因为它可以减少编写生成序列的程序代码量,可以通过内置代码就可以实现。 SEQUENCE的好处 ======== ⊙ 我们的SEQUENCE就是来解决如上的并发和性能问题。即可以避免并发产生重复值,SEQUENCE是一个原子事务,取了值就已经生成,不可能再生成重复数据,保证每个请求生成一个唯一值。 ⊙ 可以按规律以特定的间隔生成一个数值,而我们的SCN就是一个类似序列器来生成的 ⊙ 就如学号,那如果没有SEQUENCE,那你必须判断学生表里学号最大的值,然后加1,这个要涉及到分组和表扫描,显然是不利的,那我们会采用把最大值保留在一个对象里,下次去就选择最大值加间隔值,这样就可以不去扫描实际的表了。 SEQUENCE特征 ======== 我们看SEQUENCE的特征 ⊙ SEQUENCE是会自动按递增或者递减生成一个唯一的号,它是整型。 ⊙ SEQUENCE是对象,我们不同的会话可以去读取该SEQUENCE,所以它是共享对象,它会做为共享对象保存在LIBRARY CACHE中 ⊙ 它常用在主键上生成主码 ⊙ 可以代替应用代码实现唯一值的序列号,而且序列号在并发访问时不存在读取出重复值,它不基于外部的事务。 ⊙ 将SEQUENCE的一批值预分配到内存,这样能更快速访问SEQUENCE,这个就是CACHE的功能。 SEQUENCE语法 ======== 这里是SEQUENCE的语法 选项属性 ⊙ INCREMENT BY N,N表示每次增长多少,指定序列号之间的间隔。 ⊙ START WITH N,表示初始SEQUENCE从哪个值开始。指定生成第一个序列号 ⊙ [NO]MAXVALUE用来设置序列号最大值,我们通常设置默认值,[NO]MAXVALUE默认值看到的是10^27 ⊙ [NO]MINVALUE定义最小值,同上面参数类似 ⊙ CYCLE,是一个循环的值,当你增长达到MAXVALUE时,SEQUENCE是否让它将序列号轮转回来变成1,NOCYCLE表示不轮转。所以主键列不设置CYCLE ⊙ CACHE和NOCACHE就是你每次在内存里预保存多少个SEQUENCE。这样,你NEXTVAL时只要从内存取就行了。这里会提高读取的效率,预计算可以减少读取时所消耗的计算资源,更大的优势是在RAC中通过预取一个比较大数量的序列号,避免多个节点访问同一块而产生PING或者内存同步产生的性能影响,减少热块。 我们看例子 有一个序列号SEQ_ACC_BANKBAT,当前值是150000,在RAC1 CACHE20000个序列号,范围为150001~170000,在RAC2上CACHE 20000个序列号,范围为170001~190000 那你在 RAC1 INSERT INTO ... SEQUENCE.NEXTVAL 是150000 RAC2 INSERT INTO ... SEQUENCE.NEXTVAL 是170000 这样连到两台节点的INSERT不会插入到同一索引块(因为索引键值是顺序的) 但是这里要注意:因为SEQUENCE预存在内存,可能存在着被PAGE OUT或者内存丢失. ⊙ ORDER和NOORDER 这个参数表示我的SEQUENCE必须是连续的 那如前面C
显示全部
相似文档