- 1、本文档共29页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SQL数据库对象课案
第十四章 其它数据库对象
我们前面学习了表、视图,本章将简要的学习其它数据库对象。
=======
本章主要内容
======
⊙ 创建、维护、使用序列器
⊙ 创建和维护索引
⊙ 创建私用和公用同义词
其中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
您可能关注的文档
- 加强党性修养.ppt
- 加油站应急措施.ppt
- 加油员销售技巧1课件.ppt
- 加油站施工组织设计方案课件.doc
- SPSS的认识和基本运用课案.ppt
- 加气站验收监测报告课件.doc
- 加油站更换油罐隐患整改工程施工方案课件.doc
- SQE实战基础培训课案.ppt
- 加油站标准化评审.doc
- 加气砌块填充墙工程技术交底.docx
- 2025年中国铸管沥青漆喷涂机市场调查研究报告.docx
- 2025至2031年中国聚四氟乙割管料行业投资前景及策略咨询研究报告.docx
- 2025至2031年中国屏蔽箱行业投资前景及策略咨询研究报告.docx
- 2025年中国B级电源电涌保护器市场调查研究报告.docx
- 2025至2031年中国陶瓷印章行业投资前景及策略咨询研究报告.docx
- 2025至2031年中国保冷材料行业投资前景及策略咨询研究报告.docx
- 2025至2031年中国金彩立雕玻璃行业投资前景及策略咨询研究报告.docx
- 2025至2030年中国机箱螺母柱数据监测研究报告.docx
- 2025至2030年中国小GS管装饰头数据监测研究报告.docx
- 2025至2030年中国气动电阻焊机数据监测研究报告.docx
文档评论(0)