ORACLE系统结构

来源:互联网 发布:尹恩惠 知乎 编辑:程序博客网 时间:2024/04/29 17:12

 

一、ORACLE 实例——包括内存结构与后台进程

内存结构:

1系统全局区:System Global Area(SGA) 是一块巨大的共享内存区域,他被看做是Oracle 数据库的一个大缓冲池,这里的数据可以被ORACLE的各个进程共用。其大小可以通过如下语句查看: select * from v$sga;

a 共享池(Shared pool)

包括SQL语句缓冲(Library Cache)和数据字典缓冲区(Data Dictionary Cache)

b、块缓冲区高速缓存(Database Buffer Cache)

c、重做日志缓冲区(Redo log buffer)

dJava程序缓冲区(Java Pool)

Java 的程序区,Oracle 8I 以后,Oracle 在内核中加入了对Java的支持。该程序缓冲区就是为Java 程序保留的。如果不用Java程序没有必要改变该缓冲区的默认大小。

e、大池(Large Pool)

大池的得名不是因为大,而是因为它用来分配大块的内存,处理比共享池更大的内存,在8.0开始引入。

 

2、后台进程(Background process)

aOracle系统5个基本进程和其他进程

DBWR(数据文件写入进程)

LGWR(日志文件写入进程)

SMON(系统监护进程)

PMON(用户进程监护进程)

CKPT(检查点进程,同步数据文件, 日志文件,控制文件)

(1)DBWR(数据文件写入进程):负责将更改的数据从数据库缓冲区高速缓存写入数据文件
(2)LGWR(日志文件写入进程):将重做日志缓冲区中的更改写入在线重做日志文件
(3)SMON(系统监护进程):检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复
(4)PMON(用户进程监护进程):负责在一个Oracle 进程失败时清理资源
(5)CKPT(检查点进程,同步数据文件, 日志文件,控制文件)

负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。该进程在检查点出现时,对全部数据文件的标题进行修改,指示该检查点。在通常的情况下,该任务由LGWR执行。然而,如果检查点明显地降低系统性能时,可使CKPT进程运行,将原来由LGWR进程执行的检查点的工作分离出来,
由CKPT进程实现。对于许多应用情况,CKPT进程是不必要的。只有当数据库有许多数据文件,LGWR在检查点时明显地降低性能才使CKPT运行。CKPT进程不将块写入磁盘,该工作是由DBWR完成的。 init.ora文件中 CHECKPOINT_PROCESS 参数控制CKPT进程的使能或使不能。缺省时为FALSE,即为使不能。 

(6)归档进程:在每次日志切换时把已满的日志组进行备份或归档
(7)服务进程:用户进程服务。
(8)用户进程:在客户端,负责将用户的SQL语句传递给服务进程,并从服务器段拿回查询数据。  

二、ORACLE数据库的组成——物理操作系统文件的集合。

主要包括以下几种。

1、控制文件(参数文件init.ora记录了控制文件的位置)

2、数据文件(数据文件的详细信息记载在控制文件中)

可以通过如下方式查看数据文件

select name from v$datafile;

i. 系统数据文件(system_01.dbf)

ii. 回滚段文件(rbs_01.dbf)

iii. 临时数据文件(temp_01.dbf)

iv. 用户数据文件(/applsys_data_01.dbf ,applsys_indx_01.dbf)

 

3、重做日志文件(联机重做日志)

i. 增加日志组

ii. 增大日志文件成员大小

通过v$log可以查看日志组,v$logfile可以查看具体的成员文件。

(1)查看数据文件: SQL> select * from v$datafile;

(2)查看控制文件: SQL> select * from v$controlfile;

(3)查看日志文件: SQL> select * from v$logfile;

 

 

4、归档日志文件

5、初始化参数文件

6、其他文件

i . 密码文件

用于Oracle 的具有sysdba权限用户的认证.

ii. 日志文件

