Oracle从新手到高手
上QQ阅读APP看书,第一时间看更新

2.1 Oracle核心组件

数据字典是Oracle数据库的核心组件,在详细了解数据库的核心组件之前,还需要先来了解一下Oracle体系结构的基础内容。

2.1.1 Oracle体系结构概述

完整的Oracle数据库系统通常由两部分组成—实例(INSTANCE)和数据库(DATABASE)。数据库是一系列物理文件的集合(数据文件、控制文件、联机日志、参数文件等);实例则是一组Oracle后台进程/线程以及在服务器分配的共享内存区。

实例和数据库有时可以互换使用,不过二者的概念完全不同。实例和数据库之间的关系是:数据库可以由多个实例装载和打开,而实例可以在任何时间点装载和打开一个数据库。准确地讲,一个实例在其生存期中最多只能装载和打开一个数据库,如果想再打开其他数据库,必须先丢弃这个实例,并创建一个新的实例。

数据库的主要功能是保存数据,实际上可以将数据库看作存储数据的容器。数据库的存储结构也就是数据库存储数据的方式,Oracle数据库的存储结构分为逻辑存储结构和物理存储结构,这两部分是相互独立但又密切相关的。逻辑存储结构主要用于描述在Oracle内部的组织和管理数据的方式,而物理存储结构则用于描述在Oracle外部,即操作系统中组织和管理数据的方式。

Oracle对逻辑存储结构和物理存储结构的管理是分别进行的,两者之间不直接影响。因此Oracle的逻辑存储结构能够适用于不同的操作系统平台和硬件平台,而不需要考虑物理实现方式。

在启动Oracle数据库服务器时,实际上是在服务器的内存中创建一个Oracle实例(即在服务器内存中分配共享内存并创建相关的后台进程),然后由这个实例来访问和控制磁盘中的数据文件。下图以最简单的形式展示了Oracle实例和数据库。Oracle有一个很大的内存块,称为系统全局区(SGA)。

当用户连接数据库时,实际上是连接到实例中,由实例负责与数据库通信,然后再将处理结构返回给用户。

Oracle数据库服务器的后台进程的数量与其工作模式密切相关。Oracle服务器处理请求有两种最常见的方式,分别是专用服务器连接和共享服务器连接。在专用服务器连接下,Oracle数据库会为每个用户请求分配一个专用服务器进程为其提供服务,当用户请求结束后,对应的服务器进程也相应地被终止。如果同时存在大量的用户请求,则需要同等数量的服务器进程提供服务。

而在共享服务器连接下,Oracle数据库始终保持一定数量的服务器进程,用户的请求首先被连接一个称为“调度程序”的特殊服务进程,然后由调度程序为用户分配一个服务器进程为其提供服务。这意味着只需要使用很少的服务器进程,便可以为多个用户进程提供服务。

2.1.2 数据字典

数据字典是Oracle数据库的核心组件,它由一系列对于用户而言是只读的基础表和视图组成,它保存了关于数据库本身以及其中存储的所有对象的基本信息。可以认为数据字典记录了数据库实例自身的重要信息。

对数据字典的管理和维护由Oracle系统负责,任何数据库用户都无法对数据字典中的内容进行修改,但是数据库用户可以查看数据字典中的内容。为了方便用户查看数据字典中的信息,数据字典中的信息也是通过表和视图的形式组织起来的,数据字典和视图都保存在SYSTEM表空间中。

数据字典中的信息,实际上是保存在基本表中的,并且只有Oracle系统才有权读取和写入基础表。基础表中存储的信息通常是经过加密处理的。视图是一种虚拟表,它本身并不包含数据,其中的数据是经过处理后的基本表中的数据。数据字典中视图的作用是将表中的各种信息进行分类,以方便用户获取其中的数据。大多数情况下,用户可以通过数据字典视图来获取与数据库相关的信息,而不需要访问数据字典表。

在Oracle实例运行期间,需要从数据字典表中读取信息,用于判断用户要访问的对象是否存在等信息。同时,Oracle还不断地向数据字典表中写入数据,以反映用户对数据库以及数据库中保存的各对象所做的修改。例如,用户创建了一个表,这时系统将在数据字典中记录该表的结构信息和存储信息等。

对于数据库用户而言,数据字典中的视图好像一本关于当前Oracle数据库的参考手册,可以通过SELECT语句查询。数据库用户由于权限不同,所能访问的数据字典视图的数量和类型也不同。用户使用的数据字典视图大致可以分为三类,并且各种类型的视图以不同名称的前缀表示。这三类数据字典视图介绍如下。

※ USER视图:USER视图就是以USER_字符为名称前缀的数据字典视图。每个数据库用户都有一组属于自己的视图,在USER视图中包含了属于该用户的所有对象的信息。

※ ALL视图:ALL视图就是以ALL_字符为名称前缀的数据字典视图。ALL数据字典视图是USER视图的扩展,在ALL视图中记录了属于该用户的所有对象的信息,以及该用户可以访问的属于其他用户的对象信息。

※ DBA视图:DBA视图就是以DBA_字符为名称前缀的数据字典视图。在DBA数据字典视图中记录了全部数据库对象的信息。

在数据库实例的整个运行过程中,Oracle会始终在数据字典中维护一系列的“虚拟”表,在其中记录与数据库活动相关的性能统计信息,这些虚拟表称为“动态性能表”。

动态性能表不是固定的表,它是在Oracle实例启动时动态创建的,并向其中写入信息;而当Oracle关闭时,动态性能表将被丢弃。所有的动态性能表的名称都是以V$为开头的。Oracle自动在动态性能表的基础上创建一个视图,这些视图称为“动态性能视图”。

例如,动态性能视图V$SGA记录了系统全局存储区SGA的信息,通过查询该动态性能视图,用户可以获取当前数据库实例的全局存储区SGA的信息。