- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Oracle编程艺术 笔记
数据库体系结构,数据库如何工作,有什么表现
并发控制是什么,并发控制意味这什么
必须恰当的设计性能、可扩缩性和安全性这些开发时应该考虑的问题
特定的数据库有什么样的特性,如何来使用它
好的SQL语句
疑惑
数据库能实现的为什么不让数据库做,这样我的应用就可以部署在任何地方,我想没有哪个服务器不支持Oracle吧,哪为什么还要自己再实现一次呢?
存在效率低下的SQL;有大量过程性代码,但这些工作原本用一条SQL 语句就足够了;为了保持数据库独立性,没有
用到新特性
如何对SQL 调优而不修改SQL。这看起来很神奇,不过在Oracle 10g 中确实可以办得到,从很大程度上讲堪称首创。
如何测量性能。
如何查看哪里出现了瓶颈。
如何建立索引,对什么建立索引。
如此等等。
关键
数据库通常是应用的基石。如果它不能很好地工作,那其他的都没有什么意义了
SGV系统全局区(System Global Area)Oracle将解析、已编译好的SQL放在这里,尽量使用绑定变量,可以很好的利用SGV来平滑操作
绑定变量:select * from table where id=:id
软解析
硬解析:占用更多的资源,锁的时间更长
oracle锁:
只在修改的时候才加锁。正常情况下不会升级到块级锁和表级锁,但是有一个另外:就是两段提交的一段很短的时间内;
如果仅仅是读数据,Oracle绝不会对数据加锁,不会因为简单的读操作在数据行上锁定;
区别于别的数据的一点:写入器不会阻塞读取器
书中原文:
以下是对Oracle 锁定策略的总结:
Oracle 只在修改时才对数据加行级锁。正常情况下不会升级到块级锁或表级锁(不过两段提交期间的一段很短的时间内除外,这是一个不常见的操作)。
如果只是读数据,Oracle 绝不会对数据锁定。不会因为简单的读操作在数据行上锁定。
写入器(writer)不会阻塞读取器(reader)。换种说法:读(read)不会被写(write)阻塞。这一点几乎与其他所有数据库都不一样。在其他数据库中,读往往会被写阻塞。尽管听上去这个特性似乎很不错(一般情况下确实如此),但是,如果你没有充分理解这个思想,而且想通过应用逻辑对应用施加完整性约束,就极有可能做得不对。第7 章介绍并发控制时还会更详细地讨论这个内容。
写入器想写某行数据,但另一个写入器已经锁定了这行数据,此时该写入器才会被阻塞。读取器绝对不会阻塞写入器。
开发应用时必须考虑到这些因素,而且还要认识到这个策略是Oracle 所独有的,每个数据库实现锁定的方法都存在细微的差别。即使你在应用中使用最通用的SQL,由于各数据库开发商采用的锁定和并发控制模型不同,你的应用也可能有不同的表现。倘若开发人员不了解自己的数据库如何处理并发性,肯定会遇到数据完整性问题。(开发人员从另外某种数据库转向Oracle,或者从Oracle 转向其他数据库时,如果没有考虑在应用中采用不同的并发机制,这种情况就尤为常见。)
当然
Oracle 的无阻塞方法有一个副作用,如果确实想保证一次最多只有一个用户访问一行数据,开发人员就得自己做些工作;
Oracle 采用了一种多版本、读一致(read-consistent)的并发模型。Oracle 利用这种机制提供了以下特性:
1.读一致查询:对于一个时间点(point in time),查询会产生一致的结果。
2.非阻塞查询:查询不会被写入器阻塞,但在其他数据库中可能不是这样。
oracle的多版本:
现在假设,我们执行下面这个顺序操作:open :x for select * from test;delete from test;commit;
在同一个会话中(或者也可以在另一个会话中;这同样能很好地工作),再从该表删除所有数据。甚至用COMMIT 提交了删除所做的工作。记录行都没有了,但是真的没有了吗?实际上,还是可以通过游标获取到数据。OPEN 命令返回的结果集在打开的那一刻(时间点)就已经确定。打开时,我们根本没有碰过表中的任何数据块,但答案已经是铁板钉钉的了。获取数据之前,我们无法知道答案会是什么;不过,从游标角度看,结果则是固定不变的。打开游标时,并非Oracle 将所有数据复制到另外某个位置;实际上是DELETE 命令为我们把数据保留下来,把它放在一个称为undo 段(undo segment)的数据区,这个数据区也称为回滚段(rollback segment)。
读一致性(read-consistency)和多版本就是这么回事。如果你不了解Oracle 的多版本机制是怎样工作的,不清楚这意味着什么,你就不可能充分利用O
您可能关注的文档
最近下载
- 三年级新教科版科学《水沸腾了》说课稿.pdf VIP
- 2019一级造价工程师《建设工程技术与计量(水利工程)》真题带答案与解析.doc VIP
- 学会与父母沟通kt_,.ppt VIP
- 脑出血的分子生物学机制.pptx VIP
- 电除颤操作流程-电除颤操作流程.ppt VIP
- 医疗器械委托生产生产放行和上市放行管理制度.docx VIP
- 紫日电气ZVF9V变频器使用手册.docx
- 物流行业深度研究报告:大物流时代系列研究(三),公路港到网络货运平台,传化与满帮为例,探讨我国公路整车物流最优解(202108).pdf VIP
- 新教材 人教A版高中数学选择性必修第一册全册各章节 知识点考点汇总及解题方法提炼.pdf VIP
- 工业机器人及其应用 第三章 工业机器人的末端执行器.ppt VIP
文档评论(0)