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。
oracle体系结构的更多相关文章
- Oracle体系结构总结
1.Oracle 体系结构摘要图 2.Oracle 体系结构相关笔记 1.Oracle 体系结构摘要图 2.Oracle 体系结构相关笔记 可参考Oracle Architecture系列随堂笔记: ...
- oracle 体系结构
oracle 体系结构 数据库的体系结构是指数据库的组成.工作过程与原理,以及数据在数据库中的组织与管理机制. 1. oracle工作原理: 1).在数据库服务器上启动Oracle实例:2).应用程序 ...
- Oracle实例和Oracle数据库(Oracle体系结构)
--========================================== --Oracle实例和Oracle数据库(Oracle体系结构) --==================== ...
- 【转载】Oracle实例和Oracle数据库(Oracle体系结构)
免责声明: 本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除. 原文作者:Leshami 原文地址:http://blog.csdn.net/ ...
- oracle 体系结构解析
三.oracle 体系结构 1.oracle内存由SGA+PGA所构成 2.oracle数据库体系结构数据库的体系结构是指数据库的组成.工作过程与原理,以及数据在数据库中的组织与管理机制. oracl ...
- Oracle 课程一之Oracle体系结构
课程目标 •理解ORACLE数据库体系架构—内存结构和进程 •理解SQL在数据库中的运作流程 •理解UNDO&REDO原理 •理解commit原理 1.Oracle数据库概述 •数据库:物 ...
- Oracle体系结构之进程
Oracle体系结构之进程 一.概述 Oracle中的每个进程都要执行一个特定的任务(或者一组任务),每个进程都会为自己分配内存(PGA)来完成它的任务.一个Oracle实例主要有以下3类进程: (1 ...
- oracle 体系结构简介
1.1.SGA(system global area) SGA是oracle Instance的基本组成部分,在示例启动是分配.是一组包含一个oracle实例的数据和控制信息的共享内存结构.主要用于存 ...
- Oracle 体系结构chapter2
前言:Oracle 体系结构其实就是指oracle 服务器的体系结构,数据库服务器主要由三个部分组成 管理数据库的各种软件工具(sqlplus,OEM等),实例(一组oracle 后台进程以及服务器中 ...
随机推荐
- EntityFramework sum嵌套
一个查询中 用到了 sum , 可是返回结果的小数有很多位 , 都不准确了..类似js中的小数运算一样...不太熟悉C#,不知道这问题是因为double的关系 , 还是因为代码写的问题 , 通过 sq ...
- java菜鸟篇<二> eclipse启动tomcat报错的问题:Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"
9.1今天不知道自己瞎搞eclipse的时候按到了什么键,然后再启动程序的时候就会报错: 如下: Exception: java.lang.OutOfMemoryError thrown from t ...
- HDU 2458 - Kindergarten
有一堆男孩和女孩,男孩和男孩之间,女孩和女孩之间互相认识,给出一堆男孩女孩之间认识的关系, 问一个组里最多多少人相互都认识 那么 二分图里 将不认识的连线 那么 相互认识的人最多 就为 最大独立点集 ...
- illegal to have multiple occurrences of contentType with different values (old: text/html; charset=UTF-8, new: text/html; charset=utf-8)
问题描述: 在a.jsp通过<%@ include file="b.jsp" %> 的方式引入b.jsp,但是报了标题的中的错误, 问题原因: 在a.jsp的头部: & ...
- Android listview 的应用
ListView作为Android最常用但是却最难用的控件之一,有很多神奇的用法.我之前也有写过一个例子,稍微不那么简单了一点. [Android原生item的伸缩效果]:http://www.cnb ...
- MVC 分页获取数据 及点选按钮
@model PagedList<Lyxm.Entity.Suggestion>@using Webdiyer.WebControls.Mvc <div> <ul ...
- 两阶段提交及JTA
两阶段提交及JTA 分布式事务 分布式事务简介 分布式事务是指会涉及到操作多个数据库(或者提供事务语义的系统,如JMS)的事务.其实就是将对同一数据库事务的概念扩大到了对多个数据库的事务.目的是为了保 ...
- SQL Server 为索引启动硬件加速(分区)的 2 方法
背景知识: 如果你想看<三国>这部电视剧它有 假设它有400G这么大,现在你有两个朋友他们都已经把这部剧保存在自己的硬盘上了. A用一个硬盘就把这部剧保存了下来,B用了两个硬盘才保存了一下 ...
- CURL 和LIBCURL C++代码 上传本地文件,好不容易碰到了这种折腾我几天的代码
解决了什么问题:curl在使用各种方式上传文件到服务器.一般的文件上传是通过html表单进行的,通过CURL可以不经过浏览器,直接在服务器端模拟进行表单提交,完成POST数据.文件上传等功能. 服务器 ...
- Android学习笔记——Activity的启动和创建
http://www.cnblogs.com/bastard/archive/2012/04/07/2436262.html Android Activity学习笔记——Activity的启动和创建 ...