Oracle学习(二) --- 体系结构

Oracle Database 12c 具有丰富的、强大的体系结构。Oracle数据库的体系结构决定了Oracle如何使用网络、磁盘和内存。

1、存储结构

Oracle数据库的储存结构分为物理储存结构和逻辑储存结构,这两种储存结构既相互独立又相互联系。对于DBA而言,必须对这两种储存结构有清晰的理解,并且要清楚在一个具体数据库应用系统中,这两种储存结构的具体应对关系,否则就不能进行正常的管理操作、数据库备份与恢复、性能优化等。

1.1、数据文件

Oracle数据库有一个或多个物理的数据文件。数据库的数据文件包含全部数据库数据。逻辑数据库结构(如表、索引)的数据物理地储存在数据库的数据文件中。

数据文件其特点如下:

  • 每一个数据文件只与一个数据库相联系
  • 一个表空间可包含一个或多个数据文件,一个数据文件只能属于一个表空间
  • 当数据库容量越界时,数据文件能够自动扩展。

进行数据库操作时,系统将从数据文件中读取数据,并储存在Oracle的内存缓冲区中。新建或更新的数据不必立即写入到数据文件中,而是把数据临时存放到内存中,由数据库写入进程(DBWR)决定在适当的时间一次性写入到数据文件中。这样可以大大降低访问磁盘的次数,从而提高系统性能。

1.2、表空间

表空间是数据库的逻辑划分,一个数据库在逻辑上由多个表空间组成。表空间相当于一个容器,用于将不同类型的数据组织在一起。表空间中的数据在物理上是储存在数据文件中的,一个表空间对应一个或多个数据文件。如果表空间只包含一个数据文件,那么所有数据都将存储在这个数据文件中。如果表空间对应多个数据文件,那么数据将被划分为几部分,分别存放在这些数据文件中。

2、数据库实例

Oracle数据库系统指具有管理Oracle数据库功能的计算机系统。每一个运行的Oracle数据库都对应一个Oracle实例,一个Oracle实例为存取和控制数据库的软件机制。当数据库服务器上的一个数据库启动时,Oracle将分配一块内存区间,叫做系统全局区(SGA),并启动一个或多个Oracle进程。因此实例是一组内存结构和后台进程的集合。

用户访问数据库的操作是通过实例来完成的。实例通过后台进行与数据库中的文件进行交互,将用户修改过的或新增加的数据写入文件,而用户对数据的所有访问都是在实例的内存结构中进行的。数据位于内存中,用户读写内存的速度要比直接读写磁盘快得多,而且内存中的数据可以在多个用户之间共享,故引入实例在某个方面可以提高数据访问的并发性。

当数据库服务器启动时,首先启动实例,然后加载并打开数据库。当用户访问数据库时,数据库服务器便为用户进程启动一个服务器进程,负责处理用户进程的所有请求,例如讲用户访问的数据从数据文件读到内存中。只有数据管理员才能启动实例,并打开数据库。数据库被打开后,数据库管理员可以将数据库关闭,此时用户就无法访问数据库中的数据。

为了区分不同的实例,每个实例都有一个系统标识符SID,通常SID与数据库同名。每个服务器进程的命名也与SID相匹配。

3、内存结构

内存结构是Oracle数据库体系结构中最为重要的部分之一,内存也是影响数据库性能的主要因素。在Oracle数据库中,服务器内存的大小直接影响数据库的运行速度,特别是多个用户连接数据库时,服务器必须有足够的内存支持,否则有的用户可能连接不到服务器,或查询速度明显下降。

当时实例启动时,系统为实例分配了一段内存空间,并启动若干后台进程。内存空间分成不同的部分,分别用来储存不用的信息,具体如下:

  • 程序代码
  • 连接会话的信息
  • 进程通信和共享的相关信息
  • 程序运行过程中的信息(例如当前查询的状态等)
  • 缓冲区中的数据,如用户要访问的数据、重做日志等。这部分也叫作SGA

当用户发出一条SQL语句时,首先由服务器进程对用户的SQL语句进行语法分析并执行,然后将数据从数据文件读入到系统的数据缓存区,修改后的数据由服务器进程写回到数据文件中。按照系统对于内存的使用方法不同,Oracle数据库的内存可以分为系统全局区(SGA)和程序全局区(PGA)

3.1、Oracle具有下列基本的内存结构

  • 软件代码区
  • 系统全局区,包括数据库缓冲储存区、日志缓冲区和共享池
  • 程序全局区,包括栈区和数据区
  • 排序区

其中软件代码区用于储存正在执行的或考研执行的程序代码。软件区是只读,可安装成共享或非共享。Oracle系统程序是可共享的,以致多个Oracle用户可存取它,而不需要在内存有多个副本。用户程序可以共享也可以不共享。

排序需要内存空间,Oracle利用该内存排序数据,这部分空间成为排序区。排序区存在于请求排序的用户进程的内存中,该空间的大小为排序数据量的大小,可增长,但受初始化参数SORT_AREA_SIZER限制。

4、进程结构

进程是操作系统中的一个机制,它可执行一系列的操作步骤。在有些操作系统中称为作业或任务。Oracle是一个多进程的系统,每个进程都执行特定的任务。通过把Oracle和数据库应用程序的工作分解成不同的进程,多个用户和应用程序就可以同时连接到一个数据库实例,而且使系统保持出色的性能。

Oracle系统中的进程可以分为两大类:

  • 用户进程:运行应用程序或Oracle工具

  • Oracle进程:运行Oracle服务器代码。Oracle进程包括服务器进程和后台进程。

    服务器进程用于处理连接到数据库实例的用户进程的请求。服务器进程完成以下主要工作:

    • 分析并运行应用程序中的SQL语句
    • 如果需要的数据块不在SGA中,则把它从数据文件中读取到SGA的共享数据库缓冲区中。
    • 返回应用程序需要的结果

    为了实现系统的最佳性能,并协调多个用户,在多进程Oracle系统中使用一些附加进程,称为后台进程。在许多操作系统中,后台进程在例程启动时自动建立。一个Oracle例程可以有许多后台进程,但它们不是一直存在的。

5、数据字典

数据字典是一种系统表,是Oracle存放有关数据库信息的地方,主要用于描述数据。数据字典在数据库被创建时自动产生,并且由数据库服务器本身进行维护和更新。在数据字典中存储了以下信息:

  • 数据库对象信息,如表、视图、索引、同义词、储存过程、约束、包等各种对象
  • 数据库的物理结构和逻辑结构信息
  • 安全信息,如权限、角色、完整性约束等信息
  • 实例运行时的性能和统计信息
  • 审计信息

数据字典是一个较复杂的表,其所有者是SYS用户,为了便于用户访问,Oracle提供了许多数据字典视图。这些数据字典视图建立在数据字典基表上。数据字典视图的结构可以通过在SQL*Plus中执行DESC命令来查看。

Oracle中的数据字典一般可分为静态和动态两种。静态数据字典主要用在用户访问数据字典时不会发生改变;但是动态数据字典依赖于数据库运行的性能,反映了实例的实际运行情况,所以在访问这类数据字典的信息时往往是动态变化的。

详情请参考文献资料 ---《Oracle Database 12c实用教程》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值