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 模式

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

  • 相关阅读:
    iOS 面试题搜集
    iOS 常用第三方类库、完整APP示例
    iOS 键盘遮挡输入 解决办法
    iOS UIColor RGB HEX
    iOS APP性能优化
    iOS Swift 数组 交换元素的两种方法
    iOS CoreData primitive accessor
    iOS Start developing ios apps (OC) pdf
    iOS 传值方式
    iOS IB_DESIGNABLE IBInspectable @IBDesignable @IBInspectable 加速UI开发
  • 原文地址:https://www.cnblogs.com/OliverQin/p/12639927.html
Copyright © 2011-2022 走看看