zoukankan      html  css  js  c++  java
  • oracle体系结构

    oracle体系结构有四个部分组成分别为:oracle 服务器、用户进程、服务器进程、其他关键文件。其中oracle服务器又有实例(instance)和database组成是一个数据库管理系统。

    一、oracle instance

    oracle实例instance是一个访问数据库的机制由内存结构(SGA)和后台进程组成(包括五个后台进程PMON,SMON,DBWR,LGWR,CKPT这五个后台进程是必须的,即只要这五个后台进程中的任何一个无法正常启动的话,整个数据库实例就没法启动。其他后台进程的启动都是可选择的。)实例一旦启动就分配系统全局区同时启动后台所需的后台进程。一个实例只能同时操作一个其对应的数据库,但是一个数据库可以同时被几个数据库实例操作(oracle集群中)。

    启动oracle instance的指令是startup,它的启动意味这SGA的所有内存结构都已经生成,所有的后台进程都已经在内存中正常运行。

    用户进程与instance的连接时通过服务器进程来对接的,用户进程不能直接访问instance,必须通过新建的服务器进程进行一对一的对接这就是专用连接模式(在配置oracle客户端时配置本地命名系统和监听时选择的dedicated就是专用连接模式与之相对的是共享服务器连接模式shared server)。

    当oracle创建了一个服务器进程的同时为该服务器进程分配一个内存区称为程序全局去PGA,PGA是一个私有的内存去不能共享且只属于一个进程随进程的创建而分配随进程的介绍而终止。在dedicated模式下PGA中包含以下结构:排序区、游标状态区、会话信息区、堆栈区。

    1、SGA区

    SGA区包含了如下的几个内存结构:共享池(shared pool)、数据库高速缓存区(database buffer cache)、重做日志缓冲区(redo log buffer)和其他的一些结构                  如锁和统计数据。

    (1)共享池

    共享池由库高速缓存区library cache和数据字典高速缓存区data dictionary cache两部分组成的

    库高速缓存区library cache:

    引入库高速缓存区的目的就是共享sql和plsql代码。要想共享sql 或plsql代码第一要保证库共享缓存区要足够大才能使得sql语句不会很快被淘汰出队列。第二、sql语句要是能被共享的通用代码,因为oracle是比较sql语句的正文来决定两个语句是否相同的,只有当正文相同时oracle才重用已经存在的编译后的sql代码和执行计划。在有实参的情况下尽量使用绑定变量的方式来重新sql语句 如:select * from emp where emp.sal>=&v_sal,因为变量的赋值不是在编译阶段而是在运行阶段。

    数据字典高速缓存区 data dictionary cache:

          服务器进程把数据文件、表、索引、列、用户和其他数据库对象的定义和权限的信息放入数据字典高速缓存区,以备其他用户进程访问可以直接从缓存区中取数据,提高数据的读取效率

    数据库提供静态参数SHARED_POOL_SIZE来改变共享池的大小:alter system set  SHARED_POOL_SIZE=32M

    (2)数据库高速缓存区database buffer cache

    主要用来保存sql查询中生成的结果集,处理sql语句时首先在database buffer cache中查找目标数据集,如果没有的话再从磁盘上读取数据进入内存。oracle提供里DB_BLOCK_SIZE,DB_BLOCK_BUFFERS两个参数通过两个参数的乘积来调整database buffer cache的大小。但是以上两个参数都是静态的参数,另个oracle9i以上版本提供DB_CACHE_SIZE动态参数来改变database buffer cache的大小

    alter system set DB_CACHE_SIZE=48M

    (3)重做日志缓冲区(redo log buffer)

    在执行dml操作时检查是否将原始数据写入redo log buffer,如果没有那么写入redo log buffer然后添加到数据高速缓存区,对oracle所做的任何修改都会在redo log buffer中记录。

    注:除此之外SGA中还有可能包含large pool和java pool等数据结构

    oracle的内存缓存区的大小是可以动态调节的,内存缓冲区的最小划分和调度单位是区组,oracle是利用区组来管理SGA内存的,区组就是一片连续的虚拟内存区是oracle分配和回收内存区的基本单位。SGA至少包含三个区组即SGA固定区(其中包含了重做日志缓冲区)、数据库高速缓存区、共享池缓冲区

    show parameters显示参数文件中可以设置的全部参数

    show sga获得sga的相关信息

    select name,type,value from v$parameter where name='sga_max_size'显示sga_max_size的值(sga区最大值)

    2、oracle的主要后台进程

     (1)重做日志写进程LGWR:

    负责将重做日志缓冲区中的数据顺序的写到重做日志文件中

    (2)数据库写进程DBWR

    负责将数据库高速缓存区中的脏缓冲区中的数据写到数据文件中

    (3)系统监督进程SMON

    在遇到特殊的情况时自动执行oracle实例的恢复工作。包含执行前滚、前滚完成之后打开数据库、回滚没有提及的事务

    (4)进程监督进程PMON

    当某个进程崩溃时PMON将负责他的清理工作包含回滚当前用户的事务、释放用户所加的表一级的和行一级的锁、释放用户所用的其他资源

    (5)校验点和校验点进程

    作为数据库恢复的标记点,用来辅助实例的恢复。

    (6)归档日志进程ARCH

    该进程不是必须的,但是在可选择的进程里面该进程是最应该被选择的。在归档模式下ARCN将切换后的重做日志文件复制到归档日志文件。归档日志文件实际上是oracle在脱机状态下的对重做日志文件的备份。归档操作一般是自动进行的。在遇到数据文件丢失或损坏后,一般数据库要进行完全恢复,oracle数据库应该运行在归档模式下。利用这些归档日志文件就可以完全恢复数据库中的数据。

    二。database

    databse主要由一下几类文件组成:数据文件、控制文件、重做日志文件

    1、控制文件:包含维护和校验数据库一致性所需的信息,是数据库的最重要的文件,所有的数据库操作都必须由控制文件来完成,保证控制文件的完整性是数据库正常运行的基础。

    2、数据文件:包含数据库中 的真正的数据。

    3、重做日志文件:包含了当前系统崩溃后进行恢复所需要的记录的变化信息。

    注:数据库运行时还需要除此之外的其他的文件包含初始化参数文件、密码文件、归档重做日志文件等,但是这些文件不属于database。

  • 相关阅读:
    HashMap和HashTable有什么不同?
    JAVA基础查漏补缺(面向面试场景)
    JAVA--GC 垃圾回收机制----可达性分析算法
    如何优雅的设计 Java 异常
    Java多线程之捕获子线程中的异常---面试经
    Review: the foundation of the transaction、Transaction characteristics in Spring
    用Demo 去理解Java Object 的 wait() 和 notify() 方法
    决心彻底认知 Integer 和 int 对象创建的原理
    java 基础复习 -用Demo去认识String 类
    java 基础复习 -用Demo去认识数组
  • 原文地址:https://www.cnblogs.com/moonfans/p/3802373.html
Copyright © 2011-2022 走看看