Oracle学习笔记--第2章 oracle 数据库体系结构

时间:2022-12-19 13:22:59

第2章 oracle 数据库体系结构

目录:

—————————————

2.1物理存储结构

2.1.1数据文件

2.2.2控制文件

2.1.3重做日志文件

2.1.4其他文件

2.2逻辑存储结构

2.3Oracle进程

2.4Oracle内存结构

2.5数据字典

—————————————

2.1---------------------------------------------------- 物理存储结构----------------------------------------------------------------

Oracle数据库在物理上由3中类型的文件组成:数据文件(.dbf), 控制文件(.ctl), 重做日志文件(.log)

    2.1.1数据文件:存储数据库数据的文件。包括表的记录和索引等,若被频繁访问,则存储在内存缓冲区。

  特点:一个表空间由一个或多个数据文件组成。

一个数据文件只对应一个数据库,一个数据库包括多个数据文件。

数据文件可设置自动扩展参数,实现自动扩展的功能。

数据文件的数据字典:dba_data-file 和 v$datafile(记录数据文件动态信息)

dba_data-file主要字段如下:

* file_name:数据文件名称,路径。
* file_id: 数据文件在数据库中的id号
* tablespace_name:数据文件表空间名
* bytes:数据文件大小
* blocks:所占块数
* status: 数据文件状态
* autoextensible: 是否可扩展

v$datafile主要字段如下:

* file#:存放数据文件编号
* status:数据文件状态
* checkpoint#:数据文件同步号,随系统的运行自动修改,以维持所有数据文件的同步。
* bytes: 数据文件大小
* block:数据文件所占数据块数
* name:数据文件名称,路径。

提示:数据字典字段的查看方法 describe/desc + 数据字典:如 desc v$datafile;

例子1-dba_data-file:

以system用户登录进oracle之后:

SQL> column file_name format A50;
SQL> column tablespace_name format A50;
SQL> select file_name,tablespace_name,autoextensible from dba_data_file where tablespace_name ='SYSTEM';

Oracle学习笔记--第2章 oracle 数据库体系结构

(注意:"tablespace_name ='SYSTEM'  "中,SYSTEM 这个用户名要大写)

例子2-v$datafile:

SQL> column name format A50;
SQL> select file#,name,checkpoint_change# from v$datafile;

Oracle学习笔记--第2章 oracle 数据库体系结构

   2.1.2控制文件:很小的二进制文件,用于描述和维护数据库的物理结构,存放有数据库文件盒控制文件的信息,很重要。

一旦控制文件受损,数据库可能无法正常运行

SQL> column name format A50;
SQL> select name from v$controlfile;

运行效果跟前面类似,这里不列举效果图。

Oracle一般默认创建3个相同的控制文件,来保证数据库可及时调用其他备用控制文件继续工作。

    2.1.3重做日志文件:记录数据库中所有修改信息的文件,简称“日志文件”

其中,修改信息,包括数据的修改和数据库结构的修改。而查询 ,不会记录到日志文件中。

日志文件是数据库系统最最重要的文件之一,它可以保证数据库的安全,是进行数据库备份和恢复的重要手段

一旦日志文件受损,数据库可能无法正常运行

工作方式:数据库出现修改信息时,修改后的信息首先存储到内存的 日志缓冲区 中,对应的日志信息则存储在日志缓冲区,一定数量时,由Oracle后台进程LGWR将日志写到日志文件中。

提交修改信息后,数据文件只保留修改后的数据,而日志文件中,既保留修改后,也保留修改前的数据,以备数据恢复。so,日志文件这么重要,自然有多份。

实际应用中,允许对日志文件进行镜像,日志文件与镜像文件构成一个 日志文件组,一个组中的日志文件最好放在不同磁盘。镜像最多5个。

当所有日志文件组空间填满后,系统重新切换到第一个日志文件组,切换时,组中已有的日志信息是否覆盖,取决于十几块的运行模式。(归档/非归档模式,如果是归档,则先写到归档日志文件中,再被新内容覆盖;如果非归档模式,则直接覆盖)

2.1.4其他文件:参数文件,备份文件,归档重做日志文件,警告、跟踪日志文件。

参数文件:记录oracle数据库基本参数,包括文本参数文件(Parameter File, PFILE),服务器参数文件(Server Parameter File, SPFILE)

备份文件:文件受损失,可借助备份文件进行修复。还原过程,就是备份文件替换该文件的过程。

