一. Oracle体系结构图

  体系结构图如下:

  体系结构图看似简单;其中很有玄机。它对Oracle来讲;相当于武功中的心法。配合体系结构来学Oracle;能起到事半功倍的效果。我们平时遇到Oracle的各种问题;很大部分都能从体系结构中找到解决方法或者更优的途径。现在我们来慢慢解析Oracle体系结构图

二. Oracle Database Server 概念

  • Oracle Database Server: 是由Oracle实例+Oracle数据库
  • 实例:实例是数据库启动时初始化的一组进程和内存结构
  • 数据库:数据库则指的是用户存储数据的一些物理文件

三. Oracle实例

  Oracle 实例是由内存结构和一组后台进程构成;Oracle 数据库实例启动时;就需要分配共享内存,启动后台进程。

3.1 内存结构

  Oracle数据库所使用的内存主要涉及是:系统全局区(SGA)和程序全局区(PGA);如何分配和设置共享内存参数;这对数据库性能非常重要。好在对Oracle11G以上的版本来讲;引进了自动内存管理;这个在Oracle数据库创建时;根据服务器环境已经合理设置;若非特殊设置无需配置。不像PostgreSQL数据库初始化给的是保守值。

3.1.1 程序全局区(PGA)

  PGA指的是程序全局区(Program Global Area),Oracle会为每个会话启动一个Oracle进程(用户进程),而PGA是服务这些Oracle进程。进程创建时分配,进程结束时释放。那么它有哪些作用呢?

  1. 用于存放会话的登录信息;这个好理解。会话是存在于Oracle客服端向服务器发送请求。当然要知道该用户的权限信息以及相关信息。
  2. 存放绑定变量信息;在会话中define variable。
  3. 当发起的请求需要排序;排序所需的内存是PGA提供的

3.1.2 系统全局区(SGA)

  SGA指的是系统全局区(System Global Area);如Oracle体系结构图而言:
  SGA = Buffer Cache + Redo Log Buffer + Shared Pool + 大池+ Java 池+ 流池

  • Buffer Cache

  Buffer Cache:数据缓冲区,用于存储最近从数据文件获取的镜像,同样的数据在内存读写IO比物理磁盘要快得多;SGA中的数据缓冲区增大可以有效地减少物理读;从而拥有更优的性能。

  • Redo Log Buffer

  Redo Log Buffer:日志缓冲区,记录数据库变更;最终通过LGWR进程写出到Rede Log

  • Shared Pool

  Shared Pool :即共享池。共享池主要由库缓存(共享SQL区和PL/SQL区)和数据字典缓存组成:
  库缓存:这块内存区域会缓存最近执行的SQL代码,这样,同样的SQL代码多次执行的时候,就不用重复地去进行SQL解析,可以很大程度上提高系统性能。
  数据字典缓存:存储oracle中的数据字典,这样在分析SQL代码的时候,就不用频繁去磁盘上读取数据字典中的数据。
Oracle通过Shared Pool来实现SQL共享,减少代码硬解析。从而提供数据库的性能。

3.2 进程结构

  Oracle进程有分:用户进程;服务器进程;后台进程。我们通常了解后台进程就行了。如Oracle体系结构图:后台进程 必须有 PMON + SMON + DBWR + LGWR + CKPT

3.2.1 PMON

PMON:程序监控进程;清除失效的用户进程,释放用户进程所用的资源。

3.2.2 SMON

SMON:系统监控进程;监控Oracle数据库正常运转。侧重点用于实例恢复;还用于清理临时表空间、清理回滚段、合并空闲数据块。

3.2.3 CKPT

CKPT:检查点进程;负责发起检查点信号;用于更新保持日志文件,数据文件和控制文件的SCN一致性。由CKPT发起通知DBWR;DBWR将内存区的脏数据写入数据文件。从而保持控制文件的SCN和数据文件的SCN一致。

3.2.4 DBWR

DBWR:数据库写进程;负责将修改过的数据块从数据缓存区(Buffer Cache)写入数据磁盘。

3.2.5 LGWR

LGWR:日志写进程;负责将日志缓冲区(Redo Log Buffer)的记录写入日志文件。

四. Oracle数据库

  Oracle数据库包括控制文件、数据文件、联机日志文件、参数文件、口令文件、归档日志文件等 。如下图解

4.1 控制文件

控制文件记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等等。

控制文件中包含哪些内容

  • 数据库的名字、ID、创建的时间戳
  • 表空间的名字
  • 联机日志文件、数据文件的位置、个数、名字
  • 联机日志的Sequence号码
  • 检查点的信息
  • 撤销段的开始或结束
  • 归档信息
  • 备份信息

  在参数文件中描述其位置,个数等等。通常采用分散放开,多路复用的原则。在数据库在mount状态使用

SQL> select value from  v$parameter where name = 'control_files';

VALUE
-------------------------------------------------------------------
/u01/app/oradata/ora235/control01.ctl, /u01/app/oradata/ora235/control02.ctl

  通过上面SQL;我们可以获知控制文件的数量和名称。如何查看控制文件的内容呢?控制文件是一个二进制文件。首先我们需要控制文件内容转存到一个文本文件

