oracle学习入门系列之五
内存结构、数据库结构、进程
1 Oracle数据库结构
关于这个话题,网上一搜绝对一大把,更别提书籍上出现的了,还有很多大师们的讲稿。但是我们不去管那些,按照我们自己节奏记出特性、记出精彩来。
首先插入本系列第一张图片,图一(绝对来自官网),看蛤蟆对于图片使用是多么小心的,如果大伙对这个图已有自己独到的理解,那么可直接跳过本篇笔记吧,当然温故而知新也未尝不可,知耻而后勇….额,而来知耻?
1.1 总体结构
这个图1从总体上描述了Oracle数据库的大概了,包含有内存结构,数据库文件,进程及客户端。虽然不是非常详细但是蛤蟆觉得该图是在是理解ORACLE数据库入门的好图。

那么我们一起围观下该图到底说了些什么。
服务进程,这里展开就是服务进程是专用服务进程还是共享,后续会慢慢道来。
内存结构,内存结构中主要包含PGA和SGA,PGA是为客户端接入时候服务,SGA是数据库运行服务的,这些在机器下电后就消失了。
还有主要的6个进程PMON,SMON,DBWR,LGWR,CHPT,Arcn,在启动数据库的时候才会有这些进程。
最下面就是存放在持久化介质上文件了,有归档日志,数据文件,参数文件,密码文件等,不随机器下电而消失的。
途中有2个在Oracle中非常重要的概念,实例和数据库:
1.1.1 实例
实例是oracle 创建的进程和内存结构的组合。
1.1.2 数据库
数据库是由一组文件组成的,对数据库的所有操作都是需要通过实例来完成了。通常数据库和实例是一一对应的。例外就是RAC了,RAC下一个数据库就对应了多个实例。
实例和数据库关系打个比方就是发动机和汽车的关系。汽车就是数据库,就在那里,但是动不了,只有发动机发动了,汽车才能动起来。一般情况下一个汽车一个单缸发动机;但是也可以是多缸的嘛,如6缸发动机什么的。
接下去看逻辑数据库结构。
1.2 逻辑数据库结构
放入第二章图,如下图2,如来自互联网