归档重做日志文件:用于对写满的日志文件进行复制并保存,由归档进程ARCn实现,该进程负责将写满的重做日志文件复制到归档日志目标中。

警告、跟踪日志文件:当一个进程发现了一个内部错误,将错误信息存到它的跟踪文件中。警告文件则是一种特殊的跟踪文件,它包含错误事件的说明,随之产生的跟踪文件则记录该错误的详细信息。

2.2---------------------------------------------------- 逻辑存储结构----------------------------------------------------------------

从逻辑结构上,oracle包括:表空间--段--区--数据块。

Oracle学习笔记--第2章 oracle 数据库体系结构

2.2.1表空间(Tablespace)

表空间是Oracle中最大的逻辑存储结构,它与物理上的一个或多个数据文件相对应,每个Oracle数据库都至少拥有一个表空间,表空间的大小等于构成该表空间的所有数据文件大小的总和。表空间用于存储用户在数据库中创建的所有内容。

在安装Oracle时,Oracle数据库系统一般会自动创建一系列表空间(如system)。可以通过数据字典dba_tablespaces查看表空间的信息

例子3-通过数据字典dba_tablespace查看当前数据库的所有表空间名称:

SQL> select tablespace_name from dba_tablespaces;

Oracle学习笔记--第2章 oracle 数据库体系结构

以上结果,显示6个表空间。

表空间 说明
sysaux

辅助系统表空间。用于减少系统表空间的负荷,提高系统的作业效率。该表空间由Oracle系统内部自动维护,一般不用于存储用户数据

system

系统表空间,用于存储系统的数据字典、系统的管理信息和用户数据表等

temp 临时表空间。用于存储临时的数据,例如存储排序时产生的临时数据。一般情况下,数据库中的所有用户都使用temp作为默认的临时表空间。临时表空间本身不是临时存在的,而是永久存在的,只是保存在临时表空间中的段是临时的。临时表空间的存在,可以减少临时段与存储在其他表空间中的永久段之间的磁盘I/O争用

undotbs1

撤消表空间。用于在自动撤消管理方式下存储撤消信息。在撤消表空间中,除了回退段以外,不能建立任何其他类型的段。所以,用户不可以在撤消表空间中创建任何数据库对象
users

用户表空间。用于存储永久性用户对象和私有信息

2.2.2段(Segment)

段是一组盘区,组成了被oracle视为一个单位的数据库对象,如表或索引。so,段,是数据库终端用户将处理的最小存储单位。段满,oracle分配另一数据区,段的数据区在磁盘上可不连续。

段,分为:数据段.索引段.临时段.回退段
2.2.3区(Extent)

在Oracle数据库中,区是磁盘空间分配的最小单位,由一个或多个数据块组成。当一个段中的所有空间被使用完后,系统将自动为该段分配一个新的区。
一个或多个区组成一个段,所以段的大小由区的个数决定。不过,一个数据段可以包含的区的个数并不是无限制的,它由如下两个参数决定。
minextents:定义段初始分配的区的个数,也就是段最少可分配的区的个数。
maxextents:定义一个段最多可以分配的区的个数。

2.2.4数据块(Block)

数据块(也可以简称为块)是用来管理存储空间的最基本单位,也是最小的逻辑存储单位。Oracle数据库在进行输入输出操作时,都是以块为单位进行逻辑读写操作的。
数据块都具有相同的结构,其结构如图所示。
Oracle学习笔记--第2章 oracle 数据库体系结构
块的默认大小,由初始化参数db_block_size指定,数据库创建完成之后,该参数值无法再修改。通过SHOW PARAMETER语句可以查看该参数的信息,如下:
SQL> SHOW PARAMETER db_block_size;
NAME                               TYPE          VALUE
---------------------------  ---------  ------------------------
db_block_size                    integer       8192

2.3---------------------------------------------------- Oracle进程----------------------------------------------------------------

2.3.1 DBWn进程

DBWn(Database Writer,数据库写入)进程,是Oracle中采用LRU(Least Recently Used,最近最少使用)算法将数据缓冲区中的数据写入数据文件的进程。
DBWn进程主要有如下几个作用:
管理数据缓冲区,以便用户进程总能找到空闲的缓冲区。
将所有修改后的缓冲区数据写入数据文件。
使用LRU算法将最近使用过的块保留在内存中。
通过延迟写来优化磁盘I/O读写。

2.3.2 LGWR进程

