`
xiaomogui
  • 浏览: 242706 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

oarcle select查询过程工作原理

阅读更多

 

 第一步:客户端把语句发给服务器端执行。

  当我们在客户端执行select语句时,客户端会把这条SQL语句发送给服务器端,让服务器端的进程来处理这语句。也就是说,Oracle客户端是不会做任何的操作,他的主要任务就是把客户端产生的一些SQL语句发送给服务器端。虽然在客户端也有一个数据库进程,但是,这个进程的作用跟服务器上的进程作用事不相同的。服务器上的数据库进程才会对SQL语句进行相关的处理。不过,有个问题需要说明,就是客户端的进程跟服务器的进程是一一对应的。也就是说,在客户端连接上服务器后,在客户端与服务器端都会形成一个进程,客户端上的我们叫做客户端进程;而服务器上的我们叫做服务器进程。所以,由于所有的SQL语句都是服务器进程执行的,所以,有些人把服务器进程形象地比喻成客户端进程的“影子”。

  第二步:语句解析。

  当客户端把SQL语句传送到服务器后,服务器进程会对该语句进行解析。同理,这个解析的工作,也是在服务器端所进行的。虽然这只是一个解析的动作,但是,其会做很多“小动作”。

  1、查询高速缓存。服务器进程在接到客户端传送过来的SQL语句时,不会直接去数据库查询。而是会先在数据库的高速缓存中去查找,是否存在相同语句的执行计划。如果在数据高速缓存中,刚好有其他人使用这个查询语句的话,则服务器进程就会直接执行这个SQL语句,省去后续的工作。所以,采用高速数据缓存的话,可以提高SQL语句的查询效率。一方面是从内存中读取数据要比从硬盘中的数据文件中读取数据效率要高,另一方面,也是因为这个语句解析的原因。

  不过这里要注意一点,这个数据缓存跟有些客户端软件的数据缓存是两码事。有些客户端软件为了提高查询效率,会在应用软件的客户端设置数据缓存。由于这些数据缓存的存在,可以提高客户端应用软件的查询效率。但是,若其他人在服务器进行了相关的修改,由于应用软件数据缓存的存在,导致修改的数据不能及时反映到客户端上。从这也可以看出,应用软件的数据缓存跟数据库服务器的高速数据缓存不是一码事。

  2、语句合法性检查。

  当在高速缓存中找不到对应的SQL语句时,则数据库服务器进程就会开始检查这条语句的合法性。这里主要是对SQL语句的语法进行检查,看看其是否合乎语法规则。如果服务器进程认为这条SQL语句不符合语法规则的时候,就会把这个错误信息,反馈给客户端。在这个语法检查的过程中,不会对SQL语句中所包含的表名、列名等等进行SQL他只是语法上的检查。

  3、语言含义检查。

  若SQL语句符合语法上的定义的话,则服务器进程接下去会对语句中的字段、表等内容进行检查。看看这些字段、表是否在数据库中。如果表名与列名不准确的话,则数据库会就会反馈错误信息给客户端。

  所以,有时候我们写select语句的时候,若语法与表名或者列名同时写错的话,则系统是先提示说语法错误,等到语法完全正确后,再提示说列名或表名错误。若能够掌握这个顺序的话,则在应用程序排错的时候,可以节省时间。

  4、获得对象解析锁。

  当语法、语义都正确后,系统就会对我们需要查询的对象加锁。这主要是为了保障数据的一致性,防止我们在查询的过程中,其他用户对这个对象的结构发生改变。对于加锁的原理与方法,我在其他文章中已经有专门叙述,在这里就略过不谈了。

  5、数据访问权限的核对。

  当语法、语义通过检查之后,客户端还不一定能够取得数据。服务器进程还会检查,你所连接的用户是否有这个数据访问的权限。若你连接上服务器的用户不具有数据访问权限的话,则客户端就不能够取得这些数据。故,有时候我们查询数据的时候,辛辛苦苦地把SQL语句写好、编译通过,但是,最后系统返回个“没有权限访问数据”的错误信息,让我们气半死。这在前端应用软件开发调试的过程中,可能会碰到。所以,要注意这个问题,数据库服务器进程先检查语法与语义,然后才会检查访问权限。

  6、确定最佳执行计划。

  当语句与语法都没有问题,权限也匹配的话,服务器进程还是不会直接对数据库文件进行查询。服务器进程会根据一定的规则,对这条语句进行优化。不过要注意,这个优化是有限的。一般在应用软件开发的过程中,需要对数据库的sql语言进行优化,这个优化的作用要大大地大于服务器进程的自我优化。所以,一般在应用软件开发的时候,数据库的优化是少不了的。

  当服务器进程的优化器确定这条查询语句的最佳执行计划后,就会将这条SQL语句与执行计划保存到数据高速缓存。如此的话,等以后还有这个查询时,就会省略以上的语法、语义与权限检查的步骤,而直接执行SQL语句,提高SQL语句处理效率。

 

第三步:语句执行。

  语句解析只是对SQL语句的语法进行解析,以确保服务器能够知道这条语句到底表达的是什么意思。等到语句解析完成之后,数据库服务器进程才会真正的执行这条SQL语句。

  这个语句执行也分两种情况。一是若被选择行所在的数据块已经被读取到数据缓冲区的话,则服务器进程会直接把这个数据传递给客户端,而不是从数据库文件中去查询数据。若数据不在缓冲区中,则服务器进程将从数据库文件中查询相关数据,并把这些数据放入到数据缓冲区中。

  这里仍然要注意一点,就是Oracle数据库中,定义了很多种类的高速缓存。像上面所说的SQL语句缓存与现在讲的数据缓存。我们在学习数据库的时候,需要对这些缓存有一个清晰的认识,并了解各个种类缓存的作用。这对于我们后续数据库维护与数据库优化是非常有用的。

  第四步:提取数据。

  当语句执行完成之后,查询到的数据还是在服务器进程中,还没有被传送到客户端的用户进程。所以,在服务器端的进程中,有一个专门负责数据提取的一段代码。他的作用就是把查询到的数据结果返回给用户端进程,从而完成整个查询动作。

  从这整个查询处理过程中,我们在数据库开发或者应用软件开发过程中,需要注意以下几点:

  一是要了解数据库缓存跟应用软件缓存是两码事情。数据库缓存只有在数据库服务器端才存在,在客户端是不存在的。只有如此,才能够保证数据库缓存中的内容跟数据库文件的内容一致。才能够根据相关的规则,防止数据脏读、错读的发生。而应用软件所涉及的数据缓存,由于跟数据库缓存不是一码事情,所以,应用软件的数据缓存虽然可以提高数据的查询效率,但是,却打破了数据一致性的要求,有时候会发生脏读、错读等情况的发生。所以,有时候,在应用软件上有专门一个功能,用来在必要的时候清除数据缓存。不过,这个数据缓存的清除,也只是清除本机上的数据缓存,或者说,只是清除这个应用程序的数据缓存,而不会清除数据库的数据缓存。

  二是绝大部分SQL语句都是按照这个处理过程处理的。我们DBA或者基于Oracle数据库的开发人员了解这些语句的处理过程,对于我们进行涉及到SQL语句的开发与调试,是非常有帮助的。有时候,掌握这些处理原则,可以减少我们排错的时间。特别要注意,数据库是把数据查询权限的审查放在语法语义的后面进行检查的。所以,有时会若光用数据库的权限控制原则,可能还不能满足应用软件权限控制的需要。此时,就需要应用软件的前台设置,实现权限管理的要求。而且,有时应用数据库的权限管理,也有点显得繁琐,会增加服务器处理的工作量。因此,对于记录、字段等的查询权限控制,大部分程序涉及人员喜欢在应用程序中实现,而不是在数据库上实现

 

 

转载: http://oracle.chinaitlab.com/serial/758828_2.html

分享到:
评论

相关推荐

    OARCLE数据库归档模式的切换

    1. **关闭数据库**:首先需要关闭数据库实例,以避免切换过程中数据的一致性问题。 - 使用`SVRMGR> shutdown immediate`命令关闭数据库。 2. **启动到Mount状态**:在切换之前,需要将数据库启动到Mount状态。 - ...

    oarcle 查询死锁

    SELECT object_name, machine, s.sid, s.SERIAL#, p.spid, s.osuser, s.program, s.STATUS, s.ACTION, p.SERIAL#, l.SESSION_ID FROM v$locked_object l, dba_objects o, v$sessions s, v$process p ...

    oarcle数据库

    而SELECT是最常用的查询语句,用于从数据库中检索数据。在DML操作中,我们还可以使用WHERE子句来设置条件,以精确地定位我们要操作的数据。 DDL(Data Definition Language)是用于创建和修改数据库结构的语言,...

    OARCLE 11g RAC + ASM安装手册

    在了解如何使用OARCLE 11g RAC + ASM安装手册之前,我们需要先对Oracle的RAC和ASM技术进行一个简要的了解。RAC(Real Application Clusters)是Oracle数据库的一项高可用性技术,它允许多个Oracle实例共享同一个物理...

    oarcle培训资料大全

    数据库的逻辑结构是理解Oracle工作原理的关键。Oracle采用关系模型,数据以表格形式存储,每个表由列和行组成。表可以相互关联,形成复杂的数据库模式。此外,还有索引、视图、序列、存储过程等概念,它们在数据查询...

    Oracle过程中创建视图实例

    ### Oracle过程中创建视图实例 在Oracle数据库管理中,通过PL/SQL块执行动态SQL语句是一项非常重要的技能。其中一个核心功能就是`EXECUTE IMMEDIATE`,它允许开发者在运行时构建并执行SQL语句。这在需要动态生成SQL...

    oarcle管理工具plsql PLSQL ORACLE TOOL

    PL/SQL结合了SQL的强大查询功能和过程编程语言的控制结构,为数据库管理员和开发人员提供了高效、稳定的数据处理环境。 PL/SQL的主要组成部分包括声明部分、执行部分和异常处理部分。在声明部分,你可以定义变量、...

    重装OARCLE文档

    在IT领域,重装Oracle数据库是一项复杂而细致的工作,尤其对于企业级应用而言,确保数据安全与系统稳定性至关重要。本文将深入探讨“重装Oracle”过程中必须注意的关键点,包括但不限于卸载步骤、注册表清理、环境...

    java实现导出oarcle表结构到excel

    3. **创建工作表**:在工作簿中添加新的工作表,可以对应于一个数据库中的表。 4. **遍历数据库表结构**:从`ConnectionOracle.java`获取的元数据,填充Excel工作表的行和列。 5. **设置单元格样式和数据**:包括...

    oarcle_e10575.pdf

    文档的这些特点对于理解其内容和背景非常重要,尤其是对于数据库管理员和安全专家在实际工作中处理Oracle数据库安全性的参考。 综合这些信息点,我们可以得出文档的知识点主要集中在Oracle数据库的安全性方面,涵盖...

    oarcle 导入导出

    1、EXP: 有三种主要的方式(完全、用户、表) 1、完全: EXP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y 如果要执行完全导出,必须具有特殊的权限 2、用户模式: EXP SONIC/SONIC BUFFER=...

    oracle相关权限设置

    在管理大量存储过程时,可以使用以下脚本来批量授予SELECT权限: ```sql select 'grant select on ' || tname || ' to FMBUSINESS_HX;' from tab where tname not like 'BIN%'; ``` 此脚本会生成一系列GRANT语句,...

    Hibernate操作Oarcle中Clob、Blob字段小结

    理解这些类型的实现可以帮助我们更深入地了解数据的存储和处理过程。 6. **工具使用**: - 可能会提到一些开发工具,如Eclipse、IntelliJ IDEA中如何配置和调试与Clob和Blob相关的代码,或者使用数据库管理工具如...

    Oarcle ADF Security下配置不受保护的JSP页面

    Oracle ADF(Application Development Framework)安全配置是Oracle Fusion Middleware中一个关键部分,它提供了一种强大的方式来构建安全的企业级应用程序。在Oracle ADF中,安全性通常涉及到对资源的访问控制,...

    Oracle下导出某用户所有表的方法

    select 'exp username/ffffff@yourdb TABLES='||table_name||' FILE='||table_name||'.dmp TRIGGERS=N' from user_tables; 最后,我们需要关闭 spool 模式,以便输出结果。 spool off; 完成后,我们可以找到 c:\...

    Python库 | cx_Oracle-6.0.1-cp35-cp35m-manylinux1_x86_64.whl

    cx_Oracle-6.0.1-cp35-cp35m-manylinux1_x86_64.whl是一个Python wheel文件,这种格式的文件是预编译的Python包,可以直接在安装环境中使用,无需再进行编译步骤,极大地简化了安装过程。 首先,我们来深入了解cx_...

    通过duplicate搭建oracle dataguard环境

    比如禁用自动工作量库(AWR)的刷新表功能(`_awr_disabled_flush_tables`)、调整优化器的行为(`_optimizer_extended_cursor_sharing`)等。 #### 四、使用RMAN进行Duplicate操作 接下来是使用RMAN工具来执行Duplicate...

    Oracle性能调优

    Oracle性能调优是一个复杂而关键的过程,涉及到...总之,Oracle性能调优是一个系统性的工程,需要深入理解数据库的工作原理,并结合实际环境进行有针对性的分析和优化。持续监控和调整是保证数据库高效运行的关键。

    利用Oarcle事件触发器提高“军卫一号”系统的安全性.pdf

    【标题】:“利用Oracle事件触发器提高‘军卫一号’系统的安全性” 【描述】:本文主要探讨了如何通过Oracle数据库的事件触发器增强“军卫一号”医院信息系统的安全性,针对系统中存在的用户权限管理漏洞提出解决...

    OracleLinux6.9安装详细图解.doc

    Oracle Linux 6.9 系统的安装是一个复杂的过程,需要用户具备一定的计算机知识和经验。本文将详细介绍 Oracle Linux 6.9 系统的安装过程,并提供一些有用的提示和注意事项,以帮助用户顺利完成安装。 一、选择安装...

Global site tag (gtag.js) - Google Analytics