摘录自视频,所以可能有点乱。
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(恢复进程)
在分布式数据库环境中恢复进程恢复那些失败的分布式事务