oracle数据库体系结构的研究

本文详细介绍了Oracle数据库的体系结构,包括其主要组成部分:内存结构、进程结构和存储结构。探讨了SGA和PGA的作用及构成,后台进程的功能,以及数据库的逻辑与物理存储结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的:

完成本课后,你能够:

1. 列出oracle数据库体系的主要构件

2. 解释内存结构

3. 描述后台进程

4. 关联逻辑存储结构和物理存储结构

5. 描述ASM存储构件


Oracle 数据库

oracle关系数据库管理系统(RDBMS)为信息管理提供了一种开发的,可理解的,集成的途径。

一个数据库是把数据处理看做一个单元的集合。数据库的目的就是存储和回复关系数据。

连接到服务器

数据库使用者可以连接到oracle数据库,通过以下三种方式之一

1. 使用者记录在运行oracle实例的操作系统上,开始一个应用或者一个可以到达该系统的数据库的工具。通讯路径建立在主机操作系统上的进城内部通讯机制。

2. 使用者在当地电脑上开始一个应用,通过网络连接到运行oracle数据库的电脑上。在这个配置(client/server)中,用户和后台服务器通过网络软件沟通。cs结构数据库系统由两部分组成:前端(客户端)和后端(服务器端),通过网络连接。

3. 使用者在本地计算机上使用一个工具(比如web browser)连接服务器。应用服务器代替客户端与后台数据库进行连接。


oracle 数据库服务器体系结构概述:




oracle数据库服务器体系结构

数据库服务器体系结构中有三个主要组成部分,内存结构,进程结构,存储结构。基本的OBS由一个oracle数据库和一个数据库实例组成。

数据库由物理结构和逻辑结构组成。由于物理和逻辑结构是分离的,数据的物理结构存储可以被管理而不影响逻辑结构的存储。

实例由内存结构和关联这该实例的后台进程组成。每一次实例启动后,一个名为System Global Area的共享内存区域会被分配,后台进程也会启动。

在启动数据库实例后,oracle数据库将实例和特定的数据库联系起来,这个过程叫做数据库登陆(mounting the database).数据库已经准备好了让被授权的用户打开。

笔记:oracle自动存储管理系统ASM将实例理解为:内存和进程组件,而不是联系特定的数据库系统。




联系到数据库实例

Connection:使用者进程和实例直接沟通。

Session:一个使用者与实例的特定的Connection


Connection和 Sessions是非常不同的。

简略翻译:

connection是user process和数据库实例间的连接。

session是user登陆到数据库实例,已经确定有权限的情况下的连接。

可以创建多个session。一个用户使用相同的用户名和密码多次登陆到oracle数据库。





两个基本的内存结构与实例有关:

SGA:system Global Area ,包括了数据库实例的数据以及控制信息,被所有的服务器后台进程共享

PGA:program global area , 包括着服务器后台进程的数据以及控制信息。这不被共享,每一个server process和后台进程都有它自己的PGA


SGA 是包含了实例的数据和控制信息的内存块。SGA包含以下区域:

Shared pool : 存储可以被用户共享的各种各样的结构

Database buffer cache:存储从数据库中恢复的数据块

KEEP buffer pool: 特殊的Database buffer cache类型,存储在内存中长期使用的数据块

RECYCLE buffer pool : 特殊的Database buffer cache类型,存储很快将会被覆盖的内存数据块

nK buffer cache :  database buffer cache类型之一

Redo log buffer: 存储 重启信息(实例恢复的时候用),直到 重启信息被写入硬盘中

Large pool:为确定的大型进程提供内存的选项,如:oracle备用和恢复操作,I/O 服务器进程

java pool: java虚拟机和特定的session java 代码

Streams pool:used by Oracle Streams to store information required by capture and apply


当你通过企业管理器和sql语句启动一个实例的时候,sga的内存空间就会被分配


当服务器进程启动的时候,每一个服务器进程都会被分配私有的PGA