LGWR(Log Writer,日志写入)进程,是负责管理日志缓冲区的一个后台进程,用于将日志缓冲区中的日志数据写入磁盘的日志文件中。
LGWR进程将日志信息同步地写入在线日志文件组的多个日志成员文件中,如果日志文件组中的某个成员文件被删除或者不可使用,则LGWR进程可以将日志信息写入该组的其他文件中,从而不影响数据库正常运行,但会在警告日志文件中记录错误。

2.3.2 CKPT进程

CKPT(Check Point,检查点或检验点)进程,一般在发生日志切换时自动产生,用于缩短实例恢复所需的时间。在检查点期间,CKPT进程更新控制文件与数据文件的标题,从而反映最近成功的SCN(System Change Number,系统更改号)。
在Oracle数据库中,控制检查点产生的参数有如下两种。
log_checkpoint_timeout
log_checkpoint_interval

2.3.4 SMON进程

SMON(System Monitor,系统监控)进程,用于数据库实例出现故障或系统崩溃时,通过将联机重做日志文件中的条目应用于数据文件,执行崩溃恢复。
SMON进程一般用于定期合并字典管理的表空间中的空闲空间,此外,它还用于在系统重新启动期间清理所有表空间中的临时段。

2.3.5 PMON进程

PMON(Process Monitor,进程监控)进程,用于在用户进程出现故障时执行进程恢复操作,负责清理内存存储区和释放该进程所使用的资源。
PMON进程周期性检查调度进程和服务器进程的状态,如果发现进程已死,则重新启动它。PMON进程被有规律地唤醒,检查是否需要使用,或者其他进程发现需要时也可以调用此进程。

2.3.6 ARCn进程

ARCn(Archive Process,归档)进程,用于将写满的日志文件复制到归档日志文件中,防止日志文件组中的日志信息由于日志文件组的循环使用而被覆盖。
一个Oracle数据库实例中,允许启动的ARCn进程的个数由参数log_archive_max_ processes决定。

2.3.7 RECO进程

RECO(Recovery,恢复)进程存在于分布式数据库系统中,用于自动解决在分布式数据库中出现的事务故障。
当一个数据库服务器的RECO进程试图与一个远程服务器建立通信时,如果远程服务器不可用或者无法建立网络连接,则RECO进程将自动在一个时间间隔之后再次连接。
2.4---------------------------------------------------- Oracle内存结构----------------------------------------------------------------
Oracle内存结构是影响数据库性能的主要因素之一,其结构如图所示。
Oracle学习笔记--第2章 oracle 数据库体系结构
2.4.1 系统全局区(SGA)
系统全局区(System Global Area,SGA)是Oracle为系统分配的一组共享的内存结构,可以包含一个数据库实例的数据或控制信息。
SGA区域总内存大小有参数sga_max_size决定,可以使用SHOW PARAMTER语句查看该参数的信息。
SQL> show parameter sga_max_size; 

如果没有指定sga_max_size参数,而是指定了sga_target,oracle会自动调整SGA区域的内存大小,使总量等于sga_target的值。

1.数据缓冲区
数据缓冲区用于存储从磁盘数据文件中读取的数据,供所有用户共享。由于系统读取内存的速度要比读取磁盘快得多,所以数据缓冲区的存在可以提高数据库的整体效率。
SQL> show parameter db_cache_size; 
2.日志缓冲区
日志缓冲区用于存储数据库的修改操作信息。
SQL> show parameter log_buffer; 
3.共享池
共享池用于保存最近执行的SQL语句、PL/SQL程序的数据字典信息,它是对SQL语句和PL/SQL程序进行语法分析、编译和执行的内存区域。共享池主要包括如下两种子缓存。
库缓存(Library Cache)
数据字典缓存(Data Dictionary Cache)
SQL> show parameter shared_pool_size; 
4.大型池
大型池,用于提供一个大的缓冲区供数据库的备份与恢复操作使用,它是SGA的可选区域。
SQL> show parameter large_pool_size; 
5.Java池
Java池,用于在数据库中支持Java的运行。
SQL> show parameter java_pool_size; 
2.4.2 程序全局区(PGA)
程序全局区(Program Global Area,PGA)是Oracle系统分配给一个进程的私有内存区域。
ps:PGA不是共享区,只有服务器本身才能访问,用来保存用户在编程时使用的变量和数组。
程序全局区的大小由参数pga_aggregate_target决定,可以通过SHOW PARAMETER语句查看该参数的信息,如下:
SQL> SHOW PARAMETER pga_aggregate_target;
NAME                                   TYPE          VALUE
--------------------------------  -------------  ----------
pga_aggregate_target                   big integer   20M

