数据库的体系结构是值数据库的组成、工作过程与原理,以及数据在数据库中的组织和管理机制。
Oracle服务器提供开放、全面和综合的信息管理,它由Oracle数据可和Oracle实例组成。
Oracle数据库是一个数据的集合,该集合被视为一个逻辑单元。
Oracle实例是管理数据库的后台进程和内存结构的集合。
Oracle的内存结构包括PGA和SGA,此处将PGA放在内存结构外面只是想说明用户进程和服务器进程是一一对应的。
一、Oracle实例
启动Oracle实例的过程:分配内存、启动后台进程。
Oracle实例的内存包括:SGA(系统全局区)和PGA(程序全局区)。
Oracle实例的后台进程包括:SMON、PMON、DBWR、LGWR、ARC、CKPT等。
Oracle实例有3种不同的进程:用户进程、服务器进程和后台进程。
用户进程:是一个需要与Oracle服务器进行交互的程序。当用户运行一个应用程序准备向数据库服务器发送请求时,即创建了用户进程。用户进程在客户端。
后台进程:是Oracle数据库为了保持最佳系统性能和协调多个用户请求而设置的。Oracle实例启动时即创建一系列的后台进程。后台进程位于服务器端。
服务器进程:用于处理链接到该实例的用户进程的请求。当用户链接到Oracle实例创建会话时,即产生服务器进程。服务器进程位于服务器端。服务器进程与用户进程一一对应。
1、内存区
一般情况下,Oracle使用的内存占整个系统内存的80%,SGA占Oracle使用内存的80%。
Oracle实例启动时分配SGA。当服务器进程启动时分配PGA。
(1)SGA
数据库信息存储于SGA,由多个数据库进程共享。
SGA包括:共享池、数据缓冲区、日志缓冲区、Large池、JAVA池、Stream池
A、共享池:
共享池是对SQL、PL/SQL程序进行语法分析、编译、执行的内存区域。共享池由库缓存和数据字典缓存组成。共享池的大小直接影响数据库的性能。
B、数据缓冲区:
用于存储从磁盘数据文件中读入的数据,所有用户共享。服务器进程将读入的数据保存在数据缓冲区,当后续的请求需要这些数据时可以在内存中找到,不需要再从磁盘读取,提高了读取速度。数据缓冲区的大小对数据库的读取速度有直接影响。
C、日志缓冲区:
日志记录数据库的所有修改信息,日志信息首先产生于日志缓冲区。当日志缓冲区的日志数据达到一定数量时,由后台进程将日志数据写入日志文件中。相对来说日志缓冲区对数据库的性能影响较小。
D、Large池:
为了进行大的后台进程操作而分配的内存空间,主要指备份恢复、大型IO操作、并行查询等。
E、Stream池:
为了Stream应用而分配的内存空间。
F、JAVA池:
为了JAVA应用而分配的内存空间。
(2)PGA
PGA包含单个服务进程所需的数据和控制信息,比如每个session传入SQL绑定变量、以及对该session控制的控制信息。如果该sesssion进行了排序或hash链接操作,也会使用PGA中的内存。
PGA是在用户进程链接到数据库并创建一个回话时自动分配的,保存每个与Oracle数据库链接的用户进程所需的信息。
共享链接模式和专用链接模式,PGA的管理方式不同。大多数情况下采用专用链接模式。
专用链接,就是没有用户进程链接到数据库实例,就没有服务器进程,每有一个用户进程链接到数据库实例,就产生一个服务器进程,且用户进程和服务器进程是一一对应的。Oracle9i及之后的版本,采用的是专用链接。
共享链接,在没有用户进程链接到数据库实例时,已产生若干个服务器进程,用户进程链接到数据库实例时,可以选择与一个或多个服务器进程进行连接。一个服务器进程也可以被多个用户进程链接。Oracle8i及之前的版本采用的共享链接。
SGA是共享的,PGA是不共享的。
对于专用链接来说,用户在客户启用了一个应用程序,例如sqlplus,就在客户端启用了一个用户进程。与Oracle服务器端链接成功后,会在服务器端生产一个服务器进程,该服务器进程作为用户进程的代理进程,代替客户端执行各种命令,并把结果返回给客户端。与用户进程相对应的服务器进程也叫做影子进程。用户进程一旦中止,服务器进程立即中止。
会话:用户与Oracle服务器的单个链接。当用户与服务器链接时创建会话。当用户与服务器断开链接时关闭会话。从v$session中查询会话信息。
2、后台进程
A、PMON:进程监控进程
清理出现故障的进程。释放当前所有挂起的锁定。释放故障进程使用的资源。
B、SMON:系统监控进程
在实例失败之后,重新打开数据库时自动恢复实例。整理数据文件的自由空间,将相邻区域结合起来。释放不在使用的临时段。
C、DBWR:数据写入进程
管理数据缓冲区,将最近使用过的快保存在内存中。将修改后的数据缓冲区数据写入数据文件中。
D、LGWR:日志写入进程
负责将日志缓冲区中的日志数据写入日志文件中。系统有多个日志文件,系统以循环的方式将数据写入文件。
E、CKPT:检查点进程
为了防止实例崩溃,为了尽快进行实例恢复的进程。检查点包括2种:完全检查点、增量检查点
完全检查点只有下面两种情况下被处罚:
a、用户发出 alter system checkpoint;
b、除了shutdown abort以外的其他方式正常关闭数据库。
增量检查点触发情况:
a、每隔3秒;
b、日志切换。
查看后台进程:
//查看后台进程:
select * from v$process;
//查看DBWR进程:
select * from v$process where program like '%DBW%';
//DBWR进程数默认只有1个。当多个用户同时修改表时,增加DBWR进程数可以提高性格。修改DBWR进程数:
alter system set db_writer_processes=3 scope=spfile;
//查看当前配置的DBWR进程数:
show parameter db_wr
二、数据库结构
Oracle数据库由操作系统文件组成,这些文件为数据库信息提供实际物理存储区。
Oracle数据库包括逻辑结构和物理结构。
物理结构包括数据库中的一组操作系统文件。
逻辑结构指数据库创建之后形成的逻辑概念之间的关系。
1、物理文件
物理文件就是Oracle数据库所使用的操作系统物理文件。
主要物理文件可分为3类:
A、数据文件:主要用于存储数据库数据,如表、索引数据等。
B、控制文件:控制文件是记录数据库物理结构的二进制文件。
C、在线日志文件:记录对数据库的所有修改信息,用于故障恢复。
丢失这些文件,数据库不可以继续运行,需要进行介质恢复。
非主要物理文件包括:参数文件、密码文件、告警和跟踪文件、归档日志文件、备份文件。丢失这些文件,数据仍然可以继续运行,不需要进行介质恢复。
2、逻辑结构
数据库的逻辑结构是从逻辑的角度分析数据库的组成。
Oracle的逻辑组件包括:数据库——>表空间——>段——>区——>数据块
(1)表空间
表空间是数据库中最大的逻辑单位,一个Oracle数据库至少包含一个表空间,就是名为SYSTEM的系统表空间。每个表空间是由一个或多个数据文件组成的,一个数据文件只能与一个表空间相关联。表空间的大小等于构成该表空间的所有数据文件的大小之和。
//查看表空间
select * from v$tablespace;
//创建表空间
create tablespace 表空间名 datefile 文件路径 【size 大小k|m】【autoextend on|off】;
默认表空间:
a、SYSTEM:是系统表空间,存放系统最基本的信息,如果SYSTEM表空间坏掉,Oracle将无法启动
b、SYSAUX:作为SYSTEM的辅助表空间,用以减少SYSTEM表空间的负荷。以前其他表空间中的一些组件现在放到SYSAUX表空间了。
c、TEMP:临时表空间,当排序不能在分配的表空间中完成时,就会使用磁盘排序的方式,即在临时表空间中进行。
d、UNDOTBS1:撤销表空间,是UNDO类型的表空间,保存用户进行DML操作中修改前的数据。
e、USERS:新建用户的默认表空间
f、EXAMPLE:数据库测试用例所涉及的表的表空间。
(2)段
段是构成表空间的逻辑存储结构,段由一组区组成。
按照段所存储数据的特征,将段分为若干种类型,主要有数据段、索引段、回退段和临时段。
(3)区
区为段分配空间,区由连续的数据快组成。
当段中的所有空间已完全使用时,系统自动为该段分配一个新区。
区不能跨数据文件存在,只能存在一个数据文件中。
(4)数据块
数据块是Oracle服务器所能分配、读取、写入的最小存储单元。
Oracle服务器以数据块为单位管理数据文件的存储空间。
(5)模式
模式是对用户所创建的数据库对象的总称。
模式对象包括表、视图、索引、同义词、序列、过程和程序包等。
在某种意义上来说,模式等同于用户。