zoukankan      html  css  js  c++  java
  • Oracle学习笔记--第2章 oracle 数据库体系结构

    第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-filev$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

    显示块竞争统计数据

     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Spring 事务全解析
    oracle trigger pl/sql
    reflection
    JAXP(Java API XML Parser)
    log4j扩展后的Appender
    Hibernate sql查询
    tt,mongodb主从启动命令
    4种挂隐藏链接的代码
    Delphi过程函数传递参数的几种方式
    学校Win7 KMS激活服务器已经可以用了
  • 原文地址:https://www.cnblogs.com/xiaoliu66007/p/3382474.html
Copyright © 2011-2022 走看看