PGA是排外的单独的,只能被它后台的oracle代码读写。PGA 分为两个部分:栈空间和user global area(UGA)

由于sga结构是动态的,database buffer cache, shared pool, large pool, java pool,和 stream pool 的改变都不需要重启实例



Shared pool

SGA 的 shared pool 组成包括:library cache , data dictionary cache, SQL查询结果cache,PL/SQL函数结果cache,并行解释信息缓冲区,控制结构。

数据字典(data dictionary) 是关于数据库和它的结构它的用户的信息的数据库表和视图的集合。在分析SQL语句的时候,oracle 数据库会频繁进入数据字典。

这是数据库进行下一步操作的基础。

在内存中有两个地方是常常用来存储数据字典的,一个叫数据字典cache,也叫元组cache因为它存储数据用元组的形式而2不是缓冲区(整个数据块的形式)。另一个是librarycache。所有的oracle 数据库用户进程都共享这两个内存块获取数据字典的信息。    

  oracle 数据库承认两个用户解释相同的SQL语句,并且为这些用户重用共享的SQL区域。




Database buffer cache

这是oracle 数据库 SGA 的一部分,用来存储从数据文件中读取的数据块

buffer cache 里面的数据块通过LRU算法调度。

KEEP buffer pool 和 RECYCLE buffer pool 是buffer cache 里面的特殊组成,在LRU算法刷新buffer前,RECYCLEbuffer pool 就会刷新。KEEP会比LRU保留着一些缓存更多的时间。





Redo Log Buffer

关于数据库被更改的相关信息,都会被写入Redo Log Buffer里面去,包括了DML,DDL,和一些内部操作。

当服务器进程改变了buffer cache以后,循环记录将会生成和被写入redo log buffer 中。循环记录(redo entries)占据着连续的内存区。


数据库管理员可以配置可选的内存区域分配给一些应用,包括:

1. oracle XA接口和 共享服务器之间的session memory

2. I/O 服务器进程

3. oracle 数据库备份和复原操作。

4. 并行查询操作

5. 优先队列内存表存储

large pool 并没有被最近最少使用(LRU)列表管理。


java pool and streams pool

java pool 内存区是用来存储所有在JVM中特定的java代码和数据会话。

stream pool 专门被oracle 流使用。

除非你特定指明,否则stream pool 的大小是0,当oracle stream使用时,stream pool的大小动态变化。



Program Global Area(PGA)

每一个PGA都包含栈空间,在一个指明的服务器环境中,每一个用户连接到服务器都会有特定的服务器进程。在这样的连接下,PGA包含一个子版本的的内存形式叫UGA,UGA有以下部分组成:

1. 存储游标运行时信息的游标area(Cursor Area)

2. 存储session中的控制信息的session数据域

3. 在执行SQL语句的时候,sql工作域有以下组成:

     - 一个类别区域存放函数或者分组函数的order data

    - 哈希域

    -  数据仓库的位图索引域

    -  位图混合域

在公共服务器环境中,不同的客户共享一个服务器程序,在这种情况下,UGA将会进入到SGA中,PGA只剩下堆栈。




内存结构


用户进程:

连接到数据库

数据库进程:

服务器进程:连接到数据库实例,在user建立一个session的时候启动

后台进程:oracle数据库实例启动的时候,后台进程也启动。

守护者进程和应用进程:

网络监听者

网格基础结构守护



为了用户应用程序而建立的服务器进程可以做一下事情:

1. 通过应用程序解析和运行SQL语句。

2. 从数据文件中读取需要的数据块到shared database buffers中

3. 返回应用能够处理信息的结构


后台进程:

在一个 non-RAC,non-ASM环境下的后台进程通常包括:

 Database writer process (DBWn)

Log writer process (LGWR)

CheckPoint process (ckpt)

system monitor process(SMON)

process monitor process (PMON)

recoverer process ( reco)

job queue coordinator (CJQ0)

job slave processes (Jnnn)

Archiver processes (ARCn)

