zoukankan      html  css  js  c++  java
  • Oracle体系中各个组件的含义

    首先看张图

    下面来解释下这个图.
    对于一个数据库系统来说,假设这个系统没有运行,我们所能看到的和这个数据库相关的无非就是几个基于操作系统的物理文件,这是从静态的角度来看,如果从动态的角度来看呢,也就是说这个数据库系统运行起来了,能够对外提供服务了,那就意外着数据库系统启动了自己的一个实例,综合以上2个角度,oracle如何定义上述描述呢?
    我们来引入第一个概念,oracle服务器,所谓oracle服务器是一个数据库管理系统,它包括一个oracle实例(动态)和一个oracle数据库(静态)。oracle实例是一个运行的概念(如操作系统的进程),提供了一种访问oracle数据库的方式,始终打开一个,并且只能打开一个oracle数据库,oracle实例有SGA和一些后台服务进程组成,在后台服务进程当中,DBWn PMON CKPT LGWR SMON是必备的后台进程,而ad queue,rac,shared server,ad replication则是可选的,之所以可选,要们是因为离开它oracle也能正常运行,要么是一些高级的功能才可以用得到。
    oracle数据库是一个被统一处理的的数据的集合,从物理角度来看包括三类文件数据文件,控制文件,重做日志文件。从逻辑角度来看,oracle数据库至少包含一个表空间,表空间至少包含一个段,段由区做成,区有块组成。需要注意的是表空间可以包含若干个数据文件,段可以跨同一个表空间的多个数据文件,区只能在同一个数据文件内。
    oracle还设计了其他的关键文件用来为整个系统服务,如配置文件,密码文件,归档日志文件,还有还有用户进程和服务进程,现在可以简单理解下执行sql语句就要用到这2个进程。
    下表是SGA和PGA的总结
     

    SGA

    SHARE POOL

    (共享池)

    用如下命令可以调整

    ALTER SYSTEM SET

    SHARED_POOL_SIZE=64M

    LIBRARY CACHE

    (库高速缓存)

    1存储最近使用的SQLPL/SQL语句信息

    2包括SHARED SQLSHARED PL/SQL

    3LRU算法管理

    4大小由SHARE POOL大小决定

    DATA DICTIONARY CACHE

    (数据字典高速缓存)

    1数据库中最近使用的定义的集合

    2包含数据库文件,表,索引,列,用户,权限和其他的数据库对象相关信息

    3在语法分析阶段,服务器进程会在数据字典中查找用于对象解析和验证访问的信息

    4将数据字典信息高速缓存到内存中,可缩短查询和DML的响应时间

    5大小由共享池的大小决定

    DATABASE BUFFER CACHE

    (数据缓冲区高速缓存)

    1存储已从数据文件检索到的数据的复本

    2大幅提高读取和更新数据的性能

    3使用LRU算法管理

    4主块的大小由DB_BLOCK_SIZE确定

    REDO LOG BUFFER

    (重做日志缓冲区)

    1记录对数据库数据块作的全部更改

    2主要用来恢复

    3其中记录的更改被称作重做条目

    4重做条目包含用于重新构建或重做更改的信息

    5大小由LOG_BUFFER定义

    LARGE POOL

    (大型池)

    1 SGA可选的内存区

    2分担了共享池的一部分工作

    3用于共享服务器的UGA

    4用于I/O服务器进程

    5备份和恢复操作或RMAN

    6并行执行消息缓冲区(前提PARALLEL_POOL_SIZE=TRUE

    7不使用LRU列表

    8大小由LARGE_POOL_SIZE确定

    JAVA POOL

    JAVA池)

    1存储JAVA命令服务分析要求

    2安装和使用JAVA时必须的

    3大小有JAVA_POOL_SIZE确定

    PGA

    PRIVATE SQL AREA

    (专用SQL区)

     

    专用SQL 区的位置取决于为会话建立的连接类型。在专用服务器环境中,专用SQL 区位于各自服务器进程的PGA中。在共享服务器环境中,专用SQL 区位于SGA 中。

    管理专用SQL 区是用户进程的职责。用户进程可以分配的专用SQL 区的数目始终由

    初始化参数OPEN_CURSORS 来限制。该参数的缺省值是50

    PERSISTEN AREA

    (永久区)

    包含绑定信息,并且只在关闭游标时释放

    RUNTIME AREA

    (运行时区)

    在执行请求时的第一步创建。对于INSERTUPDATE DELETE命令,该区在执行语句后释放,对于查询操作,该区只在提取所有行或取消查询后释放。

    SESSION MEMORY

    (会话内存)

    包含为保留会话变量以及与该会话相关的其它信息而分配的内存。对于共享服务器环境,该会话是共享的而不是专用的。

    SQL WORK AREAS

    SQL工作区)

    用于大量占用内存的操作,如排序、散列联接、位图合并和位图创建。

    工作区的大小可进行控制和调整

                                下表是后台进程总结

    DBWn

    DBWn 延迟写入数据文件,直到发生下列事件之一:

     增量或正常检查点

     灰数据缓冲区的数量达到阈值

     进程扫描指定数量的块而无法找到任何空闲缓冲区时

     出现超时

     实时应用集群(Real Application Clusters, RAC) 环境中出现ping 请求

     使一般表空间或临时表空间处于脱机状态

     使表空间处于只读模式

     删除或截断表

     执行ALTER TABLESPACE 表空间名BEGIN BACKUP 操作

    LGWR

    LGWR 在下列情况下执行从重做日志缓冲区到重做日志文件的连续写入:

     当提交事务时

     当重做日志缓冲区的三分之一填满时

     当重做日志缓冲区中记录了超过1 MB 的更改时

     DBWn 将数据库缓冲区高速缓存中修改的块写入数据文件以前

     每隔三秒

    SMON

    例程恢复

     前滚重做日志中的更改

     打开数据库供用户访问

     回退未提交的事务处理

     合并空闲空间

     回收临时段

    PMON

    进程失败后,后台进程PMON 通过下面的方法进行清理:

     回退用户的当前事务处理

     释放当前保留的所有表锁或行锁

     释放用户当前保留的其它资源

     重新启动已失效的调度程序

    CKPT

     在检查点发信号给DBWn

     使用检查点信息更新数据文件的标头

     使用检查点信息更新控制

    启动检查点的原因如下:

     确保定期向磁盘写入内存中发生修改的数据块,以便在系统或数据库失败时不会丢失数据

     缩短例程恢复所需的时间。只需处理最后一个检查点后面的重做日志条目以启动恢复操作

     确保提交的所有数据在关闭期间均已写入数据文件

    CKPT 写入的检查点信息包括检查点位置、系统更改号、重做日志中恢复操作的起始位置以及有关日志的信息等等。

    注:CKPT 并不将数据块写入磁盘,或将重做块写入联机重做日志。

    ARCn

     可选的后台进程

     设置ARCHIVELOG 模式时自动归档联机重做日志

     保留数据库的全部更改记录

     
      最后,举一个用户提交sql语句的的例子来结束本文,如果用户想提交sql语句,那么首先你必须要连接到oracle实例,连接到oracle实例有三种途径,1如果用户登陆到运行oracle实例的操作系统上,则通过进程间通信进行访问2C/S结构访问3三层结构
    发起连接的应用程序或工具通常称为用户进程,连接发起后,oracle服务器就会创建一个进程来接受连接,这个进程就成为服务进程,服务器进程代表用户进程与oracle实例进行通信,在专用服务器连接模式下,用户进程和服务进程是1对1的关系,在共享服务器模式下,多个用户进程可能共享一个服务进程。
    当服务器进程开始和oracle实例进行通信时,一个会话就被创建了。
    显然处理一个查询要经过语法分析,绑定,执行,提取等阶段。
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    10.12在主函数中输入10个等长的字符串。用另一个函数对它们排序,然后在主函数输出这10个已排好序的字符串。
    10.10 将一个5×5的矩阵中最大的元素放在中心,4个角分别放在4个最小的元素(按从左到右,从上到下的顺序,依次从小到大存放),写一个函数实现之,并用main函数调用。
    10.9 写一个函数,将一个3*3的整型矩阵转置。
    10.8输入一行文字,找出其中大写字母、小写字母、空格、数字及其他字符各有多少?
    10.4 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。
    10.5 有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
    10.3 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数;①输入10个数;②进行处理;③输出10个数。
    PHP中文无乱码写法
    教你怎样搜索下载百度网盘、华为网盘、迅雷快传的资源
    Yii框架的安装
  • 原文地址:https://www.cnblogs.com/ckwblogs/p/6254105.html
Copyright © 2011-2022 走看看