alter database backup controlfile  to trace as '/home/oracle/lottu_control.txt';

  转存文件的部分内容如下:

[oracle@oracle235 ~]$ cat /home/oracle/lottu_control.txt
-- The following are current System-scope REDO Log Archival related
-- parameters and can be included in the database initialization file.
--
-- LOG_ARCHIVE_DEST=''
-- LOG_ARCHIVE_DUPLEX_DEST=''
--
-- LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf
--
-- DB_UNIQUE_NAME="ora235"
--
-- LOG_ARCHIVE_CONFIG='SEND, RECEIVE, NODG_CONFIG'
-- LOG_ARCHIVE_MAX_PROCESSES=
-- STANDBY_FILE_MANAGEMENT=MANUAL
-- STANDBY_ARCHIVE_DEST=?/dbs/arch
-- FAL_CLIENT=''
-- FAL_SERVER=''
--
-- LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/dbs/arch'
-- LOG_ARCHIVE_DEST_1='MANDATORY NOREOPEN NODELAY'
-- LOG_ARCHIVE_DEST_1='ARCH NOAFFIRM EXPEDITE NOVERIFY SYNC'
-- LOG_ARCHIVE_DEST_1='NOREGISTER NOALTERNATE NODEPENDENCY'
-- LOG_ARCHIVE_DEST_1='NOMAX_FAILURE NOQUOTA_SIZE NOQUOTA_USED NODB_UNIQUE_NAME'
-- LOG_ARCHIVE_DEST_1='VALID_FOR=(PRIMARY_ROLE,ONLINE_LOGFILES)'
-- LOG_ARCHIVE_DEST_STATE_1=ENABLE --
-- Below are two sets of SQL statements, each of which creates a new
-- control file and uses it to open the database. The first set opens
-- the database with the NORESETLOGS option and should be used only if
-- the current versions of all online logs are available. The second
-- set opens the database with the RESETLOGS option and should be used
-- if online logs are unavailable.
-- The appropriate set of statements can be copied from the trace into
-- a script file, edited as necessary, and executed when there is a
-- need to re-create the control file.
--
-- Set #. NORESETLOGS case
--
-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- Additional logs may be required for media recovery of offline
-- Use this only if the current versions of all online logs are
-- available. -- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
-- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORA235" NORESETLOGS NOARCHIVELOG
MAXLOGFILES
MAXLOGMEMBERS
MAXDATAFILES
MAXINSTANCES
MAXLOGHISTORY
LOGFILE
GROUP '/u01/app/oradata/ora235/redo01.log' SIZE 50M BLOCKSIZE ,
GROUP '/u01/app/oradata/ora235/redo02.log' SIZE 50M BLOCKSIZE ,
GROUP '/u01/app/oradata/ora235/redo03.log' SIZE 50M BLOCKSIZE
-- STANDBY LOGFILE
DATAFILE
'/u01/app/oradata/ora235/system01.dbf',
'/u01/app/oradata/ora235/sysaux01.dbf',
'/u01/app/oradata/ora235/undotbs01.dbf',
'/u01/app/oradata/ora235/users01.dbf'
CHARACTER SET AL32UTF8
; -- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/dbs/arch1_1_982970794.dbf';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE -- Database can now be opened normally.
ALTER DATABASE OPEN; -- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oradata/ora235/temp01.dbf'
SIZE REUSE AUTOEXTEND ON NEXT MAXSIZE 32767M;
--

4.2 重做日志文件

  重做日志文件记录了数据的所有变化(DML,DDL或管理员对数据所作的结构性更改等);LGWR进程将日志缓存区的内容写入日志文件。

  通过上面控制文件获知重做日志文件个数和大小;当第一日志文件写满了或者触发日志切换操作。会切换到下一个日志文件。依次循环类推。若数据库开启归档模式。日志切换也会触发日志归档。日志归档保证日志数据的完整性;提供恢复机制(对于意外删除或宕机利用日志文件实现数据恢复)

SQL> SELECT group#,member FROM v$logfile;

    GROUP# MEMBER
---------- --------------------------------------------------
1 /u01/app/oradata/ora235/redo01.log
2 /u01/app/oradata/ora235/redo02.log
3 /u01/app/oradata/ora235/redo03.log

4.3 数据文件

  数据文件存储着实际的数据,DBWn会将数据库缓冲区中的内容写入到这类文件中。

SQL> select file#,name from v$datafile;

     FILE# NAME
---------- ----------------------------------------
1 /u01/app/oradata/ora235/system01.dbf
2 /u01/app/oradata/ora235/sysaux01.dbf
3 /u01/app/oradata/ora235/undotbs01.dbf
4 /u01/app/oradata/ora235/users01.dbf

4.4 实例参数文件

  这个文件存储了数据库所需的一些参数设置,比如各个内存区域的大小,可允许的最大进程数,最大会话数,控制文件的位置,数据库的名称等等,参数文件也是实例启动时首先要加载的文件。

