Oracle 11g体系结构

来源:互联网 发布:linux系统无法启动 编辑:程序博客网 时间:2024/04/28 19:07

Oracle体系结构概述


基本术语:实例、数据库、数据库服务器
实例:指一组Oracle后台进程以及在服务器中分配的共享内存区域
数据库:是由基于磁盘的数据文件、控制文件、日志文件等组成的物理文件集合
数据库服务器:指管理数据库的各种软件工具(比如 sqlplus)、实例及数据库3个部分。

Oracle数据库是一个逻辑概念,而不是物理概念上安装了Oracle数据库管理系统的服务器


实例用于管理和控制数据库
数据库为实例提供数据
一个数据库可以被多个实例装载和打开
而一个实例在其生存期内只能装载和打开一个数据库


数据库的主要功能就是存储数据,数据库存储数据的方式通常称为存储结构,Oracle数据库的存储结构分为逻辑结构和物理存储结构。
逻辑存储结构用于描述Oracle内部组织和管理数据的方式
而物理存储结构用于展示Oracle在操作系统中的物理文件组成情况


启动Oracle数据库服务器实际上是在服务器的内存中创建一个Oracle实例,然后用这个实例来访问和控制磁盘中的数据文件。
当用户连接到数据库时,实际上连接的是数据库的实例,然后由实例负责与数据库进行通信,最后将处理结果返回给用户。







Oracle数据库由多个表空间组成(数据库自身也属于逻辑概念),而表空间又由多个段组成,段由多个数据区组成,数据区又由多个数据块组成。

表空间:数据库的最大逻辑划分区域,通常用来存放数据表、索引、回滚段等数据对象

一个表空间由一个或多个数据文件 组成,一个数据文件只属于一个表空;Oracle数据的存储空间在逻辑上表示为表空间,而在物理上表现为数据文件

表空间想相当于操作系统中的文件夹,而数据文件就相当于文件夹中的文件

每一个数据库至少有一个表空间(SYSTEM表空间),表空间的大小等于所有从属它的数据文件的总和。

1)SYSTEM表空系统表空间,用于存放Oracle系统内部表和数据字典的数据,如表名、列名、用户名等.

2)SYSAUX表空间是Oracle 11g新增的表空间,是随着数据库的创建而创建的,它充当SYSTEM的辅助表空间,降低了SYSTEM表空间负荷,主要存储数据字典以外的其他数据对象,SYSAUX表空间一般不存储用户的数据,由Oracle系统内部自动维护。

3)UODO表空间-撤销表空间,用于存储撤销信息的表空间

4)USERS表空间-用户表空间,是Oracle建议用户使用的表空间,可以在这个表空间上创建各种数据对象,比如创建表、索引、用户等数据对象。

Oracle系统的样例用户SCOTT对象就存放在USERS表空间中。







Oracle服务器结构


pOracle服务器主要由实例、数据库、程序全局区和前台进程组成。
p系统全局区(SGA):是所有用户进程共享的一块内存区域,也就是说,SGA中的数据资源可以被多个用户进程共同使用。
pSGA主要由高速数据缓冲区、共享池、重做日志缓存区等内存结构组成。SGA随着数据库实例的启动而加载到内存,当数据库实例关闭时,SGA区域也就消失了。

实例可以进一步划分为系统全局区(SGA)和后台进程两部分,其中SGA使用操作系统的内存资源,而后台进程需要使用CPU与内存资源

数据库总包含数据文件、控制文件和重做日志文件,数据库文件存放在硬盘中

程序全局区(PGA)是一个非共享的内存区域,用于管理用户进程的私有资源

前台进程可以在划分为用户进程和服务器进程,它们需要使用CPU与内存资源。

高速数据缓冲区(Database buffer cache):存放着Oracle系统最近访问过的数据块(数据块在高速缓冲区也可称为为缓存块)

当用户向数据库发出请求时(比如检索某一条数据),如果在高速数据缓冲区存在请求的数据,则Oracle系统会直接从高速数据缓冲区中读取数据并返回给用户。

否则,Oracle系统会打开数据文件读取请求的数据。

注意:由于高速数据缓冲区被所有用户共享,只要数据文件中的某些数据块被当前用户或其他用户请求过,那么这些数据块就会被装载到高速数据缓冲区中。

高速数据缓冲区分为以下3个部分:脏数据区、空闲区、保留区

重做日志缓冲区:用于存放对数据库进行修改操作时所产生的日志信息。这些日志信息在写入到重做日志文件之前,首先存放到重做日志缓冲区中,然后,在检查点发生或中作日志缓冲区中的信息达到一定峰值时,最后由日志写入进程将此缓冲区的内容写入到重做日志文件。

共享池:SGA保留的内存区域,用于缓存SQL语句、PL/SQL语句、数据字典等

共享池包含 库高速缓冲区和 字典高速缓冲区

库高速缓冲区:主要包括共享SQL区和私有SQL区两个组成部分

库高速缓冲区中存放最近用过的SQL语句,PL/SQL语句的文本和执行计划,当下一次执行相同SQL语句,可以直接在库高速缓冲区中找到之前已生成的执行计划

每条被缓存的SQLPL/SQL语句都被分成两个部分,分别存放在共享SQL区和私有SQL区中

共享SQL区存放SQLPL/SQL语句的语法分析结果和执行计划

私有SQL区存放SQL语句中的绑定变量、环境和会话等信息,这些信息属于执行该语句的用户的私有信息,其他用户则无法共享这些信息。

字典高速缓冲区:用于存放Oracle系统内部管理所需要的数据字典信息,例如用户名、数据对象和权限等。

大型池:大型池在SGA区不是必需的内存结构,只是某些特殊情况下,实例需要使用大型池来减轻共享池的访问压力。

Java:用来提供内存空间给Java虚拟机使用,目的是支持在数据库中运行Java程序包

流池:Oracle流池用于数据库与数据库之间进行信息共享。




前台进程


用户进程:是指那些能够产生或执行SQL语句的应用程序,无论是SQL*Plus,还是其他应用程序,只要是能生成或执行SQL语句,都被称作用户进程
服务器进程:就是用于处理用户会话过程中向数据库实例发出的SQL语句或SQL*Plus命令。




数据字典




数据字典是Oracle存放相关数据库内部信息的地方,其用途是用来描述数据库内部的运行和管理情况。
Oracle数据字典的名称由浅醉和后缀组成,使用“_”连接
dba_:包含数据库实例的所有对象信息
v$_:当前实例的动态视图,包含系统管理和系统优化等所使用的视图。
user_:记录用户的对象信息
gv_:分布式环境下所有实例的动态视图,包含系统管理和系统优化使用的视图
all_:记录用户的对象信息机被授权访问的对象信息