1.1 体系结构
数据库的体系结构是指数据库的组成、工作过程与原理,以及数据在数据库中的组织和管理机制
oracle提供开放、全面、综合的信息管理,由oracle数据库和oracle实例组成。oracle数据库是一组数据的集合,被视为一个逻辑单元;oracle实例是管理数据库的后台进程和内存结构(包含PGA和SGA)的集合;
PGA支持的服务器进程和用户进程是一一对应的关系;
1.2 实例
oracle实例是内存结构和后台进程的集合;启动oracle实例的过程,即内存分配、启动后台进程;
oracle实例的内存包含SGA和PGA;Oracle实例的后台进程包括SMON、PMON、DBWR、LGWR、ARC、CKPT等
1.2.1 内存结构
oracle一般占整个服务器内存的80%
其中,SGA(系统全局区)占oracle内存的80%,实例启动时分配SGA
PGA(程序全局区)占oracle内存的20%,当服务器进程启动时分配PGA
1.2.2 SGA
数据库信息存储在SGA,由多个数据库进程共享;SGA包括:共享池、数据缓冲区、日志缓冲区、Large池、Java池、Stream池
select * from v$sga;
(1)共享池(起重要影响)
共享池是对SQL、PL/SQL程序进行语法分析:
scott用户执行 select * from emp : 语法分析,编译,生成执行计划,运行执行计划均在共享池内完成;下次执行同一个sql select * from emp 时,不再编译和生成执行计划,而是直接运行执行计划。
system用户执行同一个sql select * from emp 时,也不再编译和生成执行计划,而是直接运行执行计划。 执行sql select * from Emp时,由于语句存在差异,需要按照步骤进行语法分析,编译,生成执行计划,运行执行计划。
共享池由库缓存和数据字典缓存组成
共享池的大小直接影响数据库的性能
(2)数据缓冲区(起重要影响)
oracle中,用户不直接取硬盘中数据,而是通过数据缓冲区;进行update、delete操作,先把行记录从硬盘中取出,写入数据缓冲区,再在数据缓冲区进行修改,最后把数据缓冲区中的修改写入硬盘;进行insert操作,在数据缓冲区进行插入,再写入硬盘;
数据缓冲区用于存储从磁盘数据文件中读取的数据,所有用户共享;
服务器进程将读入的数据保存在数据缓冲区中,当后续的请求需要这些数据时可以在内存中找到,不需要再从磁盘中读取,提高了读取速度;
数据缓存区的大小对数据读取速度有直接影响;
(3)日志缓冲区
日志记录数据库的所有修改信息,日志信息首先产生于日志缓冲区;当日志缓冲区的日志数据达到一定数量时,后台进程会把日志数据写入日志文件中;相对而言,日志缓冲区对数据库性能影响较小
(4)Large池
为了进行大的后台进程操作而分配的内存空间,主要指备份恢复,大型IO操作、并行查询(parallel)等;
并行查询
(5)Java池
为了java应用而分配的内存空间
(6)Stream池
为了stream应用而分配的内存空间 stream 流 高级复制技术
1.2.3 PGA
oracle实例中有3种不同类型的进程:
用户进程:一个需要与oracle服务器进行交互的程序。当用户运行一个应用程序准备向数据库服务器发送请求时,即创建了用户进程(客户端)
服务器进程:(服务器端)用于处理连接到该实例的用户进程的请求。当用户连接到oracle数据库实例创建会话时,即产生服务器进程(用户进程和服务器进程一一对应)
后台进程:(服务器端)
PGA包含单个服务器进程所需要的数据和控制信息,比如每个session传入的sql绑定变量以及对该session进行控制的控制信息。如果该session进行了排序或者hash连接操作,也会使用PGA中的内存。PGA是在用户进程连接到数据库并创建一个会话时自动分配的,保存每个与oracle数据库连接的用户进程所需的信息。
专用连接模式:
PGA有2种管理模式,共享连接模式(服务器进程和用户进程可以是多对多 一对多 多对一的关系)和 专用连接模式(一对一的关系)。大多数情况下,采用专用连接模式,用户在客户端启动一个应用进程,就是在客户端启用一个用户进程;与oracle服务器端连接成功后,会在服务器端生成一个服务器进程,该服务器进程作为用户进程的代理,代替客户端执行各种命令并把结果返回给客户端。用户进程一旦中止,服务器进程立刻中止。
(会话是用户与oracle服务器的单个连接,当用户与服务器建立连接时创建会话,当用户与服务器断开连接时关闭会话,从v$session视图中查看会话信息)
select * from v$session;
select * from v$sql;
1.2.4 后台进程
select * from v$process;
(1)PMON 进程监控进程
用户进程中止,服务器进程的PGA内存应该立刻被回收,PMON负责监控这一过程;
PMON的作用:
清除出现故障的进程;
释放所有当前挂起的锁定;
释放故障进程使用的资源;
(2)SMON 系统监控进程
在实例失败之后,重新打开数据库时自动恢复实例;
整理数据文件的自由空间,将相邻区域结合起来;
释放不再使用的临时段;
(3)DBWR 数据写入进程
管理数据缓冲区,将最近使用过的块保存在内存中;
将修改后的缓冲区数据写入数据文件中。
select * from v$process where program like '%DBW%';
当前DBWR进程只有一个,若频繁写数据库,增加DBWR进程数据,可加快数据缓冲区的脏数据写入数据文件。
修改 db_writer_processes 参数
alter system set db_writer_processes=3;
添加scope
alter system set db_writer_processes=3 scope=spfile;
注:
SCOPE = SPFILE
此更改写入初始化参数文件,更改将在下次启动时生效。动态参数与静态参数都一样可以。也是静态参数唯一可以使用的方式。
SCOPE = MEMORY
只在内存上修改,立即生效,但重启后将不再生效,因为并没有写入到初始化参数文件。只适用于动态参数,静态参数则不允许。
SCOPE = BOTH
既写入到初始化参数文件,也在内存上修改,立即生效。同样也只适用于动态参数,静态参数则不允许。
(4)LGWR 日志写入进程
负责将日志缓冲区中的日志数据写入到日志文件。
系统有多个日志文件,该进程以循环的方式将数据写入文件
(5)CKPT 检查点进程
防止实例崩溃的进程;
检查点包括2种:完全检查点、增量检查点
完全检查点只有在以下2中情况下被触发:
1.用户发出 alter system checkpoint
2.除了shutdown abort以外其他方式正常关闭数据库
增量检查点触发情况:
1.每隔3秒
2.在线日志切换
1.2.5 11g的自动内存管理
自动内存管理 AMM(auto memory management) :只需要为oracle的整体使用分配一个总的内存大小即可
初始化参数 statistics_level为typical或all,才可以启动AMM
新的初始化参数memory_target来定义整个内存的大小,即SGA和PGA总的大小
新的初始化参数memory_max_target来定义memory_target最大能达到的值
注:如果使用AMM,则sga_target和pga_aggregate_target的值应该设置为0
11g的后台进程MMAN,用于进行自动内存管理
修改内存最大值,(这里有个坑,若没有修改pga使用内存大小,直接降低最大内存,会导致实例无法启动,慎重)
alter system set memory_target=5000m;
alter system set memory_max_target=5500m scope=spfile;
1.3 数据库
oracle数据库由操作系统文件组成,这些文件为数据库信息提供实际物理存储区。oracle数据库包括逻辑结构和物理结构
1.3.1 物理结构(数据库中一组操作系统文件)
主要物理文件(丢失这些文件,数据库不可继续运行,需要进行介质恢复)分为三类:
(1)数据文件:数据文件用于存储数据库数据,如表、索引数据
(2)控制文件:记录数据库物理结构的二进制文件
(3)在线日志文件:记录数据库所有修改信息,用于故障恢复
注: 现有的每个在线日志文件组内仅有一个文件,需要扩展; 对于DBF文件,有的访问频繁,有的访问少,可调整DBF文件到不同的磁盘;
非主要物理文件:
在windows系统中不要求配置ORACLE_HOME,注意在linux系统中ORACLE_HOME指此目录
(1)参数文件(pfile spfile):
从9i开始,使用spfile启动,没有pfile文件
(2)密码文件:
sys用户的密码
(3)告警和跟踪文件:
(4)归档日志文件
(5)备份文件
1.3.2 逻辑结构(数据库创建之后形成的逻辑概念之间的关系)
(1)表空间
数据库最大的逻辑单位,一个oracle数据库至少包含一个表空间,名为SYSTEM的系统表空间
每个表空间由一个或多个数据文件组成,一个数据文件只能和一个表空间对应;表空间的大小等于构成这个表空间的所有数据文件大小之和
创建表空间语法:
CREATE TABLESPACE testtbs datafile 'D:\software\oracle\oradata\orcl\testtbs.dbf' size 10m autoextend on;
select * from v$tablespace;
SYSTEM:系统表空间,存放系统最基本的信息,如果SYSTEM表空间坏了,ORACLE无法启动。
SYSAUX:10g引入的,作为SYSTEM的辅助表空间,用来减少SYSTEM表空间负荷,以前其他表空间的一些组件,放入SYSAUX表空间中。 如之前SYSTEM表空间中LOGMINER
TEMP:临时表空间,当排序不能在分配的空间中完成时,就会使用磁盘排序的方式,即oracle实例中临时表空间中进行
UNDOTBS1:撤销表空间,是UNDO类型的表空间,保存用户进行DML操作时,修改前的数据;
USERS:数据库默认的永久表空间
新建用户
SELECT * FROM DBA_USERS d WHERE d.username='CZ';
用cz用户创建表
select * from dba_tables d where d.OWNER='CZ' and d.TABLE_NAME='MT' ;
修改表默认表空间
alter database default tablespace testtbs;
EXAMPLE:数据库测试用例所涉及的表空间
(2)段
段是构成表空间的逻辑存储结构,段由一组区组成;按照段存储的特性,将段划分为若干种类型,主要有数据段、索引段、回退段、临时段
(3)区
区为段分配空间,是由连续的数据块组成;当段中所有表空间已完全使用时,系统自动为该段分配一个新区;区不能跨数据文件存在,只能存在于一个数据文件中
(4)块
数据块是oracle服务器所能分配、读取或写入的最小存储单元;oracle服务器以数据块为单位管理数据文件存储空间;
查看块大小(单位 字节)
即便需要读取的字节数只有个位数,从磁盘读取到数据缓冲区交给用户,仍然需要把个位字节数的内容所在的数据块8k字节,完整地读取
(5)模式
模式是对用户所创建的数据库对象的总称;模式包括表、视图、索引、同义词、序列、过程、程序包等。 可视为,模式=用户