`
kaidi0314
  • 浏览: 86115 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

oracle数据库工作查询原理

 
阅读更多
http://database.ctocio.com.cn/tips/141/8244141.shtml

【IT专家网独家】假如,我们现在利用Select语句从数据库查询数据,Oracle数据库是如何运作的呢?从中我们可以领悟到什么呢?下面,就结合一条简单的select语句,看看Oracle数据库后台的运作机制。这对于我们之后的系统管理与故障排除非常有帮助。
  第一步:客户端把语句发给服务器端执行。
  当我们在客户端执行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语句的开发与调试,是非常有帮助的。有时候,掌握这些处理原则,可以减少我们排错的时间。特别要注意,数据库是把数据查询权限的审查放在语法语义的后面进行检查的。所以,有时会若光用数据库的权限控制原则,可能还不能满足应用软件权限控制的需要。此时,就需要应用软件的前台设置,实现权限管理的要求。而且,有时应用数据库的权限管理,也有点显得繁琐,会增加服务器处理的工作量。因此,对于记录、字段等的查询权限控制,大部分程序涉及人员喜欢在应用程序中实现,而不是在数据库上实现。
分享到:
评论

相关推荐

    Oracle数据库的运行原理

    Oracle数据库是一种广泛使用的大型关系型数据库管理系统,其运行原理涉及多个层面,包括会话的建立、事务的执行、数据缓存、重做日志和还原机制等。理解这些原理对于Oracle数据库的运维至关重要。 首先,当一个应用...

    从一条select语句看oracle数据库查询原理

    这篇文章将一步步地解释Oracle数据库的查询原理,帮助读者更好地理解Oracle数据库的工作机制。 第一步:客户端把语句发给服务器端执行 客户端发射select语句时,客户端会把这条SQL语句发送给服务器端,让服务器端...

    ORACLE数据库索引工作原理

    通过两个图形说明了在oracle数据库中b-tree索引和位图索引的工作原理

    ORACLE数据库备份技术的原理及实现

    本文主要探讨了Oracle数据库的备份原理,特别是Oracle Standby数据库的实现方式,这是一种高效且适用于实时处理需求的容灾备份策略。 Oracle Standby数据库的工作原理是通过创建一个与主数据库(Primary数据库)...

    Oracle数据库.pdf

    Oracle数据库管理是数据库管理员(DBA)日常工作中不可或缺的一部分,涉及到用户管理、系统参数配置、表空间操作等多个方面。在Oracle环境中,以下是一些关键的知识点: 1. **用户管理**: - `ALTER USER`语句用于...

    Oracle数据库体系结构( 中文详细版)

    本文将详细解析Oracle数据库的体系结构,帮助读者深入理解其内部工作原理。 Oracle数据库的核心架构可以分为以下几个主要部分: 1. **数据文件**(Data Files):数据文件是Oracle数据库存储实际数据的地方,包含...

    Oracle数据库原理课件.rar

    掌握Oracle数据库原理不仅有助于你理解数据库的工作方式,还能为你的职业生涯打下坚实的基础,无论你是想成为数据库管理员、开发人员还是数据分析师,这都是不可或缺的知识。通过本课件的学习,相信你将对Oracle...

    Oracle数据库资料大全

    这份"Oracle数据库资料大全"将详细解读以上各个方面,帮助读者深入理解Oracle数据库的原理、操作和最佳实践,无论你是初学者还是资深DBA,都能从中受益。通过阅读并实践其中的内容,你将能够熟练地驾驭这个强大的...

    Oracle数据库课程大作业.pdf

    Oracle数据库是一种广泛应用于企业和组织的大型关系型数据库管理系统,它提供了高效的数据存储、管理和查询功能。...通过完成这些大作业,学生可以深入理解Oracle数据库的工作原理及其在企业级应用中的重要性。

    oracle数据库原理与设计知识点

    根据给定文件内容,以下是关于Oracle数据库原理与设计的知识点总结: 首先,数据库系统的基础概念是理解Oracle数据库的前提。数据是现实世界实体的符号表示,而数据库则是组织有序、可共享、长期存储在计算机内的...

    Oracle数据库系统原理++第2版

    本书包括数据库基本理论以及Oracle数据库系统知识两部分。主要包括关系模型基本理论,ER图...强调在学习各种技能的同时,理解关系型数据库理论的一些本质内容,能够对Oracle数据库的体系结构及运作原理有深层次的理解。

    oracle数据库AB试卷.rar

    通过本课程学习,使学生增强对Oracle数据库的认识,加深理解和掌握Oracle数据库相关原理和操作。试卷全面检查了学生对Oracle数据库知识点的掌握情况以及利用所学理论解决实际问题的能力。通过设置选择题、设计题、...

    Excel通过VBA连接Oracle数据库

    下面我们将详细探讨如何使用VBA连接Oracle数据库以及其背后的原理。 首先,你需要安装Oracle的客户端软件,如ODBC(Open Database Connectivity)驱动,这将允许Excel与Oracle服务器通信。ODBC是Microsoft提供的一...

    易语言oracle数据库连接模块源码

    易语言是一种专为中国人设计的编程语言,...无论是简单的数据查询,还是复杂的业务逻辑处理,都能借助易语言和Oracle数据库连接模块实现。对于初学者,理解这些基本原理并结合实践,将有助于他们更好地掌握数据库编程。

    手工创建oracle数据库

    手工创建Oracle数据库是一项复杂而细致的工作,需要深入理解Oracle数据库的架构原理和配置选项。通过以上分析,我们可以看到,无论是环境变量的设置,还是PFILE文件的编写,每一个细节都可能直接影响到数据库的稳定...

    oracle数据库故障紧急处理预案.pdf

    Oracle 数据库故障紧急处理预案 Oracle 数据库故障紧急处理...我们需要了解数据库的结构和工作原理,以便快速地对故障进行修复和恢复。同时,我们也需要经常进行数据库备份,以便在故障发生时能够快速地恢复数据库。

    数据库系统原理及应用Oracle版

    《数据库系统原理及应用Oracle版》是一本深入探讨数据库理论与Oracle实际操作的教材,适合对数据库有深厚兴趣或在工作中需要使用Oracle数据库的读者。本书涵盖了数据库的基础知识、Oracle数据库管理系统的核心特性...

    Oracle数据库异构服务原理及实例说明

    2. SQL服务:此服务允许用户直接在Oracle数据库中运行SQL查询,这些查询会扩展到非Oracle数据库。这使得用户可以使用熟悉的Oracle SQL语法来访问和操作不同类型的数据库,无需学习新的数据库查询语言。 异构服务的...

    ORACLE 数据库构架图

    这张图片格式的框架图对于理解Oracle数据库的工作原理和各个组件的功能至关重要。Oracle数据库是全球广泛使用的大型企业级数据库管理系统,它提供了复杂的数据存储、管理和处理能力。下面将详细解析Oracle数据库架构...

Global site tag (gtag.js) - Google Analytics