?
这里需要提一些概念了,都是ORACLE数据库中最基本而且需要一直掌握的概念,是一直,死都不能忘了,如果担心自己忘记就记下来把。这里提到的概念是一通百通的,很多可以适用到其他数据库中的,记住后我们后续学习必将事半功倍。
我们从最下面开始介绍吧,枯燥但不乏味的哈~
1.2.1 数据块
数据块,data block,是oracle数据块的存储基础,有若干字节组成。又是若干,到底是多少个字节呢?一般常用的是8KB,4KB的了,在创建数据库的时候可以指定。一旦指定就不能改变了,不过即使在4KB的数据库中,我们也可以指定创建8KB的表空间的,只要我们内存结构中存在8KB的缓存。
数据块类似操作系统中的块大小,通常ORACLE数据库块大小会是操作系统块大小的整数倍,其中好处就无需多说了。
蛤蟆自身工作经验来看,在OLTP模型上,4KB、8KB及16KB下性能相差不是特别明显。
不过原则是块尺寸是处理Oracle的更新、选择或者插入数据事务的最小单位,且访问很随机,则选择块较小的块尺寸;如果行比较小且访问主要是连续,或者如果有较大的行,则用较大的块尺寸。
1.2.2 数据区间
区,extent,是两个或者多个相邻的ORACLE数据块,他是空间分配的单元。概念总是如此的明了,3点关键。
a) 2个或2个以上
b) 相邻的数据块
c) 空间分配单元
数据块是存储单元,区是分配单元。看着概念重不重要的,从概念我们就知道,ORACKE分配空间的时候至少2个数据块起步的。要是申请一个数据块,那么不好意思啦,就是不给。
就像小时候向爸爸妈妈要零花钱,
我们:“妈,给我5分钱,买个萝卜丝吃”
老妈:“!@#¥%……,没有5分”
我们:“一毛也行”
老妈:“好吧,又买两包萝卜丝?,给你1毛”
1.2.3 数据段
段是分配给某个逻辑结构的一组区。
2个关键点
a) 分配给某个逻辑结构
b) 一组区
1.2.4 对象
ORACLE数据库对象,主要就是如下10个了。
1) 表
2) 约束条件:保证数据完整性。
3) 视图:虚表,命名的查询语句。
4) 索引:加速查询(加快查询的速度)。
5) 序列:一串连续递增或递减的数字,步长相同,(代理键) 。
6) 同义词:一个对象的另外一个叫法(对象的别名)。
7) 存储过程:用于操作
8) 函数:用作复杂运算的。用于计算。
9) 触发器:由事件触发的存储过程。
10) 包
对数据库的操作可以基本归结为对数据对象的操作,这个对象蛤蟆也不知道如何去定义它。对象也是一个逻辑结构,是建立于段之上的,有头有脸的结构。
?
1.2.5 表空间
表空间是一组数据文件,通常由相关的段组成。表空间是包含物理数据文件的逻辑实体。表空间存储数据库的所有可用数据。
下节中就能看到表空间和物理数据文件的对应关系。表空间也是一个逻辑结构是,数据库下最大的逻辑结构了。
数据库创建完后会有如下表空间
a) System表空间
b) Sysaux 表空间
c) 撤销Undo表空间
d) 临时temporary表空间
1.3 物理数据库结构
上节介绍了oracle数据库的逻辑结构,那么接下去必须得看下,逻辑结构和物理存储结构是如何对应的。
首先在通常情况下我们可以这样理解,ORAC LE数据库由表空间组成;所以和物理数据库结构相关的从表空间开始了。
先看如下图3:

?
从上图可以看出,逻辑结构比物理结构复杂了些许。
物理结构上就两个东西 操作系统块和文件。上节中提到数据库块是操作系统块的整数倍,从图中也能反映一二。
这里蛤蟆重点解释下ORACLE数据库中的文件。
1.4 数据文件
数据文件一般是数据库最大的物理存储部分,一个数据文件只能属于一个数据库。一个或者多个数据文件构成成为表空间的实体。
我们创建一个表空间时候,让他拥有一个2G大小的数据文件,那么该表空间就能存放2G大小的数据量,有一天耗尽了这2G,那么再增加一个数据文件给这个表空间,当然也可以扩大原先数据文件的大小。
注意:上篇提到了对象如索引、表等,虽然也是存在表空间所属的数据文件中,但是这些对象本身不会指定要存放在那个数据文件上,数据文件只与表空间关联。
数据库中执行如下查看数据文件所在
SQL>selectname from v$datafile;
?
1.5 控制文件
一看这个文件,蛤蟆就不禁感叹:如此之小,确如此重要啊。小身材,大作用。
这个控制文件,管理了数据库的状态,非常重要,一般管理员都会进行至少3份备份。
控制文件包含了数据文件和重做日志文件的名字、位置、日志序号、备份等详细信息,以及所有重要的SCN(系统更改号)。数据库在操作过程中进程不断的更新控制文件。
控制文件中的检查点信息使ORACLE能确定从联机重做日志文件中需要返回多少以便恢复数据。此外,在启动oracle实例时,通过控制文件,确定数据库操作必须打开的所有数据文件和重做日志文件。
你看,重要不?
查看控制文件所在
SQL>selectname from v$controlfile
1.6 日志文件
日志文件其实准确的是重做日志文件,记录了对数据库做的全部更改,有助于恢复数据库。如果日志文件写满后就会进行归档,归档的日志文件叫做归档重做日志,正在记录的日志文件叫做联机重做日志文件。
Oracle要求数据库至少两个重做日志组,每个至少