报警日志文件(alert.logalrt.ora

后台或用户跟踪文件

 

三、ORACLE逻辑结构

1 表空间(tablespace)

表空间是数据库中的基本逻辑结构,一系列数据文件的集合。一个表空间可以包含多个数据文件,但是一个数据文件只能属于一个表空间。

2 (Segment)

段是对象在数据库中占用的空间,虽然段和数据库对象是一一对应的,但段是从数据库存储的角度来看的。一个段只能属于一个表空间,当然一个表空间可以有多个段。

表空间和数据文件是物理存储上的一对多的关系,表空间和段是逻辑存储上的一对多的关系,段不直接和数据文件发生关系。一个段可以属于多个数据文件,关于段可以指定扩展到哪个数据文件上面。

段基本可以分为以下四种

数据段(Data Segment)

索引段(Index Segment)

回滚段(Rollback Segment)

临时段(Temporary Segment)

 

3、区间(Extent)

关于Extent的翻译有多种解释,有的译作扩展,有的译作盘区,我这里通常译为区间。在一个段中可以存在多个区间,区间是为数据一次性预留的一个较大的存储空间,直到那个区间被用满,数据库会继续申请一个新的预留存储空间,即新的区间,一直到段的最大区间数(Max Extent)或没有可用的磁盘空间可以申请。 ORACLE8i以上版本,理论上一个段可以无穷个区间,但是多个区间对ORACLE却是有性能影响的,ORACLE建议把数据分布在尽量少的区间上,以减少ORACLE的管理与磁头的移动。

4Oracle数据块(Block)

ORACLE最基本的存储单位,他是OS数据块的整数倍。ORACLE的操作都是以块为基本单位,一个区间可以包含多个块(如果区间大小不是块大小的整数倍,ORACLE实际也扩展到块的整数倍)。

 

5、基本表空间介绍

 

a. 系统表空间

主要存放数据字典和内部系统表基表

查看数据数据字典的SQL

select * from dict

查看内部系统表的SQL

select * from v$fixed_view_definition

DBA对系统的系统表中的数据字典必须有一个很深刻的了解,他们必须准备一些基础的SQL语句,通过这些SQL可以立即了解系统的状况和数据库的状态,这些基本的SQL包括

系统的剩余空间

系统的SGA

状态系统的等待

用户的权限

当前的用户锁

缓冲区的使用状况等

在成为DBA 的道路上我们不建议你过分的依赖于OEM/Quest 等优秀的数据库管理工具,因为他们不利于你对数据数据字典的理解,SQL语句可以完成几乎全部的数据库管理工作。

大量的读少量的写是该表空间的一个显著的特点。

 

b. 临时表空间.

临时表空间顾名思义是用来存放临时数据的,例如排序操作的临时空间,他的空间会在下次系统启动的时候全部被释放。

 

c. 回滚段表空间

i. 回滚段在系统中的作用

当数据库进行更新插入删除等操作的时候,新的数据被更新到原来的数据文件,而旧的数据(Before Image)就被放到回滚段中,如果数据需要回滚,那么可以从回滚段将数据再复制到数据文件中。来完成数据的回滚。在系统恢复的时候, 回滚段可以用来回滚没有被commit 的数据,解决系统的一至性。

回滚段在什么情况下都是大量的写,一般是少量读,因此建议把回滚段单独出来放在一个单独的设备(如单独的磁盘或RAID),以减少磁盘的IO争用。

 

ii. 回滚段的工作方式

一个回滚表空间可以被划分成多个回滚段.

一个回滚段可以保存多个会话的数据.

回滚段是一个圆形的数据模型

假设回滚段由4 个区间组成,他们的使用顺序就是区间1à区间2à区间3à区间4à区间1。也就是说,区间是可以循环使用的,当区间4到区间1的时候,区间1里面的会话还没有结束, 区间4用完后就不能再用区间1,这时系统必须分配区间5,来继续为其他会话服务服务。

我们分析一个Update 语句的完成

 

. 用户提交一个Update 语句

. Server Process 检查内存缓冲.

如果没有该数据块的缓冲,则从磁盘读入

i. 如果没有内存的有效空间,DBWR被启动将未写入磁盘的脏缓冲写入磁盘

ii. 如果有有效空间,则读入

 

. 在缓冲内更新数据

i. 申请一个回滚段入口,将旧数据写如回滚段

ii. 加锁并更新数据

iii. 并在同时将修改记录在Redo log buffer

 

 

 

原创粉丝点击