因为内容较多,所以我特意做了思维导图,链接如下:
https://pan.baidu.com/s/16_SD57s_dBccQQecHNgzIQ
提取码:uk36
数据库系统结构概述
Oracle数据库的存储结构(Storage Structure)分为物理存储结构和逻辑存储结构两种,分别描述了在操作系统中和数据库系统内部数据的组织与管理方式。
Oracle数据库的软件结构,即Oracle实例(Instance),包括内存结构与后台进程结构两个部分。
一、数据库内存结构
1.Oracle内存结构概述
-
用户的所有操作都在内存中进行,最后由数据库后台进程将操作结果写入各种物理文件中永久性保存。
-
内存结构类型:
- 系统全局区(System Global Area,SGA)
- 程序全局区(Program Global Area,PGA)。
2.SGA
-
概述
- SGA是由Oracle分配的共享内存结构,包含一个数据库实例的数据和控制信息。
- SGA数据供所有的服务器进程和后台进程共享,所以SGA又称为共享全局区(Shared Global Area)。
-
构成
-
数据高速缓冲区(Database Buffer Cache)
-
功能: 存储从数据文件中检索出来的数据拷贝。应用程序要访问的数据必须从磁盘的数据文件读到数据缓冲区中处理。 在数据缓冲区中被修改后的数据由数据写入进程写到硬盘的数据文件中永久保存。 提高获取和更新数据的性能。
-
缓冲块的类型
- 脏缓存块(Dirty Buffers):脏缓存块中保存的是已经被修改过的数据。
- 空闲缓存块(Free Buffers):空闲缓存块中不包含任何数据,它们等待后台进程或服务器进程向其中写入数据。
- 命中缓存块(Pinned Buffers):命中缓存块是那些正被使用的数据块,同时还有很多会话等待修改或访问的数据块。
- 干净缓存块(Clean Buffers):干净缓存块是指那些当前没有被使用,即将被换出内存的缓存块。
-
数据高速缓存区大小。数据高速缓冲区越大,用户需要的数据在内存中的可能性就越大,即缓存命中率越高,从而减少了Oracle访问硬盘数据的次数,提高了数据库系统执行的效率。然而,如果数据高速缓冲区的值太大,Oracle就不得不在内存中寻找更多的块来定位所需要的数据,反而降低了系统性能。显然需要确定一个合理的数据高速缓冲区大小。 DB_CACHE_SIZE(标准块)
-
-
共享池(Shared Pool)
-
功能:共享池用于缓存最近执行过的SQL语句、PL/SQL程序和数据字典信息,是对SQL语句、PL/SQL程序进行语法分析、编译、执行的区域。
-
组成
-
库缓存。库缓存用于缓存已经解释并执行过的SQL语句和PL/SQL程序代码,以提高SQL或PL/SQL程序的执行效率。包括SQL工作区和PL/SQL工作区
-
数据字典缓存区。数据字典缓存区保存最常用的数据字典信息
-
-
共享池大小
- SHARED_POOL_SIZE
- 合适的共享池大小,可使编译过的程序代码长驻内存,大大降低重复执行相同的SQL语句、PL/SQL程序的系统开销,从而提高数据库的性能。
-
-
重做日志缓冲区(Redo Log Cache)
-
功能: 重做日志缓冲区用于缓存用户对数据库进行修改操作时生成的重做记录。
- 为了提高工作效率,重做记录并不是直接写入重做日志文件中,而是首先被服务器进程写入重做日志缓冲区中,在一定条件下,再由日志写入进程(LGWR)把重做日志缓冲区的内容写入重做日志文件中做永久性保存。在归档模式下,当重做日志切换时,由归档进程(ARCH)将重做日志文件的内容写入归档文件中
-
重做日志缓冲区的大小
- LOG_BUFFER
- 较大的重做日志缓冲区,可以减少对重做日志文件写的次数,适合长时间运行的、产生大量重做记录的事务。
-
-
大型池(Large Pool)
-
功能:大型池是一个可选的内存配置项,主要为Oracle多线程服务器、服务器I/O进程、数据库备份与恢复操作、执行具有大量排序操作的SQL语句、执行并行化的数据库操作等需要大量缓存的操作提供内存空间。如果没有在SGA区中创建大型池,上述操作所需要的缓存空间将在共享池或PGA中分配,因而影响共享池或PGA的使用效率。
-
大型池大小:LARGE_POOL_SIZE
-
-
Java池(Java Pool)
-
功能: Java提供对Java程序设计的支持,用于存储Java代码、Java语句的语法分析表、Java语句的执行方案和进行Java程序开发。
-
Java池大小: JAVA_POOL_SIZE,通常不小于20M,以便安装Java虚拟机
-
-
流池(Streams Pool)
-
功能:流池是一个可选的内存配置项,用于对流的支持。
-
流池大小:STREAMS_POOL_SIZE
-
-
其它结构(如固定SGA、锁管理等)
-
3.PGA
-
概述
- PGA是一个私有的内存区,不能共享,每个服务器进程只能访问自己的PGA,因此PGA又称为私有全局区(Private Global Area)。
- 系统同时为每个后台进程分配私有的PGA区。所有服务器进程PGA与所有后台进程PGA大小的和,即为实例的PGA的大小。
- PGA随着服务器进程与后台进程的启动而分配,随着服务器进程和后台进程的终止而被释放。
-
PGA构成:
- 排序区(Sort Area):存放排序操作所产生的临时数据。
- 游标信息区(Cursor Information):存放执行游标操作时所产生的数据。
- 会话信息区(Session Information):保存用户会话所具有的权限、角色、性能统计信息。
- 堆栈区(Stack Space):用于保存会话过程中的绑定变量、会话变量等信息。
4.查看内存参数
-
使用Oracle Enterprise Manager查看和设置SGA和PGA的参数
-
使用V$SGAINFO视图查看SGA基本信息
- 使用SYS用户以SYSDBA的身份登录到SQL Plus,执行下面的命令:
- SELECT * FROM V$SGAINFO;
- Granule Size项目表示粒度的大小
-
使用V$SGASTAT视图查看SGA统计信息
- 使用SYS用户以SYSDBA的身份登录到SQL Plus,执行下面的命令:
- SELECT * FROM V$SGASTAT;
-
使用show parameters 参数名 查看
- show parameters 参数名比如
- show parameters LOG_BUFFER
二、数据库进程
1.进程的概念
- 进程是操作系统中一个独立的可以调度的活动,用于完成指定的任务。进程与程序的区别在于:
- 进程是动态的概念,即动态创建,完成任务后立即消亡;而程序是一个静态实体。
- 进程强调执行过程,而程序仅仅是指令的有序集合。
2.进程的类型
-
用户进程
-
服务器进程
- 专用服务器进程(Dedicated Server Processes):只能为一个用户进程提供服务。
- 共享服务器进程(Shared Server Process):可以为多个用户进程提供服务。
-
后台进程
-
DBWR 数据库写入进程
- 把数据高速缓冲区中已经被修改过的数据(脏缓存块)成批写入数据文件中永久保存,同时使数据高速缓冲区有更多的空闲缓存块,保证服务器进程将所需要的数据从数据文件中读取到数据高速缓冲区中,提高缓存命中率。
-
LGWR 日志写入进程
-
日志写入进程负责把重做日志缓冲区的重做记录写入重做日志文件中永久保存。
-
启动LGWR进程
- 用户通过COMMIT语句提交当前事务
- 重做日志缓存被写满三分之一
- DBWR进程开始将脏缓存块写入数据文件
- 每隔3秒,即发生一次超时,将启动LGWR
-
-
CKPT 检查点进程
-
检查点概念
- 检查点是一个事件,当该事件发生时(每隔一段时间发生),DBWR进程把数据高速缓冲区中脏缓存块写入数据文件中,同时Oracle将对数据库控制文件和数据文件的头部的同步序号进行更新,以记录下当前的数据库结构和状态,保证数据的同步
-
CKPT进程的作用
- 更新控制文件与数据文件的头部,使其同步
- 触发DBWR进程,将脏缓存块写入数据文件
-
-
SMON 系统监控进程
-
实例恢复
- 执行前滚(ROLL FORWARD),将重做日志信息已经写入到重做日志文件中但还数据还没有写入到数据文件中的已提交的数据写入到数据文件。
- 在前滚完成后立即打开数据库。此时用户可以连接数据库,但此时数据文件中可能存在一些没有提交的数据需要回滚。
- 回滚没有提交的事务
-
回收不再使用的临时空间。
-
将各个表空间的空闲碎片合并(表空间的存储参数PCTINCREASE不为0时)
-
-
PMON 进程监控进程
- 负责恢复失败的用户进程或服务器进程,并且释放进程所占用的资源。
- 清除非正常中断的用户进程留下的孤儿会话,回退未提交的事务,释放会话所占用的锁、SGA、PGA等资源。
- 监控调度进程和服务器进程的状态,如果它们失败,则尝试重新启动它们,并释放它们所占用的各种资源。
-
ARCH 归档进程
-
功能
- 归档进程负责在日志切换后将已经写满的重做日志文件复制到归档目标中,防止写满的重做日志文件被覆盖
-
-
RECO 恢复进程
-
功能
- RECO进程负责在分布式数据库环境中自动解决分布式事务的故障。一个节点的RECO自动解决所有的悬而未决的事务。当一个数据库服务器的RECO后台进程试图建立同一远程服务器的通信,如果该远程服务器不可用或者网络连接不能建立时,RECO自动地在一个时间间隔之后再次连接。
-
-
LCKn 锁进程
-
功能
- LCKn进程用于Oracle并行服务器环境中。在数据库中最多可以启动10个LCKn进程,主要用于实例间的封锁。
-
-
Dnnn 调度进程
-
三、数据库存储结构
1.物理存储结构
-
数据文件
- 数据文件是数据库中所有数据的实际存储空间,所有数据文件大小的和构成了数据库的大小。
- 根据数据信息类型不同,数据文件分为永久性数据文件和临时数据文件两种。
- 查看数据文件的命令:SELECT NAME,FILE# FROM V$DATAFILE
-
控制文件
- 控制文件是记录数据库结构信息的重要的二进制文件,由Oracle系统进行读写操作,DBA不能直接操作控制文件。
- 数据库启动时,根据初始化参数文件中的CONTROL_FILES参数找到控制文件,然后根据控制文件中的信息,进行数据库数据文件和重做日志文件的加载,最后打开数据库。
- 一个数据库至少需要一个控制文件,如果控制文件损坏将导致数据库无法启动。
- 查看控制文件命令:SELECT NAME FROM V$CONTROLFILE
-
重做日志文件
- 重做日志文件是以重做记录的形式记录、保存用户对数据库所进行的变更操作,是数据库中最重要的物理文件。
- 利用重做日志文件可以进行事务的重做(REDO)或回退(UNDO),是数据库实例恢复的基础。
- 查看重做日志文件命令:SELECT GROUP#,MEMBER FROM V$LOGFILE ORDER BY GROUP#;
-
归档重做日志文件
- 归档重做日志文件是历史联机重做日志文件的集合,是联机重做日志文件被覆盖之前备份的副本。
- 如果数据库工作在归档模式,数据库归档进程会自动将写满的重做日志文件在覆盖之前复制到指定的位置。归档重做日志文件是数据库出现介质故障后实现数据库完全恢复的必要条件
- 查看数据库归档模式:SELECT LOG_MODE FROM V$DATABASE
- 查看数据库归档目的地:SELECT DESTINATION ,BINDING FROM V$ARCHIVE_DEST WHERE DESTINATION IS NOT NULL
-
初始化参数文件
- 初始化参数文件是数据库启动过程所必需的文件,记录了数据库显式参数的设置。
- 数据库启动的第一步就是根据初始化参数文件中的设置,创建并启动实例,即分配内存空间、启动后台进程。
- 初始化参数文件默认位置:%oracle_home%\database 目录下以.ora结尾的文件。
-
跟踪文件
-
跟踪文件是数据库中重要的诊断文件。
-
跟踪文件中包含数据库系统运行过程中所发生的重大事件的有关信息,可以为数据库运行故障的解决提供重要信息。
-
跟踪文件路径查看命令:select * from v$diag_info;
- Diag Trace项目为跟踪文件存储路径,文件后缀名为trc 。
-
-
告警文件
-
告警文件也是数据库中重要的诊断文件,记录数据库在启动、关闭和运行期间后台进程的活动情况。
-
在数据库出现故障时,应首先查看该文件,但文件中的信息与任何错误状态没有必然的联系。
-
跟踪文件路径查看命令:
-
select * from v$diag_info;
- Diag Trace项目为文本告警文件存储路径,文一般以alert开头,类型为文本文件。
- Diag Alert项目为XML格式告警文件存储路径,文件后缀名为XML。
-
2.逻辑存储结构
-
Oracle数据块
-
最小的 I/O单元
-
包括一个或者多个OS BLOCK
-
在数据库创建时设置,不可更改
-
分为标准块和非标准块
-
DB_BLOCK_SIZE 参数设置标准块大小
-
查看标准块大小:show parameter db_block_size数据库块结构
-
数据库块结构
-
块头部包括标题、表目录、行目录三部分。
- 标题包含块的一般属性信息,如块的物理地址、块所属段的类型等;
- 表目录包含数据块中保存的表的信息;
- 行目录包含数据块中的行地址等信息。
-
存储区包括行数据区和空闲区两部分。
- 行数据区是已经使用的空间,保存数据库的对象数据;
- 空闲区是尚未使用的存储空间,用于存放新的行或用来更新已存在的行。
-
-
数据块的管理
-
对块的管理主要是对块中可用存储空间的管理,确定保留多少空闲空间,避免产生行链接、行迁移而影响数据的查询效率。
-
当向表格中插入数据时,如果行的长度大于块的大小,行的信息无法存放在一个块中,就需要使用多个块存放行信息,这称为行链接。
-
当表格数据被更新时,如果更新后的数据长度大于块长度,Oracle会将整行的数据从原数据块迁移到新的数据块中,只在原数据块中留下一个指针指向新数据块,这称为行迁移。
-
对块的自动管理
- 如果建立表空间时使用本地管理方式,并且将段的管理方式设置为AUTO,则采用自动方式管理块。
-
对块的手动管理
-
通过为段设置PCTFREE和PCTUSED两个参数来控制数据块中空闲空间的使用。
-
PCTFREE
- PCTFREE参数指定块中必须保留的最小空闲空间比例。当数据块的自由空间百分率低于PCTFREE时,此数据块被标志为USED,此时在数据块中只可以进行更新操作,而不可以进行插入操作。该参数默认为10。
-
PCTUSED
- PCTUSED参数指定可以向块中插入数据时块已使用的最大空间比列。当数据块使用空间低于PCTUSED时,此块标志为FREE,可以对数据块中数据进行插入操作;反之,如果使用空间高于PCTUSED,则不可以进行插入操作。该参数默认为10。
-
-
-
-
区
- 区是由一系列连续的数据块构成的逻辑存储单元,是存储空间分配的最小单位。
- 当创建一个数据库对象时,Oracle为对象分配若干个区,以构成一个段来为对象提供初始的存储空间。当段中已分配的区都写满后,Oracle会为段分配一个新区,以容纳更多的数据。
- 查看某个模式所分配的区的命令:select owner,segment_name,extent_id,file_id from dba_extents where owner=‘SCOTT’
-
段
-
段是由一个或多个连续或不连续的区组成的逻辑存储单元。
-
段分类
-
数据段
- 数据段用来存储表或簇的数据,可以细分为表数据段、索引表数据段、分区表数据段及簇数据段四种。
-
索引段
- 用来存放索引信息,主要包括存储ROWID和索引键。
- 索引段与其相应的表段经常会被同时访问,为了减少硬盘访问的冲突,索引段与表段可以放到处于不同物理位置的表空间中。
-
临时段
- 当用户进行排序查询时,如果在指定的内存无法完成排序,Oracle将自动从用户默认的临时表空间中指派临时段进行排序。会话结束,数据将从临时段中自动删除。
-
回滚段
-
回滚段用于保存数据库的回滚信息,包含当前未提交事务所修改的数据的原始版本。
-
一个事务只能使用一个回滚段存放它的回滚信息,但是一个回滚段可以存放多个事务的回滚信息。回滚段可以动态创建和撤销。
-
事务回滚
- 当启动一个事务时,Oracle把一个回滚段指定给该事务。当事务修改数据时,该数据修改前的信息会保存在该回滚段中,当用户执行事务回滚操作时(ROLLBACK),Oracle会利用保存在回滚段中的数据将修改的数据恢复到原来的值。
-
数据库恢复
- 当数据库实例运行失败时,在数据库恢复时,Oracle先利用重做日志文件中的信息对数据文件进行恢复(包括提交事务和未提交事务的恢复),然后利用回滚段中的信息回滚未提交事务对数据的修改。
-
数据的读一致性
- 当一个用户对数据库进行修改,但还没有提交时,系统将用户修改的数据的原始信息保存在回滚段中,这样就可以为正在访问相同数据的其他用户提供一份该数据的原始视图,从而保证当前用户未提交的修改其他用户无法看到,保证了数据的读一致性。
-
闪回查询
- 闪回查询技术是Oracle 10g引入的新特性,利用该技术可以查询某个表过去某个时间点的状态。
-
-
-
-
表空间
-
表空间是Oracle数据库最大的逻辑存储单元,一个表空间由多个段组成。
-
表空间与数据库文件直接关联,一个表空间包含一个或多个数据文件,一个数据文件只能从属于某一个表空间,数据库对象就是存储在表空间对应的一个或多个数据文件中
-
一个数据对象(例如:表等)也要存储在一个表空间中。
-
数据库的大小从逻辑上看就是由表空间决定。
-
表空间的分类
-
系统表空间
-
SYSTEM 表空间,主要存储:
- 数据库的数据字典;
- PL/SQL程序的源代码和解释代码,包括存储过程、函数、包、触发器等;
- 数据库对象的定义,如表、视图、序列、同义词等。
-
SYSAUX表空间
- SYSAUX表空间是Oracle 10g新增的辅助系统表空间,主要用于存储数据库组件等信息,以减小SYSTEM表空间的负荷。
-
-
非系统表空间
-
撤销表空间
- 专门进行回滚信息的自动管理,由UNDO_TABLESPACE参数设置。
-
临时表空间
- 专门进行临时数据管理的表空间
- 在数据库实例运行过程中,执行排序等SQL语句时会产生大量的临时数据,这些临时数据将保存在数据库临时表空间中。
-
用户表空间
- 保存用户数据
-
-
大文件表空间与小文件表空间
- 所谓大文件表空间(Bigfile Tablespace)是指一个表空间只包含一个大数据文件,该文件的最大尺寸为128 TB(数据块大小为32 KB)或只32 TB(数据块大小为8 KB)。
- 与大文件表空间相对应,系统默认创建的表空间称为小文件表空间(Smallfile Tablespace),如SYSTEM表空间、SYSAUX表空间等。小文件表空间可以包含多达1024个数据文件。小文件表空间的总容量与大文件表空间的容量基本相似。
-
-
表空间的管理方式
- 字典管理方式
- 本地管理方式
- 在本地管理方式中,区的分配和管理信息都存储在表空间的数据文件中,而与数据字典无关。表空间在每个数据文件中维护一个“位图”结构,用于记录表空间中所有区的分配情况,因此区在分配与回收时,Oracle将对数据文件中的位图进行更新,不会产生回滚信息或重做信息。
-
查看数据库表空间:select tablespace_name from dba_tablespaces;
-