[Oracle体系结构与基本概念.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[Oracle体系结构与基本概念

Oracle体系结构与基本概念 Oracle有为各种编程语言实现的API。 Oracle优化器,是oracle一个软件层,与最大化SQL语句性能相关。 Oracle服务器体系结构,包括内存、进程以及用来提供数据库服务相互交互的文件。 Oracle模式对象,包括表、索引、分区及用来实现数据模型 的内容。 OracleAPI OCI 是C语言的API JDBC是通用的API ,java数据库连接器 ADO.NET是.net程序与数据库进行通信的API。 每一条SQL语句在客户端都表现为一个上下文区域或者一个游标。 (1)创建游标。游标是内存中的一块区域,用来保存当前打开的SQL语句的定义信息。 (2)在Oracle共享内存中进行检索,确认是否存在这条SQL语句的缓存副本 (3)解析SQL语句。解析SQL语句涉及检查SQL语句的语法,对象引用及调用Oracle优化器来确定查询计划。 (4)为绑定变量赋值。在SQL语句执行之前,所有绑定变量的值都必须黏附到这条SQL语句上。 (5)执行SQL语句。如果这不是一条查询语句,它的执行过程包含DML语句或者DDL语句的执行。如果是查询语句,执行与 将为语句的数据提取做准备。 (6)提取记录。对于查询语句来说,数据提取意味着从结果集提取和条或者多条记录。 (7)关闭游标。这一步涉及释放与此游标相关的所有内存以及其他资源(尽管这个游标的共享部分可能仍然保留在oracle的共享内存中)。 创建游标 创建游标。游标是内存中的一块区域,用来保存当前打开的SQL语句的定义信息。 包括语句的已经解析的与未经解析的内容、执行计划及一个指向当前记录的指针。 当SQL语句执行完成时,与此游标相关的内容可以出于其他目的被释放,也可以被保存以供再次执行时使用。在java的jdbc中一个游标等价于一个Statement对象或Prepared Statement对象。 检查缓存的SQL语句 Oracle维护了一个缓存,来保存最近执行的SQL语句以及对应的执行计划。这个缓存保存在共享内存的一个区域中:共享池(shared pool)的SQL area中。每提交一个SQL语句的执行请求,oracle都会在这个缓存中检索匹配的语句。如果匹配到oracle就会用保存在这个缓存中的执行计划,从而避免解析过程中涉及到的大部分开销。 解析SQL语句 检查SQL语法是否有效。即检查关键字与操作符是否有效地被正确使用。 检查SQL语句在语义上是否有效。即这条SQL语句引用的所有数据库对象(即表和字段)是否都有效。 检查用户是否有对所有相关对象执行给定操作的安全权限。 确定SQL语句的执行计划。执行计划描述oracle访问和修改数据时涉及的一系列步骤。这是oracle优化器来完成的。解释操作是一个昂贵的操作,它的开销常常会被高IO请求带来更大开销所掩盖。 关联绑定变量 SQL语句中可以包含变量,它们在每次执行时都可以变化。通常这些变量是SQL语句的参数。该SQL语句定义将要被处理的记录或者将要被插入或更新的新值。我们以“字面量”或绑定“变量”的方式来指定这些变量。 使用“字面量” select * from employee where employee_id= 206; 这里的206就是字面量。 不过请注意,SQL语句必须完全一致才能在共享池中找到匹配项。因为每次执行时employee_id可能都不一样,所以几乎总是无法在共享池中找到匹配的语句,从而导致这个语句每次都需要重新解析。 使用“字面量”的坏处: 每次改变字面量的值,都必须请求对此SQL语句进行重新解析 当请求解析时,在共享池中找到一条匹配的SQL语句的可能性将非常小。 SQL缓存将被“仅用一次”的SQL语句填满。可能需要更大的容积,但事实上并不需要这么多。 当一个oracle会话想要在共享池中新增一条SQL语句时,它必须获取一个oracle内部锁(闩锁或互斥),在极端情况下,这会导致闩锁或互斥的争用,进而导致性能瓶颈。 使用“绑定变量”的方法来指定这些变量部分: 绑定变量是对这些变量的固定引用。它们可以被定义在编程语言或查询工具的任何地方。在大部分编程语言或工具中,绑定变量都需要添加一个前缀(冒号“:”)。、 如: SQLVARIABLE bind_employee_number NUMBER SQLBEGIN :bind_employee_number := 206; END; SQLSELECT * FROM employee where employee_id = :bind_employee_number 使用绑定变量有两个好处: 如果绑定变量的值发生变化,在重新执行这条SQL语句的时候,不需要创建一个新的游标或重新解析这条SQL语句

文档评论(0)

xiayutian80 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档