2.5---------------------------------------------------- 数据字典 ----------------------------------------------------------------

数据字典是由Oracle自动创建并更新的一组表,它是Oracle数据库的重要组成部分,提供了数据库结构、数据库对象空间分配和数据库用户等有关的信息。
数据字典的所有者为sys用户,而数据字典表和数据字典视图都被保存在system表空间中。
表空间 说明
User视图

USER视图的名称以user_为前缀,用来记录用户对象的信息。例如user_tables视图,它记录用户的表信息

ALL视图

ALL视图的名称以all_为前缀,用来记录用户对象的信息以及被授权访问的对象信息。例如all_synonyms视图,它记录用户可以存取的所有同义词信息

DBA视图

DBA视图的名称以dba_为前缀,用来记录数据库实例的所有对象的信息。例如dba_tables视图,通过它可以访问所有用户的表信息

V$视图

V$视图的名称以v$为前缀,用来记录与数据库活动相关的性能统计动态信息。例如v$datafile视图,它记录有关数据文件的统计信息

GV$视图

GV$视图的名称以gv$为前缀,用来记录分布式环境下所有实例的动态信息。例如gv$lock视图,它记录出现锁的数据库实例的信息

 
oracle中基本数据字典:

字典名称

说  明

dba_tables

所有用户的所有表的信息

dba_tab_columns

所有用户的表的字段信息

dba_views

所有用户的所有视图信息

dba_synonyms

所有用户的同义词信息

dba_sequences

所有用户的序列信息

dba_constraints

所有用户的表的约束信息

dba_indexes

所有用户的表的索引简要信息

dba_ind_columns

所有用户的索引的字段信息

dba_triggers

所有用户的触发器信息

dba_sources

所有用户的存储过程信息

dba_segments

所有用户的段的使用空间信息

dba_extents

所有用户的段的扩展信息

dba_objects

所有用户对象的基本信息

cat

当前用户可以访问的所有基表

tab

当前用户创建的所有基表、视图和同义词等

dict

构成数据字典的所有表的信息        

与数据库组件相关的数据字典:

数据库组件

数据字典中的表或视图

说  明

数据库

v$datafile

记录系统的运行情况

表空间

dba_tablespaces

记录系统表空间的基本信息

dba_free_space

记录系统表空间的空闲空间的信息

控制文件

v$controlfile

记录系统控制文件的基本信息

v$controlfile_record_section

记录系统控制文件中记录文档段的信息

v$parameter

记录系统各参数的基本信息

数据文件

dba_data_files

记录系统数据文件以及表空间的基本信息

v$filestat

记录来自控制文件的数据文件信息

v$datafile_header

记录数据文件头部分的基本信息

dba_segments

记录段的基本信息

数据区

dba_extents

记录数据区的基本信息

日志

v$thread

记录日志线程的基本信息

v$log

记录日志文件的基本信息

v$logfile

记录日志文件的概要信息

归档

v$archived_log

记录归档日志文件的基本信息

v$archive_dest

记录归档日志文件的路径信息

数据库实例

v$instance

记录实例的基本信息

v$system_parameter

记录实例当前有效的参数信息

内存结构

v$sga

记录SGA区的大小信息

v$sgastat

记录SGA的使用统计信息

v$db_object_cache

记录对象缓存的大小信息

v$sql

记录SQL语句的详细信息

v$sqltext

记录SQL语句的语句信息

v$sqlarea

记录SQL区的SQL基本信息

后台进程

v$bgprocess

显示后台进程信息

v$session

显示当前会话信息

 
 
常用动态性能视图:

视图名称

说  明

v$fixed_table

显示当前发行的固定对象的说明

v$instance

显示当前实例的信息

v$latch

显示锁存器的统计数据

v$librarycache

显示有关库缓存性能的统计数据

v$rollstat

显示联机的回滚段的名字

v$rowcache

显示活动数据字典的统计

v$sga

显示有关系统全局区的总结信息

v$sgastat

显示有关系统全局区的详细信息

v$sort_usage

显示临时段的大小及会话

v$sqlarea

显示SQL区的SQL信息

v$sqltext

显示在SGA中属于共享游标的SQL语句内容

v$stsstat

显示基本的实例统计数据

v$system_event

显示一个事件的总计等待时间

v$waitstat

显示块竞争统计数据