第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';

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

例子2-v$datafile:

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

   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包括:表空间--段--区--数据块。

2.2.1表空间(Tablespace)

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

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

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

SQL> select tablespace_name from dba_tablespaces;

以上结果,显示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数据库在进行输入输出操作时,都是以块为单位进行逻辑读写操作的。
数据块都具有相同的结构,其结构如图所示。
块的默认大小,由初始化参数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内存结构是影响数据库性能的主要因素之一,其结构如图所示。
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

显示块竞争统计数据

 
 
 
 
 
 
 
 
 

Oracle学习笔记--第2章 oracle 数据库体系结构的更多相关文章

  1. java JDK8 学习笔记——第16章 整合数据库

    第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...

  2. Oracle学习笔记之四sp1,Oracle 11g的常用函数

    从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i)    分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...

  3. Oracle涂抹oracle学习笔记第9章RMAN说,我能恢复

    RMAN中的恢复对应两个操作:数据库修复(restore)和数据库恢复(recover) 数据库修复(restore):是指利用备份集的数据文件来替换已经损坏的数据库文件或者将其恢复到一个新的位置.R ...

  4. Oracle学习笔记之二,Oracle 11g体系结构

    Oracle 11g体系结构概述 实例(Instance),是指一组Oracle后台进程以及在服务器中分配的共享内存区域: 数据库(Database),是由基于磁盘的数据文件.控制文件.日志文件.参数 ...

  5. Oracle涂抹oracle学习笔记第8章RMAN说,我能备份

    本次测试服务器为172.16.25.33 使用rman连接本地数据库 rman target / 在rman中执行启动与关闭的命令与sqlplus相同 在rman中执行sql语句 sql ‘需要执行的 ...

  6. Oracle涂抹oracle学习笔记第10章Data Guard说,我就是备份

    DG 是备份恢复工具,但是更加严格的意义它是灾难恢复 Data Guard是一个集合,由一个Primary数据库及一个或者多个Standby数据库组成,分两类逻辑Standby和物理Standby 1 ...

  7. oracle学习笔记(十四) 数据库对象 索引 视图 序列 同义词

    数据库对象 用户模式:指数据库用户所创建和存储数据对象的统称.在访问其它用户模式的数据库对象时需加上用户模式. 如:scott.emp, scott.dept等. 数据库对象包括:表.视图.索引.序列 ...

  8. oracle学习笔记(十四) 数据库对象 索引 视图 序列 同义词

    数据库对象 用户模式:指数据库用户所创建和存储数据对象的统称.在访问其它用户模式的数据库对象时需加上用户模式. 如:scott.emp, scott.dept等. 数据库对象包括:表.视图.索引.序列 ...

  9. Oracle学习笔记--第3章 使用sql*plus工具

    使用sql*plus工具 1.sqlplus连接方式示例 sqlplus system/123[as sysdba]; 2.查看表结构命令;desc[ribe] e.g.      desc scot ...

随机推荐

  1. CodeChef - AMLEX-Poetic word

    题目链接  Dhinwaji is an acclaimed poet and likes to play with words and letters. He has bought some sti ...

  2. jQuery 选择城市,显示对应的即时时区时间

    因客户需要,我们CRM系统中,jQuery 弄个时区插件 如图: HTML: <div id="cityDate"> <i class="P_arrow ...

  3. 使用 Parallel LINQ 进行数据分页

    a)   第一种[耗时11~18s],这种查询方式并不是很优化,但是目前也没有想到更好的方式,除了创建一张中间表,是不是可以使用[全文索引]? SELECT * FROM ( SELECT  ROW_ ...

  4. Linux 创建 时间命名 文件

    创建以 时间 命名文件:: touch /logs/`date +%Y-%m-%d_%d_%H:%M`.log touch "$(date +%Y-%m-%d_%H:%M:%S.TXT)

  5. Linux - 文件操作

    touch file # 创建空白文件 rm -rf 目录名 # 不提示删除非空目录(-r:递归删除 -f强制) dos2unix # windows文本转linux文本 unix2dos # lin ...

  6. Python数据分析学习目录

    python数据分析学习目录 Anaconda的安装和更新 矩阵NumPy pandas数据表 matplotlib-2D绘图库学习目录                      

  7. CF1009E [Intercity Travelling]

    这道题先考虑一种暴力n方做法 设\(f_i\)表示到\(i\)点所有情况的困难度之和(\(f_0=0\)),\(pre_i=\sum_{j=1}^{i} a_j\) 考虑从点\(j\)中途不经过休息站 ...

  8. 计算正多边形的面积 Gym - 101840G

    http://codeforces.com/gym/101840/attachments 题目大意:输入n,r,k .n代表往外扩张几次,r代表圆的内接圆半径,k代表多边形的边长.问你每次扩张多边形和 ...

  9. android studio 清空缓存插件

    http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0308/4036.html 一个提高开发效率的ADB插件:ADB IDEA 泡在 ...

  10. CentOS7配置网络

    #进入目录 cd /etc/sysconfig/network-scripts/ #编辑ifcfg-XXX vi ifcfg-eno167777 #把onboot=no 改为yes #重启 shutd ...