zoukankan      html  css  js  c++  java
  • 【Oracle11g】08_Oracle的体系结构

    1.Oracle体系结构

    数据库的体系结构是指数据库的组成、工作过程与原理,以及数据在数据库中的组织与管理机制。
    Oracle服务器提供开放、全面和综合的信息管理,它由Oracle数据库和Oracle实例组成。

    Oracle 数据库是一个数据的集合,该集合被视为一个逻辑单元。管理数据库的后台进程和内存结构的集合称为 Oracle 实例。

    2.Oracle11g的主要组件

    • Oracle 实例是内存结构和后台进程的集合
    • 启动Oracle 实例的过程,即:分配内存、启动后台进程
    • Oracle 实例的内存包括SGA和PGA
    • Oracle 实例的后台进程包括SMON、PMON、DBWR、LGWR、ARC、CKPT等。

    2.1 内存结构

    一般情况下,oracle使用的内存是计算机总的内存的80%,SGA占用的内存是Oracle使用内存的80%

    1. Oracle实例启动时分配系统全局区(SGA)。
      2)当服务器进程启动时分配程序全局区(PGA)。

    2.1.1 SGA(系统全局区)

    数据库信息存储在SGA中,由多个数据库进程共享。
    SGA包括:共享池、数据缓冲区、日志缓冲区、Large池、Java池、Stream池。

    共享池

    共享池是对SQL、PL/SQL程序进行语法分析、编译、执行的内存区域
    共享池由库缓存和数据字典缓存组成。
    共享池的大小直接影响数据库的性能。

    例如:执行SQL语句select count(1) from emp;,则语法分析、编译、生成执行计划、运行执行计划等都在共享池中来完成。如果其他用户再次执行这条命令,那么Oracle会先到共享池中找该SQL的执行计划,找到的话就直接执行了,这样效率就会比较高。

    但是,如果两条SQL的语法不完全一致的话,那么会共享吗?答案是:不会
    例如:

    -- 使用scott用户执行
    select * from emp;
    
    -- 使用system用户执行
    select * from Emp;
    

    上述两条SQL是不会共享执行计划等信息的。共享的前提是:必须语法完全一致。

    数据缓冲区

    用于存储从磁盘数据文件中读入的数据,所有用户共享。
    服务器进程将读入的数据保存在数据缓冲区中,当后续的请求需要这些数据时可以在内存中找到,不需要再从磁盘读取,提高了读取速度。
    数据缓冲区的大小对数据库的读取速度有直接的影响。

    数据缓冲区对性能影响最大。

    日志缓冲区

    日志记录数据库的所有修改信息,日志信息首先产生于日志缓冲区。
    当日志缓冲区的日志数据达到一定数量时,由后台进程将日志数据写入日志文件中。
    相对来说,日志缓冲区对数据库的性能影响较小。

    例如:
    用户进行了update操作update emp set sal=10000;,那么首先在日志缓冲区中被记录,在满足以下三种情况中的某一种的时候,就会把日志缓冲区中这些日志写到在线日志文件中去。
    1)日志缓冲区达到1M
    2)日志缓冲区达到1/3
    3) 发生了commit操作
    日志缓冲区中不记录select操作

    Large池

    为了进行大的后台进程操作而分配的内存空间,主要指备份恢复、大型IO操作、并行查询等。

    Stream池

    为了stream应用而分配的内存空间 。
    ==stream:流,高级复制技术。 ==

    Java池

    为了java应用而分配的内存空间。

    2.1.1 PGA(程序全局区)

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

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

    对专用连接来说,用户在客户端启动了一个应用程序,例如sql*plus,就是在客户端启动一个用户进程;与oracle服务器端连接成功后,会在服务器端生成一个服务器进程,该服务器进程作为用户进程的代理进程,代替客户端执行各种命令并把结果返回给客户端。用户进程一旦中止,服务器进程立刻中止。与用户进程相对应的服务器进程也叫影子进程。

    会话

    会话是用户与 Oracle 服务器的单个连接
    当用户与服务器建立连接时创建会话
    当用户与服务器断开连接时关闭会话
    从v$session中查询会话信息

    2.2 后台进程

    PMON进程监控进程

    • 清理出现故障的进程。
    • 释放所有当前挂起的锁定。
    • 释放故障进程使用的资源

    SMON系统监控进程

    • 在实例失败之后,重新打开数据库时自动恢复实例。
    • 整理数据文件的自由空间,将相邻区域结合起来。
    • 释放不再使用的临时段。

    DBWR数据写入进程

    • 管理数据缓冲区,将最近使用过的块保留在内存中。
    • 将修改后的缓冲区数据写入数据文件中。

    LGWR日志写入进程

    • 负责将日志缓冲区中的日志数据写入日志文件。
    • 系统有多个日志文件,该进程以循环的方式将数据写入文件。

    CKPT检查点进程
    为了防止实例崩溃,为了尽快进行实例恢复的进程。
    检查点包括两种:完全检查点、增量检查点。

    完全检查点只有下面两种情况下被触发:
    1.用户发出 alter system checkpoint;
    2.除了shutdown abort以外的其他方式正常关闭数据库。

    增量检查点触发情况:
    1.每隔三秒。
    2.在线日志切换。

    1)查看启动的后台进程信息:v$process
    2)查看启动了几个DBWR进程:select * from v$process where program like ‘%DBW%’; 个数由初始化参数db_writer_processes决定。修改个数:alter system set db_writer_processes=4 scope=spfile(下次启动才生效),查看db_writer_processes的值show parameter db_wr
    3)查看启动了几个ARC进程: select * from v$process where program like '%ARC%';

    2.3 9i,10g,11g各版本内存管理

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

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

    11g中的自动内存管理
    自动内存管理,即AMM,Automatic Memory Management。只为Oracle的使用整体分配一个总的内存大小就可以了,不必像10g那样具体分配SGA和PGA的大小。
    初始化参数statistics_level为typical或all,才可以启动AMM。
    新的初始化参数memory_target来定义了整个内存的大小,即SGA加上PGA的总的大小。
    新的初始化参数memory_max_target来定义了memory_target最大可以达到的值。
    注意:如果使用AMM,则sga_target和pga_aggregate_target的值应该设置成0。
    11g中的后台进程MMAN,用于进行自动内存管理。

    2.4 数据库结构

    Oracle 数据库由操作系统文件组成,这些文件为数据库信息提供实际物理存储区。
    Oracle 数据库包括逻辑结构和物理结构。

    物理结构包含数据库中的一组操作系统文件。
    逻辑结构指数据库创建之后形成的逻辑概念之间的关系。

    2.4.1 物理结构

    物理组件就是Oracle数据库所使用的操作系统物理文件。
    1)主要物理文件可分为三类:

    • 数据文件:数据文件用于存储数据库数据,如表、索引数据等。
    • 控制文件:控制文件是记录数据库物理结构的二进制文件。
    • 在线日志文件:记录对数据库的所有修改信息,用于故障恢复。
      丢失这些文件,数据库不可以继续运行,需要进行介质恢
      复。
      在windows上,这些文件的路径为:D:appQINoradataorcl(这是我个人电脑的目录,以实际安装路径为主)
      2)非主要物理文件包括:
      参数文件、密码文件、告警和跟踪文件、归档日志文件、备份文件
      丢失这些文件,数据库仍然可以继续运行,不需要进行介质恢复。

    ORACLE_HOME:C:appQINproduct11.2.0dbhome_1(这是本人电脑路径,仅供参考)
    参数文件:参数文件分为2种:pfile与spfile。windows上的路径在:$ORACLE_HOMEdatabase下
    密码文件路径:windows上的路径在:$ORACLE_HOMEdatabase下
    告警和跟踪文件路径:C:appQINdiag dbmsorclorcl race

    2.4.2 逻辑结构

    数据库的逻辑结构是从逻辑的角度分析数据库的组成。Oracle 的逻辑组件包括:

    2.4.2.1 表空间

    表空间是数据库中最大的逻辑单位,一个 Oracle 数据库至少包含一个表空间,就是名为SYSTEM的系统表空间。
    每个表空间是由一个或多个数据文件组成的,一个数据文件只能与一个表空间相关联。
    表空间的大小等于构成该表空间的所有数据文件大小之和。
    查看表空间

    select * from v$tablespace;
    

    也可以通过em控制台来查看。

    创建表空间

    CREATE TABLESPACE tablespacename
    DATAFILE 'filename' [SIZE integer [K|M]] 
    [AUTOEXTEND [OFF|ON]];
    

    默认的表空间
    默认包含如下表空间(从v$tablespace中查看):SYSTEM、SYSAUX、TEMP、UNDOTBS1、USERS、EXAMPLE

    SYSTEM是系统表空间,存放系统的最基本的信息,如果SYSTEM表空间坏掉,Oracle将无法启动。

    SYSAUX从10g中引入,作为SYSTEM的辅助表空间,用以减少SYSTEM表空间的负荷 。以前其他表空间中的一些组
    件,现在放到SYSAUX表空间中了。比如,以前SYSTEM表空间中LogMiner、以前SYSTEM表空间中Logical Standby、Spatial、以前DRSYS表空间中Oracle Text等。

    TEMP是临时表空间,当排序不能在分配的空间中完成时,就会使用磁盘排序的方式,即在Oracle实例中的临时表
    空间中进行。
    UNDOTBS1是撤销表空间,是UNDO类型的表空间,保存用户进行DML操作中,修改前的数据。
    USERS是数据库默认的永久表空间。
    EXAMPLE是数据库测试用例所涉及的表的所属表空间。

    2.4.2.2 段

    段是构成表空间的逻辑存储结构,段由一组区组成。
    按照段所存储数据的特征,将段分为若干种类型,主要有数据段、索引段、回退段和临时段。

    2.4.2.2 区

    区为段分配空间,它由连续的数据块组成。
    当段中的所有空间已完全使用时,系统自动为该段分配一个新区。
    区不能跨数据文件存在,只能存在于一个数据文件中。

    2.4.2.2 数据块

    数据块是Oracle服务器所能分配、读取或写入的最小存储单元。
    Oracle服务器以数据块为单位管理数据文件的存储空间。

    2.4.2.2 模式

    模式是对用户所创建的数据库对象的总称。
    模式对象包括表、视图、索引、同义词、序列、过程和程序包等。

  • 相关阅读:
    Leet_Code_567_字符串排列
    LeetCode_424_替换后的最长字符串
    LeetCode_139_单词拆分
    为Linux 添加自定义命令
    javax.validation 自定义校验器
    MYBatis 动态SQL
    SPRING BOOT 15.1 TEST
    B-树和B+树的应用:数据搜索和数据库索引
    设计模式-代理
    数据结构与算法
  • 原文地址:https://www.cnblogs.com/OliverQin/p/12639927.html
Copyright © 2011-2022 走看看