queue monitor processes(QMNn)


V$BGPROCESS view 可以看到更多后台进程的相关消息


网格基础结构和网络进程是属于许多数据库在相同服务器上运行的后台进程。


Linux 和 UNIX系统的网络基础结构进程包括:

ohasd : 用于启动oracle集群进程的oracle高级可用服务守护进程

ocssd : 同步集群守护进程

diskmon: 

cssdagent:

oraagent:

orarootagent:



在下述情况中,DBWn将脏块吸入硬盘中:

1.  当database buffer cache 里面的可用缓冲区低于临界值时,DBWn会启动,异步地将脏块写入硬盘中当其他程序正在执行的时候。

2. 当数据库实例恢复开始的时候,DBWn通过写入缓冲区来提前检查点。



LGWR

LGWR将redo entries 从redo log buffer中写入到redo log file中,LGWR的写入时机:

1. 当用户进程允许一个事务。

2. 当redo log buffer 达到三分之一满。

3. 在DBWn进程将脏块写入到硬盘之前(如果需要的话)

4. 每3秒



checkpoint 是一个定义了数据库里面redo线程的系统更改数字(system change Number)SCN的数据结构。checkpoint 被记录在控制文件中和每个数据文件的开头。

当checkpoint 出现时,oracle数据库必须更新所有数据的header file去记录checkpoint的细节。这是有CKPT完成的,CKPT没有将数据块写入到硬盘中,这一般是DBWn做的。



当实例开始的时候,smon执行恢复操作。

清理所有的暂时不使用的段



当用户进程失败的时候,PMON执行进程恢复。



主要处理有疑问的事务。







以下文件构成数据库:

1 . control files

2.  data files

3.  Online redo log files: 所有数据库实例恢复所用


以下文件对数据库的成功运行很重要:

1. parameter file: 实例启动的时候可以被使用。

2. password file : 允许用户使用sysdba , sysoper, sysasm等角色去连接远端实例和实行管理者任务。

3. backup file:

4. Archived redo log files:

5. Trace files : 

6. Alert log file: 






每个database 都被逻辑地划分为两个或者更多的表空间:SYSTEM和 SYSAUX表空间。

1. 在数据库创建的时候,SYSTEM 和 SYSAUX就被强制地创建,一定是online的,在线的

2. SYSTEM表空间为核心功能(data dictionary tables)(data dictionary是数据库表和视图的指引信息的集合)

3. 备用的SYSAUX表空间是为了额外的数据库组件所使用的。

4. 这两个东西不建议用来存储应用数据。





oracle数据库内存,进程以及存储的交互:


1. oracle数据库被安装的节点,一个实例就已经开始,通常被称为,host server 或者 database server

2. 用户开始一个应用生成一个用户进程。应用尝试和服务器建立连接。

3. 服务器运行一个有合适的oracle网络服务处理器的监听器。监听器侦查到应用的连接要求,并且在用户进程后台创建一个特别的服务器进程。

4. 用户运行DML类型的sql语句并且提交事务。例如:用户改变表里面客户的地址并且提交变化。

5. 服务器进程接收到语句并且检查shared pool的所有共享SQL区域看看是否包含一样的SQL语句。如果有,服务器进程检查用户进程的权限,通过的话这个共享SQL语句区域就会执行语句。如果无,一个新的共享sql区域将会被分配,这个sql语句就能解释和执行。

6. 服务器进程或者从实际的数据文件中,或者从database buffer cache中取出需要用到的数据。

7. 服务器进程在SGA中修改数据。因为事务已经被提交,所以log writer process 立即将事务记录到redo log file中。DBWn有效率地将脏块永久地写入硬盘中。

8. 如果事务成功,服务器进程通过网络发送一条信息给应用,失败的话,错误信息将会被发送。

9. 通过这个完整的过程,其他后台程序已经运行,注意这需要干预的情况。此外,数据库服务器管理其他用户事务改变和阻止事务对相同资源的争夺。














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值