4.5 口令文件

  一般称为外部口令文件。一般的用户名和口令是存放在数据字典中,不会存放在这个文件中。在一些特殊场景下,比如实例还未启动,这时,我可能需要以管理员的身份登入系统去执行一些恢复或者启动操作,然而此时,数据字典由于实例还没启动是不存在的,这时就需要外部口令文件进行用户身份的验证。

4.6 归档日志文件

  ARCn将联机重做日志文件会备份归档到这类文件中去,归档日志文件保留了数据更改的完整历史信息

五. 总结

  本文内容都是个人对Oracle体系结构的理解;若解说存在差异;请大家多多包涵。毕竟Oracle体系结构图看似简单;里面涉及到的内容太复杂了。

参考文献

2. Oracle体系结构的更多相关文章

  1. Oracle体系结构总结

    1.Oracle 体系结构摘要图 2.Oracle 体系结构相关笔记 1.Oracle 体系结构摘要图 2.Oracle 体系结构相关笔记 可参考Oracle Architecture系列随堂笔记: ...

  2. oracle 体系结构

    oracle 体系结构 数据库的体系结构是指数据库的组成.工作过程与原理,以及数据在数据库中的组织与管理机制. 1. oracle工作原理: 1).在数据库服务器上启动Oracle实例:2).应用程序 ...

  3. Oracle实例和Oracle数据库(Oracle体系结构)

    --========================================== --Oracle实例和Oracle数据库(Oracle体系结构) --==================== ...

  4. 【转载】Oracle实例和Oracle数据库(Oracle体系结构)

    免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:Leshami      原文地址:http://blog.csdn.net/ ...

  5. oracle 体系结构解析

    三.oracle 体系结构 1.oracle内存由SGA+PGA所构成 2.oracle数据库体系结构数据库的体系结构是指数据库的组成.工作过程与原理,以及数据在数据库中的组织与管理机制. oracl ...

  6. Oracle 课程一之Oracle体系结构

    课程目标 •理解ORACLE数据库体系架构—内存结构和进程 •理解SQL在数据库中的运作流程 •理解UNDO&REDO原理 •理解commit原理   1.Oracle数据库概述 •数据库:物 ...

  7. oracle体系结构

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

  8. Oracle体系结构之进程

    Oracle体系结构之进程 一.概述 Oracle中的每个进程都要执行一个特定的任务(或者一组任务),每个进程都会为自己分配内存(PGA)来完成它的任务.一个Oracle实例主要有以下3类进程: (1 ...

  9. oracle 体系结构简介

    1.1.SGA(system global area) SGA是oracle Instance的基本组成部分,在示例启动是分配.是一组包含一个oracle实例的数据和控制信息的共享内存结构.主要用于存 ...

  10. Oracle 体系结构chapter2

    前言:Oracle 体系结构其实就是指oracle 服务器的体系结构,数据库服务器主要由三个部分组成 管理数据库的各种软件工具(sqlplus,OEM等),实例(一组oracle 后台进程以及服务器中 ...

随机推荐

  1. websocket 和 socket.io 之间的区别是什么

    socket.io封装了websocket,同时包含了其它的连接方式,比如Ajax.原因在于不是所有的浏览器都支持websocket,通过socket.io的封装,你不用关心里面用了什么连接方式.你在 ...

  2. 小程序的tab标签实现效果

    swiper制作tab切换 index.html ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <view class="swiper-tab&qu ...

  3. spring mvc中关于url中传递中文乱码的解决方法

    在传值过程中,也是乱码出现的频繁地.先不说到底是什么场景了,通常常用的方案有如下几个 配置指定的filter <!-- 配置请求过滤器,编码格式设为UTF-8,避免中文乱码--> < ...

  4. [spark] spark安装和基础使用

    [下载] 注意选择spark版本时,与hadoop的版本要搭配 http://spark.apache.org/downloads.html [安装]

  5. ADB 设置远程调试

    Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00016657 相信很多人在android 开发调试的时 ...

  6. 如何进行Java EE性能测试与调优

    性能测试的目标 性能测试不同于功能测试,不是对与错的检验,而是快与慢的衡量.在进行真正的性能测试之前要先搞清楚目标: 1. 在确定的硬件条件下,可以支持的并发数越大越好,响应时间越快越好.具体需要达到 ...

  7. 创建Swing的步骤

    (1)导入Swing包 (2)选择界面风格 (3)设置顶层容器 (4)设置按钮和标签 (5)将组件放到容器上 (6)为组件增加边框 (7)处理事件 (8)辅助技术支持 package Com.MySw ...

  8. Unity-------------------------关于GUI绘制的编程

    转载:在这篇文章中我将给读者介绍Unity中的图形用户界面(GUI)编程.Unity有一个非常强大的GUI脚本API.它允许你使用脚本快速创建简单的菜单和GUI. 简介 Unity提供了使用脚本创建G ...

  9. tracert

    TRACERT命令 编辑 Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP数据包访问目标所采取的路径.Tracert 命令使用用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确 ...

  10. 使用 mysql_use_result 还是使用 mysql_store_result?

    From: http://my.oschina.net/moooofly/blog/186456 本文整理了关于“使用 mysql_use_result 还是 mysql_store_result”的 ...