Oracle体系结构(理论)

时间:2022-08-03 06:31:03

摘录自视频,所以可能有点乱。

Oracle体系结构(理论)

Oracle核心竞争力

  • 可扩充性
  • 可靠性
  • 可管理性

可管理性

1、微调Oracle使用内存的方式
2、Oracle向磁盘写入数据的频率

Oracle体系结构简介

  • 存储结构
  • 内存结构
  • 进程结构

PGA

  • 排序区
  • 会话区
  • 游标区
  • 堆栈区

数据文件

特点:
1、每一个数据文件只与一个数据库相关联
2、一个表空间可以包含一个或多个数据文件
3、一个数据文件只能属于一个表空间

日志文件

重做日志文件(Redo Log)

作用:记录数据库变化,是用户的事务处理日志

归档日志文件(Archive Log)

作用:非活动重做日志的备份

控制文件

作用:是Oracle服务器在启动期间用来标识物理文件和数据库结构的二进制文件
1、数据库文件的位置及大小
2、重做日志文件的位置及大小
3、数据库名称及创建时间
4、日志序列号

参数文件(Parameter File)

作用:用于在启动实例的时候配置数据库
含有
文本文件 init<SID>.ora
服务器参数文件 SPFILE<SID>.ora

临时文件

这些文件确实包含数据,但是只用于临时的操作
create temporary tablespace temp_tblspace
tempfile 'D:\db\tblspace.dbf'
size 1M
extent management local
uniform size 512K;

表空间

表空间是最大的逻辑的存储结构,它对应一个或多个数据文件。
包含
SYSTEM表空间(数据字典信息)
SYSAUX表空间(辅助系统表空间)用于减少系统负荷,提高系统的作业效率
用户表空间
索引表空间
临时表空间
UNDO表空间

表空间特性

1、控制数据库数据磁盘分配
2、限制用户在表空间中可以使用的磁盘空间大小
3、表空间具有online、offline、readonly、readwrite属性
4、完成部分数据库的备份与恢复
5、表空间通过数据文件来扩大

修改表空间属性

alter tablespace 表空间名称 属性;

查询表空间属性

select tablespace_name,status from dba_tablespaces;

查询表空间与数据文件的对应关系

select tablespace_name,bytes,file_name from dba_data_files;

移动表空间内表

alter table 表名 move tablespace 新表空间;

修改用户默认表空间

alter user 用户名 default tablespace 默认表空间;

块是数据库使用的I/O最小单元,又称逻辑块或ORACLE块。

数据块的结构包含块头、存储区两个部分

块头

  • 数据块标题(数据类型、块的物理地址)
  • 表目录(用于记录数据块中存储了哪些表)
  • 行目录(用于记录数据块中各行的物理地址)

存储区

  • 空闲区(当第一次分配数据块的时候,它只有空闲区,没有数据行,随着行被插入,空闲区会越来越小)
  • 行数据区(这是数据块中存储实际行的地方)

盘区数量和盘区大小可以正在建立的对象的storage子句中规定
initial 设置为对象建立的第一个盘区的大小
next 这是随后的盘区的大小
minextents 这是立即分配的盘区的数量
maxextents 这是能够为这个表建立的盘区的最大数量

段分类

  • 数据(表)段
  • 索引段
  • 临时段
  • 回滚段(存储修改之前的位置和值,是Oracle的撤销机制)

SGA所包含的数据:

1、缓存数据块
2、在数据库上执行的SQL语句
3、用户执行的存储过程、函数和触发器等

创建实例或启动实例时,Oracle为SGA分配内存
终止实例时,释放SGA所占用的内存

SGA的组成

  • DB高速缓存
  • 共享池
  • 重做日志缓存
  • 大型池

数据高速缓存 database buffer cache(DBC)

影响DBC的两个参数(主要影响读取频率)
DB_BLOCK_SIZE 缓冲区数据块大小
DB_BLOCK_BUFFERS 缓冲区数据块个数

DBC工作原理
在我们初次访问数据时,Oracle将读取磁盘上的数据文件,将数据放入数据高速缓存,再处理数据
如果数据已经位于数据高速缓存中时,Oracle就可以直接操作数据

共享池

  • 库缓存(Library Cache)
  • 数据字典区(Dictionary Cache)

共享池

保存了最近执行的SQL语句、PL/SQL程序和数据字典信息,是对SQL语句和PL/SQL程序进行语法分析、编译、执行的内存区

库缓存区

解析用户进程提交的SQL语句或PL/SQL程序和保存最近解析过的SQL语句或PL/SQL程序

数据字典

用于存放数据字典信息行
重做日志调整缓存
存储重做日志的缓存

大型池

需要大内存操作提供相对独立的内存空间,以便提高性能。
需要大型池的操作有:数据库备份和恢复,用于共享服务进程的会话内存(例如:大量排序的SQL语句),并行化的数据库操作等。

PGA

单独的服务器进程存储私有数据的内存区域。
排序区
保存执行order by、group by等包含排序操作的SQL语句时所产生的临时数据
会话区
保存会话所具有的权限、角色、性能统计信息
游标区
保存执行带有游标(Cursor)的PL/SQL语句时所产生的临时数据
堆栈区
保存会话的绑定变量、会话变量以及SQL语句运行时的内存结构信息

PGA与SGA的区别

PGA与SGA类似,都是Oracle数据库系统为会话在服务器内存中分配的区域,但是作用不同,共享程序也不同。

进程

  • 用户进程
  • Oracle进程

Oracle进程

  • 服务器进程
  • 后台进程

服务器进程

用于处理连接到该实例的用户进程的请求。
任务:
1、对应用程序所发出的SQL语句进行语法分析和执行
2、从磁盘中读取必要的数据块到SGA的共享数据库缓冲区
3、将结果返回给应用程序处理

PMON(进程监控进程)

1、监控服务器进程,以确保能够销毁发生损坏或者出现故障的进程,释放它们的资源
2、在主机操作系统上使用Oracle监听器注册数据库服务器

SMON(系统监控进程)

执行例程恢复、合并空间碎片、释放临时段等功能

DBWR(数据库写入进程)

缓冲区用户所使用的数据写入数据文件。

LGWR(日志写入进程)

重做日志缓冲区的内容写入到日志文件中去
日志写入进程会在以下4种情况执行写入操作
1、事务处理进行提交
2、重做日志缓存已经填充了1/3
3、重做日志缓存中的数量达到了1MB
4、每3秒的时间

ARCH(归档进程)

将重做日志的事务变化写入到归档日志

CKPT(检查点进程)

该进程在检查点出现时,对全部数据文件的标题进行修改
注意:通常是不启动的,如果检查点明显地降低系统性能时,CKPT进程就会运行,将原来的由LGWR进程执行的检查点的工作分离出来,由CKPT进程实现

CJQO(作业队列协调器进程)

在Oracle中规划将要在数据库后台运行的进程或作业(job)
例如:用户可以告诉数据库在每天晚上12:00建立汇总表,通过采用这种方式,就可以在第二天汇总信息

RECO(恢复进程)

在分布式数据库环境中恢复进程恢复那些失败的分布式事务