Oracle体系结构
一、物理结构
二、逻辑结构
三、内存结构
四、数据库实例与进程
五、数据字典
一、Oracle 的物理结构
Oracle 数据库文件包括数据文件、日志文件、控制文件、配置文件
数据文件
(1)用来存储数据库中的全部数据,如数据库表中的数据和索引数据。通常为
后缀名为.dbf格式的文件。
(2) 每个Oracle 可以有一个或多个数据文件,一个数据文件只能属于一个数据库。
(3) 每个数据文件又由若干物理块组成;
(4) 一个或多个数据文件组成表空间;
日志文件(重做日志文件)
(1)用于记录数据库所做的全部变更(如增加、删除、修改),以便在系统发生故障时,用它对数据库进行恢复。名字通常为Log*.dbf格式。
控制文件
(1)用于打开和存取数据库。
(2)是较小的二进制文件,记录了数据库的物理结构,如:数据库名、数据库的数据文件和日志文件的名字和位置等信息。
(3)名字通常为Ctr*.ctl格式,如CtrlCIMS.ctl。
(4)控制文件中的内容只能够由Oracle本身来修改。
(5)每个数据库必须至少拥有一个控制文件。一个数据库也可有多个控制文件,但是一个控制文件只能属于一个数据库。
配置文件:
(1)是一个ASCII文本文件,记录Oracle 数据库运行时的一些重要参数。
(2)名字通常为initsid*.ora格式,如:initCIMS.ora,
(3)SID相当于它所控制的数据库的标识符。
(4)每个Oracle数据库和实例都有它自己惟一的init.ora 文件。
二、Oracle 的逻辑结构
逻辑结构描述了数据库从逻辑上如何来存储数据块中的数据。包括表空间、段、区、数据块和模式对象。逻辑结构支配一个数据库如何使用系统的物理空间,模式对象及其之间的关系则描述关系数据库之间的设计。一个数据块从逻辑上是由一个或多个表空间组成,表空间是数据块中物理编组的数据仓库,每个表空间由段构成,段由一组区组成,一个区由连续的数据块组成。
表空间
表空间分类:
Oracle 中除了用户创建的存放数据对象的数据表空间外,还有以下类型的表空间:
1) System 表空间(System TableSpace)
2) 回滚表空间(RollBack TableSpace)
3) 临时表空间(Temp TableSpace)
系统表空间(System TableSpace):
a)是每个Oracle数据库必须具备部分,安装时自动建立,
b)存放表空间名称、表空间所含数据文件等管理数据库自身所需信息;
c)如:数据字典、存储过程、包、函数和触发器定义、系统回滚段、数据
库对象定义,用户过程等。
d)每个Oracle 数据库必须至少有个默认表空间。
系统表空间只保存属于数据库自身的相关数据,用户对象和数据保存在非系统表空间中。
临时表空间(Temp TableSpace):
a)是Oracle用于存储实例运行过程中产生的所有临时数据,如执行SQL
语句产生的临时表;
b)类似于数据库白板或草稿纸,记录数据和进行的操作。
c)可以有多个临时表空间;
d)无临时表空间将使用(System TableSpace)
回滚表空间(RollBack TableSpace)
a)所有Oracle数据库都需要在一个地方保存恢复信息(Undo),用于存放
回滚段( Rollback Segment )的表空间称为回滚或简称RBS。
b)Oracle 将不完整或临时中止的事务恢复的功能放在其核心功能中;表空间使用,在数据库中使用多个表空间具有如下优势:a)能将数据字典与用户数据分,避免因字典对象和用户对象保存在同一个
数据文件中而产生的I/O冲突。
b)将回退数据与用户数据分离,避免因硬盘损坏而导致永久性数据丢失。
c)将表空间数据文件分散保存到不同硬盘上,平均分布物理I/O操作。
d)将某个表空间设置为脱机状态或联机状态,对数据库的一部分进行备份
和恢复。
e)将某个表空间设置为只读,将数据库的一部分设置为只读状态。
f)为某种特殊用途专门设置一个表空间,比如临时表空间等,优化表空间
的使用效率。
g)更加灵活地为用户设置表空间限额。
表空间中对象存储
a)若表空间只对应一个数据文件,该表空间中所有对象都存储在此数据文
件中。
b)若表空间对应于多个数据文件,可将一个对象的数据存储在该表空间的
任意一个数据文件中,也可将同一个对象的数据分布在表空间的多个数据文件中。
段
1)数据段
a)数据段中保存表中记录。
b)用CREATE 语句创建表或簇时,Oracle 自动创建数据段。
c)Oracle 中所有未分区的表都使用一个段来保存数据,而分区的表将为每
个分区建立一个独立数据段。
2)索引段
a)在使用CREATE INDEX 语句创建索引时,Oracle为一个索引或一个索
引分区创建索引段。
b)在Oracle数据库中每个未分区索引都有一个索引段保存索引中索引条
目。
c)对于一个分区索引,每个分区都有一个索引段保存它的数据。
3)临时段
a)当处理查询时,Oracle可能会需要使用到一些临时存储空间,用于临时
保存解析过的查询语句以及在排序过程中产生的临时数据。
b)Oracle会自动在专门用于存储临时数据的表空间为操作分配临时段。4)回退段:
回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值),作用主要有以下几方面:
a)事务回滚
b)事务恢复
c)读一致性
区
区是由很多连续的数据块组成的数据库存储空间,缺省情况下,数据库会使用表空间中存储的存储参数来管理他们的区.
主要的几个存储参数:
1)Initial:段建立时分配的第一个区的大小(单位:字节)
2)Next:段内分配的下一个增量区大小(单位:字节)
3)MaxExtents:分配给段的区总数。
4)MinExtents:建立段时分配的区的总数,也就是段的最小区数量。
5)PctEncrease:为段分配的每个增量区超过上一个区的百分比。
6)Initrans:为初试数量的DML事务条目(并发访问数据块中的行)保留的
预分配空间数量。
7)Ntkxtrans:当多个事务同时访问同一数据块的行时,为数据块中每个
DML事务的条目分配的空间
数据库块
数据库块也称逻辑块或Oracle 块,对应磁盘上一个或多个物理块,大小由初始化参数(db_block_size)在文件( init.ora )决定,典型大小是2k Pckfree和Pctused两个参数用来优化数据块空间的使用。
1)PCTFREE:块中保留用于UPDATE 操作的空间百分比,当数据占用的
空间达到此上限时,新的数据将不能再插入到此块中;
2)PCTUSED:指定块中数据使用空间的最低百分比;
模式对象
Oracle数据库的模式对象包括表、视图、序列、同义词、索引、触发器、存储过程等.
三、Oracle的内存结构
系统全局区、软件代码区、程序全局区和排序区。
系统全局区(SGA):
是实例的主要部分。
a)SGA 是内存结构的主要组成部分,是Oracle 为一个实例分配的一组
共享内存缓冲区,
b)保存着Oracle 系统与所有数据库用户的共享信息,包括数据维护、
SQL语句分析,重做日志管理等
数据块缓冲区
a)存放Oracle 系统最近从数据文件中读取的数据块。
b)又称用户数据高速缓冲区,为所有与该实例相链接的用户进程所共享。
c)容量受物理容量限制。
d)在Oracle 9i 中,缓存大小可直接由初始化参数DB_ACHESIZE 指
定,该参数可以直接以KB 字节或MB 字节为单位来设置数据库缓存
大小。
字典缓冲区
a)字典缓冲区用于保存数据字典中的行。
b)数据字典缓冲区也通过最近最少使用(LRU)算法来管理。
c)大小由数据库内部管理。
d)字典缓存区是SQL共享池的一部分,共享池的大小(以字节为单位)由数
据库文件init.ora 中的Shared_pool_size 参数来设置。
重做日志缓冲区
a)对数据库进行修改的任何事务(Transaction)在记录到重做日志之前都
必须首先放到重做日志缓冲区(Redo Log Buffer.)中。
b)重做日志缓冲区是专为此开辟的一块内存区域,重做日志缓存中的内容
将被LGWR后台进程随时写入重做日志文件。
共享SQL池(Shared SQL Pool)
a)相当于程序高速缓冲区,所有的用户程序都存放在共享SQL池中。
b)包括库高速缓存、数据字典高速缓存和服务器控制结构。
c)共享池大小取决于init.ora 文件参数Shared_pool_size,以字节为单
位
d)用户必须将该值设得足够大,以确保有足够可用空间来装载和存储
PL/SQL 块和SQL 语句。
Java池:
Java池为Java命令提供语法分析
多缓冲池:
a)缓冲池把大数据集与其他的应用程序分开,以减少它们争夺数据块缓冲
区内相同的资源。
b)可在SGA中创建多个缓冲池。
程序全局区PGA(Program Global Area,PGA)
a)是单个Oracle进程使用的内存区域,不属于实例的内存结构。
b)含有单个进程工作时需要的数据和控制信息,PGA 是非共享的,只有
服务进程本身才能够访问它自己的PGA 区
排序区
a)排序区存在于请求排序的用户进程的内存中,由于排序需要内存空间,
Oracle利用该内存排序数据,这部分空间称为排序区。
b)该空间的大小为适应排序数据量的大小,可增长,但受初始化参数:
Sort_area_sizer所限制
软件代码区
a)是只读,可安装成共享或非共享。
b)Oracle系统程序是共享的,多个Oracle用户可存取它,无需在内存有
多个副本。
c)用户程序可以共享也可以不共享。
四、数据库实例与进程
Oracle数据库实例
数据库是指物理上的数据库文件或逻辑上的数据库结构。
基于之上管理和控制物理数据库的软件系统,称为数据库管理系统(DBMS)。数据库实例是指软件系统中用来访问数据库文件集的存储结构以及后台进程的
集合,它是存取和控制数据库的软件机制
进程
a)进程又称任务,一个进程执行一组操作,完成一个特定的任务。
b)对Oracle数据库管理系统来说,进程由用户进程、服务器进程和后台
进程所组成。
c)进程与程序的区别在于前者是一个动态概念,后者是一个静态实体;
d)程序仅仅是指令的有序集合,而进程则强调执行过程。
e)进程可以动态地创建,完成任务后即会消亡。
用户进程
a)当用户运行一个应用程序时,系统就为它建立一个用户进程。
b)用户进程执行的是一个应用程序或Oracle 工具程序的代码,以完成用
户所指定的任务。
c)用户进程不是实例。
服务器进程
a)服务器进程处理与应用程序相连的用户进程的请求,
b)它与用户进程相通讯,
c)为相连的用户进程的Oracle请求服务。
后台进程Oracle的后台进程主要包括
a)SMON——系统监控进程( System Monitor )
b)PMON——进程监控进程( Process monitor )
c)DBWR——数据库写进程
d)LGWR——日志文件写进程
e)ARCH——归档进程(Archiver process )
f)RECO——恢复进程
g)LCKN——封锁进程
五、数据字典
数据字典是Oracle 数据库的核心组件,对用户是只读类型表和视图组成。保存着关于数据库系统本身以及其中存储的所有对象的基本信息
a)数据库对象中所有框架对象的定义,如表、视图、索引、群集、同义词、
序列、过程、函数、包、触发器等
b)框架对象如何分配和使用空间
c)列默认值
d)完整性约束信息
e)安全信息,如用户、权限、角色
f)审计信息
数据字典表和视图均保存在系统表空间
数据字典的结构
a)一个数据字典包括基础表,动态性能视图及数据字典视图。
b)数据字典视图又包含ALL 视图,USER 视图和DBA视图。
基础表
a)存储相关数据库信息的表,这些数据库的信息包括表、索引、约束,以及
所有其他数据库对象结构的信息。
b)它们属于SYS用户,通过运行SQL脚本来创建(在数据库创建时自动发
生)。
c)是Oracle系统的核心。
d)只有Oracle才能写和读取这些表。
e)基础表中的存储的信息通常是经过加密处理的。
f)大部分数据字典基础表的名称中都包含“$”等特殊字符
动态性能视图
a)在操作过程中,Oracle维护了一种“虚拟”表的集合,记录当前数据库的
活动。这些表称为动态性能表。
b)SYS拥有动态性能表,其名字都是以V_$开头的。
c)在这些表上面创建的视图被称为动态性能视图(dynamic performance
view)。
d)可为这些视图创建公共同义词,同义词名称以V$开头。
ALL视图
包含了用户查询表时可以访问的所有对象的信息。
USER视图
前缀为USER,每个数据库用户都拥有一套属于自己的USER视图。在
USER视图中包含了该用户模式下所有对象的信息。
DBA视图
a)前缀为DBA,在DBA数据字典视图中包含着全部数据库对象的信息。
b)对于带有DBA前缀的视图,显示了整个数据库的情况。
c)只能被数据库管理员查询。
d)授予系统权限SELECT ANY TABLE的用户都能查询带有DBA前缀的视
图。
数据字典的用途
a)对于Oracle系统本身而言,当数据库实例运行时,会需要使用数据字典基
础表中的信息。
b)Oracle从基础表中读取信息,来判断用户要求访问的对象是否存在。
c)当用户对数据库结构、对象结构做出修改时,Oracle向基础表中写入相应
的修改信息。
ORACLE 体系结构 (Architecture of ORACLE) 第一部分:ORACLE8i体系结构 第一章. 概要 在本章里你可以了解以下内容 1、理解ORACLE 实例的组成 2、理解ORACLE 数据库的组成 3、理解ORACLE内存结构的组成 4、理解后台进程的作用与分工 5、理解数据库的物理文件与对应的逻辑结构 6、理解ORACLE的整体构架 第二章. 理解ORACLE实例 2.1 ORACLE SERVER ORACLE是一个可移植的数据库——它在相关的每一个平台上都可以使用,即所谓的跨平台特性。在不同的操作系统上也略有差别,如在UNIX/LINUX上,ORACLE是多个进程实现的,每一个主要函数都是一个进程;而在Windows上,则是一个单一进程,但是在该进程中包含多个线程。但是从整体构架上来看,ORACLE在不同的平台上是一样的,如内存结构、后台进程、数据的存储。 一个运行着的ORACLE数据库就可以看成是一个ORACLE SERVER,该SERVER由数据库(Database)和实例(Instance)组成,在一般的情况下一个ORACLE SERVER包含一个实例和一个与之对应的数据库,但是在特殊情况下,如8i的OPS,9i的RAC,一个SERVER中一个数据库可以对应多个实例。 一系列物理文件(数据文件,控制文件,联机日志等)的集合或与之对应的逻辑结构(表空间,段等)被称为数据库,简单的说,就是一系列与磁盘有关系的物理文件的组成。ORACLE内存结构和后台进程被成为数据库的实例,一个实例最多只能安装(Mount)和打开(Open)在一个数据库上,负责数据库的相应操作并与用户交互。 实例与数据库的关系如下图所示:
Oracle体系结构就是围绕这张图展开的,要想深入了解oracle,就必须把这张图搞明白。如图: 一、基本组成: Oracle server: 一般情况下是一个instance和一个database组成 1个instance只能对应一个数据库。 特殊:1个数据库可以有多个instance(rac) 一台服务器上同时可装多套版本的数据库软件,每个数据库软件可建多个数据库,但是每个数据库只对应一个instance,也可以理解成每个数据库只有一个SID 。 利用DBCA建出的每个库都是相对独立的,在同一服务器上如果创建多库必须将环境变量的参数文件做区分,并且在对实例切换时需如下操作: connect 用户名/密码@实例的服务名
Oracle Instance: 是由内存(SGA)和后台进程(backupground Process)组成 通过instance来访问database 一个实例只能打开一个数据库 Oracle database: 数据文件(Data files): 数据文件永远存储数据库的数据,包括数据字典、用户数据(表、索引、簇)、undo数据等 重做日志(Redo log): “先记后写” 重做日志用于记录数据库的变化,当进行例程恢复或介质恢复时需要使用重做日志 执行DDL或DML操作时,事物变化会被写到重做日志缓冲区,而在特定的时刻LGWR会将重做日志缓冲区中的内容写入重做日志。 控制文件(Control file) 控制文件用于记录和维护数据库的物理结构,并且每个Oracle数据库至少要包含一个控制文件。 归档日志(Archive log): 是非活动(Inactive)重做日志的备份。 口令文件(Password file): 用于验证特权用户(具有SYSDBA、SYSOPER权限的特殊数据库用户) 参数文件(Parameter file): 用于定义启动实例所需要的初始化参数,包括文本参数文件(pfile)和服务器参数文件(spfile)(二进制文件放入裸设备,引入spfile) User and Server process : 在执行sql语句时产生的进程,每一个连接,oracle server创建一个session,产生一个server process,在client发起一个connection时就产生了一个user process。
第1章 Oracle的体系结构这一章的内容是比较枯燥的,但它是理解以后章节的基础。如果有读者在开始时有些内容没有完全理解也不用太着急,可以继续学习后面的内容,等使用了一段时间Oracle系统之后,一些概念就变得容易理解了。 1.1 Oracle引入复杂的体系结构的原因 数据库管理系统引入非常复杂的内存和外存体系结构的主要原因是有效地管理稀有的系统资源。资源不足不只是数据库管理系统所面对的。其实,在我们五千年的人类发展历史中,我们的祖先们一直在同资源不足作斗争。历史上粮食和土地等一直都是稀有资源,还记得我们的祖先们用什么方法来管理这
些稀有资源的吗?用战争,我们的先民们为粮食而战,为土地而战;我们当代人类为石油而战,为市场而战,为金钱而战。 那么在Oracle数据库中什么是稀有资源?它们又是如何来管理的呢?如果读者接触过数据库或读过相关的书,应该还有印象,数据库的数据量和输入/输出量都是相当大的,而这些数据一般都存在硬盘(外存)上,因此硬盘为数据库的一类资源。为了方便介绍,图1-1给出了硬盘的内部结构示意图。 旋转轴磁头移动臂 硬盘面磁头 图 1-1 从图1-1可以看出,所有硬盘上数据的访问都是靠硬盘的旋 11 / 56
转和磁头的移动来完成的,这种旋转和移动是机械运动。因为在计算机中所有数据的修改操作必须在内存中进行,所以内存也是数据库的一类资源。表1-1给出内存和外存的简单比较以帮助读者理解本书的内容。 表 1-1 从表1-1的比较可知,内存的数据访问速度要比外存(硬盘)快得多。这是因为内存的数据访问是电子速度,而硬盘的数据访问主要取决于机械速度。也就是说,如果一个数据库管理系统能够使绝大多数(如90%以上)数据操作在内存中完成,那么这一数据库管理系统的效率将非常高。但是由于内存中的数据在断电或出现系统故障时会消失,所以数据库管理系统还
在学习oracle中,体系结构是重中之重,掌握的越深入越好。在实际工作遇到疑难问题,其实都可以归结到体系结构中来解释,所以我们根据下面的示图了解一下oracle体系结构。 1.Summarize 根据示图,便于我们记忆,示图分三部分组成,左侧User Process、Server Process、PGA可以看做成Clinet端,上面的实例(Instance)和下面的数据库(Database)及参数文件(parameter file)、密码文件(password file)和归档日志文件(archived logfiles)组成Oracle Server,所以整个示图可以理解成一个C/S架构。Oracle Server由两个实体组成:实例(instance)与数据库(database)。这两个实体是独立的,不过连接在一起。在数据库创建过程中,实例首先被创建,然后才创建数据库。在典型的单实例环境中,实例与数据库的关系是一对一的,一个实例连接一个数据库,实例与数据库也可以是多对一的关系,即不同计算机上的多个实例打开共享磁盘系统上的一个公用数据库。这种多对一关系被称为实际应用群集(Real Application Clusters,RAC)RAC极大提高了数据库的性能、容错与可伸缩性(可能耗费更多的存储空间)并且是oracle网格(grid)概念的必备部分。 2.Client端 在Client端的作用是如何从客户端创建服务器进程与数据库进行交互的过程。 2.1 User process 用户运行一个应用程序时与Oracle数据库进程交互(例如:sql/plus)时,oracle创建一个用户进程来运行用户的应用程序。 2.2 Server process
Oracle体系结构:物理结构,逻辑结构,内存结构,数据库实例和进程,数据字典 物理结构:数据文件,日志文件,控制文件,配置文件 数据文件用来存储数据库中的全部数据,如数据库表中的数据和索引数据。通常为后缀名为.dbf格式的文件。 日志文件(又称重做日志文件),用于记录数据库所做的全部变更(如增加、删除、修改),以便在系统发生故障时,用它对数据库进行恢复。名字通常为Log*.dbf格式 控制文件每个Oracle数据库都有相应的控制文件,用于打开、存取数据库。它们是较小的二进制文件,其中记录了数据库的物理结构。名字通常为Ctr*.ctl格式 配置文件是一个ASCII文本文件,记录Oracle数据库运行时的一些重要参数。名字通 常为initsid*.ora格式,如:initCIMS.ora,SID相当于它所控制的数据库的标识符。每个Oracle 数据库和实例都有它自己惟一的init.ora文件。 逻辑结构:表空间,段,区,数据库块,模式对象 Oracle中除了用户创建的存放数据对象的数据表空间外,还有以下类型的表空间: (1)System表空间 (2)回滚表空间(RollBack TableSpace) (3)临时表空间(Temp TableSpace) 段:数据段,索引段,临时段,回退段 区是由很多连续的数据块组成的数据库存储空间。缺省情况下,数据库会使用表空间中存储的存储参数来管理他们的区。
Oracle数据库的模式对象包括表、视图、序列、同义词、索引、触发器、存储过程等。内存结构:系统全局区,程序全局区,排序区,软件代码区 系统全局区(SGA,System Global Area.)是内存结构的主要组成部分,是Oracle为一个实例分配的一组共享内存缓冲区,保存着Oracle系统与所有数据库用户的共享信息,包括数据维护、SQL语句分析,重做日志管理等。是实例的主要部分。 数据块缓冲区中存放着Oracle系统最近从数据文件中读取的数据块。数据块缓冲区又称用户数据高速缓冲区,为所有与该实例相链接的用户进程所共享。 在Oracle9i中,数据库缓存的大小可以直接由初始化参数DB_ACHESIZE指定,该参数可以直接以K字节或M字节为单位来设置数据库缓存的大小。 字典缓冲区用于保存数据字典中的行。数据字典缓冲区也通过最近最少使用(LRU)算法来管理。大小由数据库内部管理。字典缓存区是SQL共享池的一部分,共享池的大小(以字节为单位)由数据库文件init.ora中的SHARED_POOL_SIZE参数来设置 对数据库进行修改的任何事务(Transaction)在记录到重做日志之前都必须首先放到重做日志缓冲区(Redo Log Buffer.)中。重做日志缓冲区是专为此开辟的一块内存区域,重做日志缓存中的内容将被LGWR后台进程随时写入重做日志文件 共享SQL池(Shared SQL Pool)相当于程序高速缓冲区,所有的用户程序都存放在共享SQL 池中。SQL共享池包括库高速缓存、数据字典高速缓存和服务器控制结构 Java池为Java命令提供语法分析。 缓冲池把大数据集与其他的应用程序分开,以减少它们争夺数据块缓冲区内相同的资源。可以在SGA中创建多个缓冲池 数据库是指物理上的数据库文件或逻辑上的数据库结构。 基于之上管理和控制物理数据库的软件系统,称为数据库管理系统(DBMS)。 数据库实例和进程 数据库实例是指软件系统中用来访问数据库文件集的存储结构以及后台进程的集合,它是存取和控制数据库的软件机制
oracle体系结构总结 传统上Oracle体系结构由内存结构、进程结构、存储结构组成。其中,内存结构由SGA、PGA组成;进程结构由用户进程和Oracle进程组成;存储结构由逻辑存储、物理存储组成。 通过数据库的启动过程和一条sql的执行过程可以将oracle的内存结构、进程结构、存储结构串起来。 一、内存结构 (1)SGA(System Global Area):一个包含实例数据和控制信息的共享内存区域 (2)PGA(Program Global Area):一个包含服务器进程和后台进程的数据和控制信息的共享内存区域 1.1系统全局区SGA 系统全局区,是DB Server 中实例的必要组成部分,由很多小内存区共同构成,各个小内存区存放不同的信息,系统全局区用于暂存可以被所有进程(包括server process 以及background process)共享的信息,对系统的运行性能有好处,SGA 在实例启动的时候自动分配,实例关闭时自动释放。 SGA 暂存系统的大量共享数据,对系统有相当的性能影响,所以需要为SGA 选择适当的管理方式,根据所使用的数据库版本不同,SGA 的管理有三种方式:1)8i:SGA 的大小由所有内存组件大小之和决定,不能直接定义SGA 大小,对内存组件的大小可后台进行修改,但只能通过直接修改参数文件的内存参数大小,而且修改完数据库必须重起后才能生效,所以这种内存管理方法叫做SGA 的静态管理。 2)9i:SGA 的大小由初始化参数SGA_MAX_SIZ E 确定,各个内存组件大小之和不能超过这个参数。可以直接通过命令进行修改内存组件大小而不用重启,这种叫做SGA 的动态管理
Oracle体系结构简要介绍 1.o racle数据库软件介绍 oracle数据库包括:oracle数据库和oracle实例两个东西。Oracle实例指的是:oracle 启动后占用的内存和后台进程的总称;oracle数据库是实例和数据文件的总称。数据库关闭后数据库实例就不存在了,数据库文件一直存在。 Oracle是由oracle软件和oracle数据库组成,oracle数据库主要指的是三类文件,分别是控制文件(*.ctl)、日志文件(*.log)、数据文件(*.dbf)。 2.o racle中内存结构介绍 oracle数据库启动起来后有两大内存结构,一是SGA(系统全局区),二是PGA,其中SGA 是用来共享的,PGA是用来给进程使用的。
2.1SGA介绍 Sga是就是oracle系统的全局区,在linux和nuix中用ipcs -m命令来查看占用的共享内存。Sga包括:共享池(shared pool)、stream池(stream pool)、大型池(large pool)、java 池、数据库缓冲区高速缓存(buffer cache)、重做日志缓冲区(log buffer)。 其中主要的缓冲区包括:共享池(shared_pool)、数据库高速缓存区(db_cache)、重做日志缓冲区(log_buffer),最容易出问题的也是这三个。 在plsql中可以通过show parameters sga 或者show sga 来查看sga的参数配置。 2.1.1共享池(shard pool) 共享池(shard pool)主要用来缓存SQL语句以及所对应的SQL执行计划。参数是shared_pool_size。 SQL语句的执行计划存放在shard pool中,下次去执行的时候先到shard pool中去找,这样大大减少资源的消耗。 SQL语句的解析以及执行计划的缓存、shard pool的访问,都是有server process 来做的。 2.1.2数据库缓冲区高速缓存(buffer cache) 数据库缓冲区高速缓存(buffer cache)主要用来缓存DBF的数据,这些数据通过SQL语句的执行计划得来的。参数是db_cache_size 。 数据库缓存区高速缓存对应的是数据库写进程(DBWN),数据库写进程(DBWN)对应的是数据文件和控制文件。 2.1.3重做日志缓冲区(log buffer) 重做日志缓冲区(log buffer)主要用来存放日志的。参数是log_buffer。 重做日志缓冲区对应的是日志写进程(LGWR),日志写进程(LGWR)对应的数据文件是重做日志文件,也就是日志文件。 2.1.4stream 池(stream pool) stream 池(stream pool)是由oracle的stream来使用的。参数是streams_pool_size。 2.1.5大型池(large pool) 大型池(large pool)用于为某些大型的进程提供大量的内存分配,如数据备份等。 参数是:lorge_pool_size
Oracle 体系结构概述 完整的Oracle 数据库系统通常由两个部分组成:实例(INSTANCE )和数据库(DATABASE )。数据库是由一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等);实例则是由一组Oracle 后台进程/线程以及在服务器分配的共享内存区。 实例和数据库有时可以互换使用,不过二者的概念完全不同。实例和数据库之间的关系是:数据库可以由多个实例装载和打开,而实例可以在任何时间点装载和打开一个数据库。准确地讲,一个实例在其生存期中最多只能装载和打开一个数据库。如果要想再打开其他数据库,必须先丢弃这个实例,并创建一个新的实例。 数据库的主要功能是保存数据,实际上可以将数据库看作是存储数据的容器。数据库的存储结构也就是数据库存储数据的方式,Oracle 数据库的存储结构分为逻辑存储结构和物理存储结构,这两部分是相互独立但又密切相关的。逻辑存储结构主要用于描述在Oracle 内部的组织和管理数据的方式,而物理存储结构则用于描述在Oracle 外部,即操作系统中组织和管理数据的方式。 Oracle 对逻辑存储结构和物理存储结构的管理是分别进行的,两者之间不直接影响。因此Oracle 的逻辑存储结构能够适用于不同的操作系统平台和硬件平台,而不需要考虑物理实现方式。 在启动Oracle 数据库服务器时,实际上是在服务器的内存中创建一个Oracle 实例(即在服务器内存中分配共享内存并创建相关的后台进程),然后由这个实例来访问和控制磁盘中的数据文件。图2-1以最简单的形式展示了Oracle 实例和数据库。Oracle 有一个很大的内存块,称为系统全局区(SGA )。 文件 文件文件文件 文件数据库 SGA 后台进程后台进程后台进程后台进程后台进程后台进程后台进程 实例 图2-1 Oracle 实例和数据库 当用户连接数据库时,实际上是连接到实例中,由实例负责与数据库通信息,然后再将处理结构返回给用户。 Oracle 数据库服务器的后台进程的数量与其工作模式有密切关系。Oracle 服务器处理请求有两种最常见的方式,分别是专用服务器连接和共享服务器连接。在专用服务器连接下,Oracle 数据库会为每个用户请求分配一个专用服务器进程为其提供服务,当用户请求结束后,对应的服务器进程也相应地被终止。如果同时存在大量的用户请求,则需要同等数量的服务器进程提供服务。 而在共享服务器连接下,Oracle 数据库始终保持一定数量的服务器进程,用户的请求首
Oracle体系结构简介 一、数据库(Database) 数据库是一个数据的集合,不仅是指物理上的数据,也指物理、存储及进程对象的一个组合。Oracle是关系型数据库治理系统(RDBMS)。 二、实例(Instance) 数据库实例(也称为服务器Server)就是用来访问一个数据库文件集的一个存储结构及后台进程的集合。它使一个单独的数据库可以被多个实例访问(也就是ORACLE并行服务器-- OPS)。实例和数据库的关系如下 决定实例的组成及大小的参数存储在init.ora文件中。 三、内部结构 表、列、数据类型(T able、Column、Datatype)Oracle中是以表的形式存储数据的,它包含若干个列;列是表的属性的描述;列由数据类型和长度组成;Oracle中定义的数据类型主要有CHAR、VARCHAR2、NUMBER、DATE、LONG、LOB、BFILE等,具体的数据类型情况将在本栏目的相关文档中具体介绍。 约束条件(Constraint)表中以及表间可以存在一些数据上的逻辑关系、限制,也就是约束。Oracle中的约束主要有主键(PK)、外键(FK)、检查(CHECK)、唯一性(UNIQUE)等几种;拥有约束的表中每条数据均必须符合约束条件。 抽象数据类型(Abstract Datatype)可以利用CREATE TYPE命令创建自定义的抽象数据类型。 分区(Partition)可以利用分区将大表分隔成若干个小的存储单元,逻辑上仍然是一个完整的独立单一实体,以减小访问时数据的查找量,提高访问、存储效率 用户(User)用户不是一个物理结构,但是它与数据库的对象拥有非常重要的关系--用户拥有数据库对象,以及对象的使用权。 模式(Schema)用户帐号拥有的对象集合称为模式。 索引(Index)数据库中每行记录的物理位置并不重要,Oracle为每条记录用一个ROWID来标识,ROWID记录了记录的准确位置。索引是供用户快速查找到记录的数据库结构。ORACLE8中有簇索引、表索引、位图索引三种索引形式。 簇(Cluster)经常被频繁引用的表可以在物理位置上被存储在一起,簇就是用来治理这种集中存储的。集中存储可以减少I/O次数,以达到性能的改善和提高。
Oracle体系结构 Oracle服务器 –提供一个开放的、全面的、完整的信息管理平台 –Oracle实例和Oracle数据库组成 Oracle实例 ?访问Oracle数据库的一种方法 ?只能是打开一个仅仅只有一个数据库 ?由内存和后台进程组成 Oracle 实例由SGA 内存结构和用于管理数据库的后台进程组成。实例是通过使用对每个操作系统特定的方法来进行标识的。实例一次只能打开和使用一个数据库。
系统全局区 SGA 是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息。它是在Oracle 服务器所驻留的计算机的虚拟内存中得以分配。SGA 由几种内存结构组成: ? 共享池用于存储最近执行的SQL 语句和最近使用的数据字典数据。这些SQL 语句可以是用户进程提交的,也可以是从数据字典读取的(在存储过程的情况中)。 ? 数据库缓冲区高速缓存用于存储最近使用的数据。这些数据从数据文件读取,或者写入数据文件。 ? 重做日志缓冲区用于跟踪服务器和后台进程对数据库所做的更改。 在SGA 中还有两种可选的内存结构: ? Java 池:用于存储Java 代码 ? 大型共享池:用于存储并不与SQL 语句处理直接相关的大型内存结构。例如在备份和复原操作过程中复制的数据块。 后台进程 实例中的后台进程执行用于处理并行用户请求所需的通用功能,而不会损害系统的完整性和性能。它们把为每个用户运行的多个Oracle 程序所处理的功能统一起来。后台进程执行I/O 并监控其它Oracle 进程以增加并行性,从而使性能和可靠性更加优越。 根据配置情况,Oracle 实例可以包括多个后台进程,但是每个实例都包括下面五个必需的后台进程: ? 数据库写入程序(DBW0) 负责将更改的数据从数据库缓冲区高速缓存写入数据文件。? 日志写入程序(LGWR) 将重做日志缓冲区中注册的更改写入重做日志文件。 ? 系统监控程序(SMON) 检查数据库的一致性,如有必要还会在数据库打开时启动数据库的恢复。 ? 过程监视器(PMON) 负责在一个Oracle 进程失败时清理资源 ? 检查点进程(CKPT) 负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。 连接到Oracle Server 1.建立一个用户连接 2.创建一个会话 用于连接例程的进程 用户在给Oracle 提交SQL 语句之前,必须同实例连接起来。 ? 用户启动SQL*Plus 之类的工具,或者运行使用Oracle Forms 之类的工具开发的应用程序。这个应用程序或者工具就在用户进程中执行。 ? 在最基本的配置中,当用户登录到Oracle 服务器时,运行Oracle 服务器的计算机上就会创建一个进程。这个进程称为服务器进程。服务器进程代表在客户机上运行的用户进程与Oracle 实例通信。服务器进程代表用户执行SQL 语句。 连接 连接是用户进程和Oracle 服务器之间的通信路径。数据库用户可以用下面三种方式之一连接到Oracle 服务器: ? 用户登录到运行Oracle 实例的操作系统上,然后启动访问该系统中的数据库的应用程序或工具。通信路径是使用主机操作系统上的交互进程通信机制建立的。 ? 用户在本地计算机上启动应用程序或工具,然后通过网络连接到运行Oracle实例的计算
Oracle体系结构 一、物理结构 二、逻辑结构 三、内存结构 四、数据库实例与进程 五、数据字典 一、Oracle 的物理结构 Oracle 数据库文件包括数据文件、日志文件、控制文件、配置文件 数据文件 (1)用来存储数据库中的全部数据,如数据库表中的数据和索引数据。通常为 后缀名为.dbf格式的文件。
(2) 每个Oracle 可以有一个或多个数据文件,一个数据文件只能属于一个数据库。 (3) 每个数据文件又由若干物理块组成; (4) 一个或多个数据文件组成表空间; 日志文件(重做日志文件) (1)用于记录数据库所做的全部变更(如增加、删除、修改),以便在系统发生故障时,用它对数据库进行恢复。名字通常为Log*.dbf格式。 控制文件 (1)用于打开和存取数据库。 (2)是较小的二进制文件,记录了数据库的物理结构,如:数据库名、数据库的数据文件和日志文件的名字和位置等信息。 (3)名字通常为Ctr*.ctl格式,如CtrlCIMS.ctl。 (4)控制文件中的内容只能够由Oracle本身来修改。 (5)每个数据库必须至少拥有一个控制文件。一个数据库也可有多个控制文件,但是一个控制文件只能属于一个数据库。 配置文件: (1)是一个ASCII文本文件,记录Oracle 数据库运行时的一些重要参数。 (2)名字通常为initsid*.ora格式,如:initCIMS.ora, (3)SID相当于它所控制的数据库的标识符。 (4)每个Oracle数据库和实例都有它自己惟一的init.ora 文件。
二、Oracle 的逻辑结构 逻辑结构描述了数据库从逻辑上如何来存储数据块中的数据。包括表空间、段、区、数据块和模式对象。逻辑结构支配一个数据库如何使用系统的物理空间,模式对象及其之间的关系则描述关系数据库之间的设计。一个数据块从逻辑上是由一个或多个表空间组成,表空间是数据块中物理编组的数据仓库,每个表空间由段构成,段由一组区组成,一个区由连续的数据块组成。 表空间 表空间分类: Oracle 中除了用户创建的存放数据对象的数据表空间外,还有以下类型的表空间: 1) System 表空间(System TableSpace) 2) 回滚表空间(RollBack TableSpace) 3) 临时表空间(Temp TableSpace) 系统表空间(System TableSpace): a)是每个Oracle数据库必须具备部分,安装时自动建立, b)存放表空间名称、表空间所含数据文件等管理数据库自身所需信息; c)如:数据字典、存储过程、包、函数和触发器定义、系统回滚段、数据 库对象定义,用户过程等。 d)每个Oracle 数据库必须至少有个默认表空间。
Oracle体系结构 Oracle核心竞争力 可扩充性: Oracle系统有能力承担增长的工作符合,并且相应的扩充系统资源利用情况。 可靠性: 无论出现系统资源崩溃,电源断电还是系统故障的时候,我们都可以对Oracle进行配置。以保证检索用户数据事务处理的时候,不受到影响。 可管理性: 数据库管理员可以微调Oracle使用内存的方式,以及Oracle向磁盘写入数据的频率。并且管理可以调整,数据库为连接到数据库的用户分配操作系统进程的方式。 Oracle总体结构分为三个部分 第一部分:系统全局区(SGA) 第二部分:程序全局区和后台进程
第三部分:Oracle的文件 如果从功能上划分的话: 存储结构:由这些文件就构成了Oracle的物理存储结构。 内存结构:使用内存最多的是SGA,也是影响数据库系统性能最大的一个参数。 进程结构:前台进程服务进程和用户进程,是根据实际需要而运行的,并在需要结束后立刻结束。后台进程是指Oracle数据库启动后自动启动的几个操作系统进程。 存储结构 包括物理结构和逻辑结构,既独立又相互联系的。 物理结构:是和操作系统平台有关的。 逻辑结构:逻辑存储结构是和操作系统平台无关的。 _______________________________________________________________________________
这个图是两种存储结构中的对应关系 表空间包括系统表空间和用户表空间。表空间也是最大的逻辑单位。 块是最小的一个逻辑单位。 逻辑结构的表空间对应着物理结构的数据文件,也就是创建表空间的时候要给它指定数据文件,但是一个表空间可以对应多个数据文件。表空间的大小也就是他包含的数据文件大小的总和。 数据文件呢同时又对应着操作系统中的数据块,数据文件也是以数据块的形式,存在于操作 系统中。 逻辑结构中的块也对应着操作系统的数据块。 ——————————————————————————————————————— 物理存储结构 Oracle的物理存储结构,也就是Oracle的数据库文件 数据库文件又分为主要文件和其他文件 主要文件: 首先来看数据文件: 就是物理存储Oracle数据库数据的文件有一下特点:
概要 在本章里你可以了解以下内容 1、ORACLE 实例——包括内存结构与后台进程 2、ORACLE 数据库——物理操作系统文件的集合 3、了解内存结构的组成 4、了解后台进程的作用 5、了解数据库的物理文件 6、解释各种逻辑结构 一、ORACLE事例 1、ORACLE 实例 System Global Area(SGA) 和Background Process 被成为数据库的实例。 2、ORACLE 数据库 一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等) 3、系统全局共享区System Global Area(SGA) System Global Area 是一块巨大的共享内存区域,他被看做是Oracle 数据库的一个大缓冲池,这里的数据可以被ORACLE的各个进程共用。其大小可以通过如下语句查看: SQL> select * from v$sga; NAME VALUE -------------------- --------- Fixed Size 39816 Variable Size 259812784 Database Buffers 1.049E+09 Redo Buffers 327680 更详细的信息可以参考V$sgastat、V$buffer_pool 主要包括以下几个部分: a、共享池(Shared pool) 共享池是SGA中最关键的内存片段,特别是在性能和可伸缩性上。一个太小的共享池会扼杀性能,使系统停止,太大的共享池也会有同样的效果,将会消耗大量的CPU来管理这个共享池。不正确的使用共享池只会带来灾难。共享池主要又可以分为以下两个部分: ·SQL语句缓冲(Library Cache) 当一个用户提交一个SQL语句,Oracle会将这句SQL进行分析(parse),这个过程类似于编译,会耗费相对较多的时间。在分析完这个SQL,Oracle会把他的分析结果给保存在Shared pool的Library Cache中,当数据库第二次执行该SQL时,Oracle自动跳过这个分析过程,从而减少了系统运行的时间。这也是为什么第一次运行的SQL 比第二次运行的SQL要慢一点的原因。 下面举例说明parse的时间 SQL> select count(*) from scpass ; COUNT(*) ---------- 243 Elapsed: 00:00:00.08 这是在Share_pool 和Data buffer 都没有数据缓冲区的情况下所用的时间 SQL> alter system flush SHARED_POOL; System altered. 清空Share_pool,保留Data buffer
传统上Oracle体系结构由内存结构、进程结构、存储结构组成。其中,内存结构由SGA、PGA组成;进程结构由用户进程和Oracle进程组成;存储结构由逻辑存储、物理存储组成。通过数据库的启动过程和一条sql的执行过程可以将oracle的内存结构、进程结构、存储结构串起来。 一、内存结构 (1)SGA(System Global Area):一个包含实例数据和控制信息的共享内存区域 (2)PGA(Program Global Area):一个包含服务器进程和后台进程的数据和控制信息的共享内存区域 1.1系统全局区SGA 系统全局区,是 DB Server 中实例的必要组成部分,由很多小内存区共同构成,各个小内存区存放不同的信息,系统全局区用于暂存可以被所有进程(包括server process 以及background process)共享的信息,对系统的运行性能 有好处,SGA 在实例启动的时候自动分配,实例关闭时自动释放。 SGA 暂存系统的大量共享数据,对系统有相当的性能影响,所以需要为SGA 选 择适当的管理方式,根据所使用的数据库版本不同,SGA 的管理有三种方式:1)8i:SGA 的大小由所有内存组件大小之和决定,不能直接定义 SGA 大小,对内存组件的大小可后台进行修改,但只能通过直接修改参数文件的内存参数大小,而且修改完数据库必须重起后才能生效,所以这种内存管理方法叫做 SGA 的静态管理。 2)9i:SGA 的大小由初始化参数 SGA_MAX_SIZ E 确定,各个内存组件大小之和不能超过这个参数。可以直接通过命令进行修改内存组件大小而不用重启,这种叫做 SGA 的动态管理 3)10g:SGA 大小既可以像 9i 一人样动态管理,也可以实施 SGA 的自动管理,默认是 SGA 的自动管理,启用 SGA 自动管理只需要设置初始化参数 SGA_TARGET 即可,各个组件大小之和不超过 SGA _TARGET 。在自动管理下,SGA 各个内存组件由数据库自动设置大小,设置各个内存区大小的依据来源于系统自动收集的统计信息。 在设置内存组件大小的时候,分配的基本单位是粒度(granule ) granule 是一段连续的虚拟内存,大小取决于 SGA_MAX_SIZE 的大小,如果 SGA_MAX_SIZ E小于 128M ,Granule 为 4M,否则 Granule 为 16M。 大多数内存组件的大小必须是 Granule 的整数倍,Redo Log Buffer 的大小不受这个限制,可以自行设置,它与其他小内存区共同构成 Granule 的整数倍。整个 SGA 最小不小于 3 个 Granule 大小,其中共享池一个,数据缓存区一个,其他分一个, SGA的总大小也一定是 Granule 的整数倍大小。 SGA 大多数组件的大小可以动态调整,只要确保所有的内存组件大小之和不超过SGA _MAX_SIZE 或 SGA_TARGET 的大小,在 10G 中 SGA 内存组件可以自动管理,各个内存大小由数据库自己决定,设置 SGA_TARGET 参数(非 0)即可以开启内存自动管理,这个参数也可动态修改,如果设置为 0,则意味着,禁用内存自动管理,伋需要 DBA 手动调整各个内存组件大小。 以下内存组件大小可以由数据库自动设置 1)Buffer cache(db_cache_size)