1、oracle内核层级
oracle内核由多层组成,主要层级在图1.1中展示。每一层依赖于它下一层的服务,但有时候也会以任何顺序直接调用任何一层。然而,控制层从来不会向上传递堆栈,除了返回调用结果的时候。
下面先看oracle内核各层图:
the oracle call interface(OCI): oracle调用接口是客户端程序连接oracle的最底层。这个接口有明文规定并且提供大部分oracle功能的访问,包括像对象迁移,复杂事务和会话的控制。高级请求的应用可直接调用OCI,这些在oracle其他开发工具中是不提供的。
关于oci的具体解读可以参照:http://blog.csdn.net/changyanmanman/article/details/6856799
the user program interface(UPI):OCI是基于用户程序接口(upi)的,有些UPI功能还不能通过OCI使用。一些oracle的工具实际上可以直接的调用UPI接口。预编译程序也可以调用UPI,但是间接的调SQLLIB 库。预编译程序时未公开的OCI的替代品。
the oracle program interface(OPI):用户程序接口(UPI)是客户端调用堆栈的最底层,oracle程序接口(OPI)是服务器段调用堆栈的最高层。在大多数配置中,使用NET8连接 UPI 和 OPI 。然而,在单任务可执行文件中,是没有间隙的。UPI的调用对应着直接调用OPI。
the comilation layer(KK):这是oracle内核的最高层。这一层负责解析和优化SQL语句,编译PL/SQL程序块。
execution layer(KX):这一层负责处理绑定变量和执行SQL,PL/SQL。。。同时负责触发器,PL/SQL执行时的递归调用。
distributed execution layer(K2):分布式执行层为分布式事务建立了事务分支,并且处理和管理两段式提交。
the network program interface(NPI):远程对象被SQL语句引用,网络程序接口(NPI)发送已经分解的语句组件到远程数据库实例并且接受数据。
the security layer(KZ):这层被编译和执行层调用来 确认请求对象和系统权限。
the query layer(KQ) :这一层为上层提供数据行,特殊情况下,这个查询层负责缓存数据字典中的数据行。为安全层(security layer) 和 编译层(compilation layers)是用。
the recursive program interface(RPI):递归程序接口被用来填充缓存从数据字典读取的数据,行缓冲区递归SQL语句 被以封开调用上下文的形式执行,但是并不在编译层(compilation layer)执行。
the access layer(KA):访问层负责访问数据段,这是内核下半部分的第一层。
the data layer(KD):这一层负责管理和解释在数据库段里的数据块,就像表,集群,索引等。
the transaction layer(KT):这一层负责分配事务的回滚段,数据块中相关事务列表的改变,undo数据生成的回滚段数据块的改变,事务控制特性 如 :保存点 和 一致性读。。这个事务层(KT)也负责空间管理,包括段空闲列表 和 表空间区分配的管理。
the cache layer(KC):缓存层管理数据库的缓冲区高速缓存。它利用操作系统独立的功能实现到数据文件的I/O读写。为本地访问缓冲区高速缓存提供并发控制功能,提供oracle并行服务器的并行缓存管理的实例锁功能,其他主要负责控制日志写入日志缓存区,日志写入日志文件。缓存层同样缓存控制文件信息。
the services layer(KS):服务层提供最低层次的服务,被用于高层次。像是错误捕获,debug,跟踪,参数控制,内存服务等等。特别的,服务层负责一般的并发控制,像latch,等待事件,队列锁和实例锁。这服务层也负责管理后台和用户进程会话,对象状态,内部进程信息,系统统计信息 的 数据结构。
the lock management layer(KJ):这一层负责锁实现的同步,并行服务数据库之间的交流。
the generic layer(KG):普通层提供了更高层次(像链表) 的 普通数据结构。更有兴趣的是 库缓存和 共享池(或会话内存)的内存分配堆。
the operating system dependencies(S):oracle使用操作系统的功能来实现I/O。进程调度,内存管理和其他的操作。实现的细节有操作系统决定。所以这些细节被分离为一个单独的层。