zoukankan      html  css  js  c++  java
  • Oracle数据库入门——体系结构

    1、oracle内存由SGA+PGA所构成

    2、oracle数据库体系结构
    数据库的体系结构是指数据库的组成、工作过程与原理,以及数据在数据库中的组织与管理机制。

    oracle工作原理:

    1)、在数据库服务器上启动Oracle实例;
    2)、应用程序在客户端的用户进程中运行,启用Oracle网络服务驱动器与服务器建立连接;
    3)、服务器运行Oracle网络服务驱动器,建立专用的服务器进程执行用户进程;
    4)、客户端提交事务;
    5)、服务器进程获取sql语句并检查共享池中是否有相似的sql语句,如果有,服务器进程再检查用户的访问权限;否则分配新的sql共享区分析并执行sql语句;
    6)、服务器从实际的数据文件或SGA中取得所需数据;
    7)、服务器进程在SGA中更新数据,进程DBWN在特定条件下将更新过的数据块写回磁盘,进程LGWR在重做日志文件中记录事务;
    8)、如果事务成功,服务器进程发送消息到应用程序中。    

    3、oracle服务器

    i、oracle服务器由oracle数据库和oracle实例组成。
    ii、oracle数据库是一个数据的集合,存放在数据文件里,该集合被视为一个逻辑单元。
    iii、oracle实例由管理数据库的后台进程和内存结构所构成。  

    4、oracle实例
    i、Oracle实例是内存结构和后台进程的集合
    ii、启动Oracle实例的过程,即:分配内存、启动后台进程
    iii、Oracle实例的内存包括SGA和PGA;
         当启动实例的时候分配SGA;
         当服务器进程建立时分配PGA;
         一般情况下,SGA:PGA=8:1分配内存。
    iiii、Oracle实例的后台进程包括SMON、PMON、DBWR、LGWR、ARC、CKPT等。   5、SGA(System Global Area): 系统全局区i0、数据库信息存储于SGA,由多个数据库进程共享。i1、SGA包括:共享池、数据缓冲区、日志缓冲区、Large池、Java池、Stream池。

    i2、共享池 
      1)、共享池是对SQL、PL/SQL程序进行语法分析、编译、执行的内存区域。
    如在执行SELECT * FROM emp语句时,会对sql语句进行语法分析->编译->生成执行计划->运行执行计划等,这些操作都在共享池中完成;如果再次执行SELECT * FROM emp语句时,会在共享池中查找是否有相同的sql,如果存在则省去编译、生成执行计划操作步骤而是直接运行执行计划,因此养成良好的编码习惯对于提高oracle执行效率非常有帮助。
      2)、共享池由库缓存和数据字典缓存组成。
      3)、共享池的大小直接影响数据库的性能。
    i3、数据缓冲
      1)、用于存储从磁盘数据文件中读入的数据,所有用户共享。
      2)、服务器进程将读入的数据保存在数据缓冲区中,当后续的请求需要这些数据时可以在内存中找到,不需要再从磁盘读取,提高了读取速度。
      3)、数据缓冲区的大小对数据库的读取速度有直接的影响。
      4)、硬盘上的数据文件中的数据,如何返回给用户的?
        i、从硬盘取出来,直接返回给用户,使得获取数据的效率非常低。
        ii、从硬盘取出来,放到数据缓冲区,从数据缓冲区中把数据返回给用户。下次读取同样的数据的话,直接从数据缓冲区中获取,不需要再从硬盘获取。  
    i4、日志缓冲区 
      1)、日志记录数据库的所有修改信息,日志信息首先产生于日志缓冲区。 
      2)、当日志缓冲区的日志数据达到一定数量时,由后台进程将日志数据写入日志文件中。
      3)、相对来说,日志缓冲区对数据库的性能影响较小
    eg、UPDATE emp SET empno=7935 WHERE empno=7934;首先在日记缓冲区中被记录,某个时候(三种情况;一、日志缓冲区中的记录达到1M 二、每隔3秒 三、日志缓冲区已经用了三分之一,满足其中任意一项就可以)把日志缓冲区中的这些记录写到在线日志中去   
    i5、Large池 
    为了进行大的后台进程操作而分配的内存空间,主要指备份恢复、大型IO操作、并行查询等。 
    i6、Stream池 
    为了stream应用而分配的内存空间,高级复制技术一部分。 
    i7、JAVA池
    为了java应用而分配的内存空间。   

    7、PGA(Process Global Area): 程序全局区
    i0、程序全局区(PGA)包含单个服务器进程所需的数据和控制信息,比如每个session传入的SQL绑定变量、以及对该session进行控制的控制信息。如果该session进行了排序或hash连接操作,也会使用PGA中的内存。
    i1、PGA是在用户进程连接到数据库并创建一个会话时自动分配的,保存每个与Oracle数据库连接的用户进程所需的信息
    i2、共享连接模式和专用连接模式,PGA的管理方式不同。
    大多情况下,采用专用连接模式。其产生的用户进程和服务器进程后面讲述

       

    8、oracle进程:用户进程、服务器进程(影子进程,相对用户进程而言)、后台进程
    i、用户进程是一个需要与oracle服务器进行交互的程序。当用户运行一个应用程序准备向数据库服务器发送请求时,即创建了用户进程。用户进程位于客户端,服务器进程、后台进程位于服务器端。
    ii、服务器进程用于处理连接到该实例的用户进程的请求。当用户连接至oracle数据库实例创建会话时,即产生服务器进程。
    iii、后台进程是Oracle数据库为了保持最佳系统性能和协调多个用户请求而设置的。Oracle实例启动时即创建一系列后台进程。

      

    10、用户进程和服务器进程
    i、对专用连接来说,用户在客户端启动了一个应用程序,例如sql*plus,就是在客户端启动一个用户进程;与oracle服务器端连接成功后,会在服务器端生成一个服务器进程,该服务器进程作为用户进程的代理进程,代替客户端执行各种命令并把结果返回给客户端。9i、10g、11g都使用专用连接。
    ii、用户进程一旦中止,服务器进程立刻中止。
    iii、SGA对所有用户共享,PGA不共享。

      

    11、会话
    i0、会话是用户与 Oracle 服务器的单个连接
    i1、当用户与服务器建立连接时创建会话
    i2、当用户与服务器断开连接时关闭会话
    i3、从v$session中查询会话信息,SELECT * FROM v$session;

       

    12、后台进程
    i0、PMON 进程监控进程,监控用户进程是否正常。
    1)、清理出现故障的进程。 
    2)、释放所有当前挂起的锁定。
    3)、释放故障进程使用的资源。
    i1、SMON 系统监控进程,实时监控整个oracle状况。
    1)、在实例失败之后,重新打开数据库时自动恢复实例。 
    2)、整理数据文件的自由空间,将相邻区域结合起来。
    3)、释放不再使用的临时段。
    i2、DBWR 数据写入进程
    1)、管理数据缓冲区,将最近使用过的块保留在内存中。
    2)、将修改后的缓冲区数据写入数据文件中。 
    i3、LGWR 日志写入进程
    1)、负责将日志缓冲区中的日志数据写入日志文件。 
    2)、系统有多个日志文件,该进程以循环的方式将数据写入文件。
    i4、CKPT检查点进程
    1)、为了防止实例崩溃,为了尽快进行实例恢复的进程。
    2)、检查点包括两种:完全检查点、增量检查点。
    3)、完全检查点只有下面两种情况下被触发:
    1,用户发出alter system checkpoint;
    2,除了shutdown abort以外的其他方式正常关闭数据库。
    3)、增量检查点触发情况:
    1,每隔三秒。
    2,在线日志切换。
    DBWR、LGWR、CKPT之间如何协调工作的?
    i5、查看进程信息
    1)、从v$process中查询启动的后台进程信息
    2)、查看启动了几个DBWR进程
    select * from v$process where program like '%DBW%';
    查看DBWR进程个数: show parameter db_wr,DBWR进程个数跟脏数据的产生有一定的影响。
    修改DBWR进程个数: 
    alter system set db_writer_processes=3 scope=memory; --会报"无法修改指定的初始化参数"错误
    alter system set db_writer_processes=3 scope=spfile;--修改成功,下次启动时才生效
    3)、查看启动了几个ARC进程
    select * from v$process where program like '%ARC%';

       

    13、9i中的自动PGA管理
    i、前提是:必须设置初始化参数workarea_size_policy为AUTO。
    ii、自动PGA管理,DBA根据数据库的负载情况,估计所有的session大概需要消耗的PGA的总的大小,然后把该值设置成初始化参数pga_aggregate_target,Oracle就会自动调整每个session的PGA的大小。

       

    14、10g中的自动SGA管理
    i、自动SGA管理,即ASMM,Automatic Shared Memory Management。只为SGA分配一个总的大小就可以了,不必像9i那样具体分配SGA中的每一个部分的大小。
    ii、在设置初始化参数statistics_level为typical或all,才可以启动ASMM。然后可以使用10g提供的一个新的初始化参数sga_target来定义了整个SGA的大小。
    iii、为此,10g有一个新的后台进程MMAN,即memory manager,用于进行自动SGA管理。
    iiii、注意另一个后台进程MMON,即memory monitor,用于自动统计信息收集。

       

    15、11g中的自动内存管理
    i1、自动内存管理,即AMM,Automatic Memory Management。只为Oracle的使用整体分配一个总的内存大小就可以了,不必像10g那样具体分配SGA和PGA的大小。
    i2、初始化参数statistics_level为typical或all,才可以启动AMM。
    show parameter statistics_level; --查看AMM
    show parameter memory; --查看整个oracle占用了多大内存
    alter system set memory_max_target=900m;--设置内存最大可以达到多大
    i3、新的初始化参数memory_target来定义了整个内存的大小,即SGA加上PGA的总的大小。
    alter system set memory_target=500m; --memory_target设置的值要不大于memory_max_target
    i4、新的初始化参数memory_max_target来定义了memory_target最大可以达到的值。
    alter system set memory_max_target=900m scope=spfile; --下次启动生效,scope=spfile不能省略否则报错
    i5、注意:如果使用AMM,则sga_target和pga_aggregate_target的值应该设置成0。
    show parameter sga_target;
    show parameter page_aggregate_target;
    alter system set sga_target=0m;
    alter system set pag_aggregate_target=0;
    i6、11g中的后台进程MMAN,用于进行自动内存管理。

       

    16、oracle数据库结构
    i、Oracle数据库由操作系统文件组成,这些文件为数据库信息提供实际物理存储区。
    ii、Oracle 数据库包括逻辑结构和物理结构;
    物理结构包含数据库中的一组操作系统文件;
    逻辑结构指数据库创建之后形成的逻辑概念之间的关系。

       

    17、物理结构
    物理组件就是Oracle数据库所使用的操作系统物理文件。我们可以在D:devoracleproduct10.2.0oradataorcl目录下进行查看,在生产环境中不同的文件放在不同的目录,根据用户访问的频繁情况来做决定。
    1)、主要物理文件可分为三类: 
    i、数据文件:数据文件用于存储数据库数据,如表、索引数据等。
    ii、控制文件:控制文件是记录数据库物理结构的二进制文件。
    iii、在线日志文件:记录对数据库的所有修改信息,用于故障恢复。
    注意:丢失这些文件,数据库不可以继续运行,需要进行介质恢复。

    2)、非主要物理文件包括:
    参数文件、密码文件、告警和跟踪文件、归档日志文件、备份文件。
    参数文件分为pfile文件和spfile文件,位于ORACLE_HOMEDATABASE目录下,9i开始默认不使用sfile文件,如spfileorcl.ora文件。
    密码文件:sys用户密码,位于ORACLE_HOMEDATABASE目录下,如pwdorcl.ora文件。
    查看是否有归档日志:archive log list。
    ORACLE_HOME: D:devoracleproduct10.2.0db_1
    注意:丢失这些文件,数据库仍然可以继续运行,不需要进行介质恢复。

      

    18、逻辑结构
    数据库的逻辑结构是从逻辑的角度分析数据库的组成。
    Oracle 的逻辑组件包括:数据库->表空间->段->区->数据库->模式。

      

    19、表空间
    i1、表空间是数据库中最大的逻辑单位,一个 Oracle 数据库至少包含一个表空间,就是名为SYSTEM的系统表空间。
    i2、每个表空间是由一个或多个数据文件组成的,一个数据文件只能与一个表空间相关联。
    i3、表空间的大小等于构成该表空间的所有数据文件大小之和。
    i4、创建表空间的语法是:
    CREATE TABLESPACE tablespacename
    DATAFILE 'filename' [SIZE integer [K|M]] 
    [AUTOEXTEND [OFF|ON]];
    i5、默认表空间
    1)、默认包含如下表空间(从v$tablespace中查看):SYSTEM、SYSAUX、TEMP、UNDOTBS1、USERS、EXAMPLE。
    2)、SYSTEM是系统表空间,存放系统的最基本的信息,如果SYSTEM表空间坏掉,Oracle将无法启动。
    3)、SYSAUX从10g中引入,作为SYSTEM的辅助表空间,用以减少SYSTEM表空间的负荷 。以前其他表空间中的一些组件,现在放到SYSAUX表空间中了。比如,以前SYSTEM表空间中LogMiner、以前SYSTEM表空间中Logical Standby、Spatial、以前DRSYS表空间中Oracle Text等。
    i6、TEMP是临时表空间,当排序不能在分配的空间中完成时,就会使用磁盘排序的方式,即在Oracle实例中的临时表空间中进行。
    UNDOTBS1是撤销表空间,是UNDO类型的表空间,保存用户进行DML操作中,修改前的数据。
    USERS是数据库默认的永久表空间。
    EXAMPLE是数据库测试用例所涉及的表的所属表空间。
    i7、select * from dba_data_files;--查看表空间的具体信息
    select * from v$tablespace;--查看表空间

      

    20、段、区、数据库、模式
    i、段,ASSM 自动段存储管理
    1)、段是构成表空间的逻辑存储结构,段由一组区组成。 
    2)、按照段所存储数据的特征,将段分为若干种类型,主要有数据段、索引段、回退段和临时段。
    ii、区
    1)、区为段分配空间,它由连续的数据块组成。 
    2)、当段中的所有空间已完全使用时,系统自动为该段分配一个新区。
    3)、区不能跨数据文件存在,只能存在于一个数据文件中。
    iii、数据库
    1)、数据块是Oracle服务器所能分配、读取或写入的最小存储单元。
    2)、Oracle服务器以数据块为单位管理数据文件的存储空间。 
    3)、show  parameter db_block_size; --查看数据块大小
    iiii、模式,等同于用户
    1)、模式是对用户所创建的数据库对象的总称。 
    2)、模式对象包括表、视图、索引、同义词、序列、过程和程序包等

  • 相关阅读:
    heat模板
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode819.Most Common Word最常见的单词
    Leetcode819.Most Common Word最常见的单词
    Leetcode783.Minimum Distance Between BST Nodes二叉搜索树结点最小距离
  • 原文地址:https://www.cnblogs.com/kscnchina/p/4569747.html
Copyright © 2011-2022 走看看