在了解Oracle体系结构之前必须掌握以下两个基本的概念: 数据库 和实例。
一、数据库 数据库(database)是一个数据集合. 无论数据库是采用关系结构还是面向对象结构, oracle数据库都将其数据存放在数据文件中. 在其内部, 数据库结构数据对文件的逻辑映射, 使不同的数据分开存储, 这些逻辑划分称为表空间
二、实例 通俗的讲实例就是操作oracle数据库的一种手段.数据库实例也称作服务器, 是用来访问数据库文件集的内存存储结构 及后台进程 的集合. 一个数据库可以被多个实例访问(称为真正的应用群集选项).决定实例的大小及组成的各种参数或者存储在名称init.ora的初始化文件中, 或者隐藏在数据库内部的服务器参数文件中. 通过spfile引用该文件, spfile存储在spfile.ora文件中.实例启动时读取初始化文件, 数据库系统管理员可以修改该文件, 对初始化文件的修改只有在下次启动时才有效。
[正文 ]
一、数据库
数据库(database)是一个数据集合.
无论数据库是采用关系结构还是面向对象结构, oracle数据库都将其数据存放在数据文件中. 在其内部, 数据库结构数据对文件的逻辑
映射, 使不同的数据分开存储, 这些逻辑划分称为表空间.
表空间和文件介绍:
1: 表空间
表空间(tablespace)是数据库的逻辑划分, 每个数据库至少有一个表空间,叫做系统表空间(system 表空间). 一个表空间只能属于一个数据库。每个表空间由同一个磁盘上的一个或多个文件组成, 这些文件称为数据文件.
表空间的特性:
(1)控制数据库数据磁盘分配
(2)限制用户在表空间中可以使用的磁盘空间大小
(3)表空间具有 online, offline, readonly, readwrite属性
修改表空间的属性:
SQL> alter tablespace 表空间名称 属性;
查询表空间状态:
SQL> select tablespace_name, status from dba_tablespaces;
注意: system, undo, temp表空间不能设为offline属性.
(4)完成部分数据库的备份与恢复
(5)表空间通过数据文件来扩大, 表空间的大小等于构成该表空间的所以数据文件的大小只和.
查询表空间与数据文件对应关系:
SQL> select tablespace_name, bytes, file_name from dba_data_files;
基于表空间的几个操作:
(1)查询用户缺省表空间:
SQL> select username, default_tablespace from dba_users;
(2)查询表与存储该表的表空间:
SQL> select table_name, tablespace_name from user_tables;
(3)修改用户缺省表空间:
SQL> alter user username default tablespace tablespace_name;
(4)将数据从一个表空间移动到另一个表空间:
SQL> alter table table_name move tablespace tablespace_name;
2.数据文件
每个表空间由同一个磁盘上的一个或多个文件组成, 这些文件叫做数据文件(datafile),数据文件只能属于一个表空间. 数据文件创建后可以改变大小. 创建新的表空间需要创建新的数据文件. 数据文件一旦加入到表空间中, 就不能从表空间中移走, 也不能与其他表空间发生联系。
数据库必须的三类文件是 data file , control file , redolog file . 其他文件 prameter file,password file, archived log files并不是数据库必须的, 他们只是辅助数据库的。
查看数据库的物理文件组成:
(1)查看数据文件: SQL> select * from v$datafile;
(2)查看控制文件: SQL> select * from v$controlfile;
(3)查看日志文件: SQL> select * from v$logfile;
二、实例
通俗的讲实例就是操作oracle数据库的一种手段.
数据库实例也称作服务器, 是用来访问数据库文件集的存储结构(内存结构) 及后台进程 的集合.
一个数据库可以被多个实例访问(称为真正的应用群集选项).
决定实例的大小及组成的各种参数或者存储在名称init.ora的初始化文件中, 或者隐藏
在数据库内部的服务器参数文件中. 通过spfile引用该文件, spfile存储在spfile.ora文件中.
实例启动时读取初始化文件, 数据库系统管理员可以修改该文件, 对初始化文件的修改只有在下次启动时才有效。
Instance分为两部分:
1: memory structure(内存 结构)
memory structure分为两部分:
SGA(System Global Area) 区是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息, 它是在Oracle 服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存 中写。
包括:
.share pool
.datafase buffer cache
.redo log buffer
.other structures
PGA(Program Global Area)区 包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA 正相反PGA 是只被一个进程使用的区域,PGA 在创建进程时分配在终止进程时回收。
2: background process(后台进程)
包括:
.PMON 负责在一个Oracle 进程失败时清理资源
.SMON 检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复
.DBWR 负责将更改的数据从数据库缓冲区高速缓存写入数据文件
.LGWR 将重做日志缓冲区中的更改写入在线重做日志文件
.CKPT 负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。
==Instance 包括内存结构 和后台进程 ==
Instance 包括内存结构 和后台进程 。
内存结构 即SGA 和PGA 。SGA 包括必须的share pool ,database buffer cache , redo log buffer cache 和一些其他的结构(如锁、latch管理),还有一些可选的,如:large pool,java pool。SGA的大小在oracle9i中可以动态的调整,峰值可以由SGA_MAX_SIZE参数来设置。Share pool 用来存放最近使用的SQL语句和数据的定义 ,它包含Library Cache 和 Data dictionary Cache 两个内存结构,其中Library Cache 用来存放最近使用的SQL和PL/SQL语句 ,使用的是LRU算法;Data dictionary Cache 是用来存放最近使用过的定义 ,如数据库文件、表、索引、列、用户、权限等。Database buffer cache 存放的是数据块的副本,当用户发起一个查询请求的时候,服务器进程首先去查看database buffer cache中是否有所需的数据,若没有,则到数据文件中去查找,找到后,同时将它复制到database buffer cache中,以便下次查询的时候使用,这样就提高了查询的效率。redo log buffer cache 记录了所有对数据块的改变,也就是说,对数据库中的数据进行的任何修改,都会记录到redo log buffer cache中,以便恢复数据库时用。Large pool 是一个可选项,当oracle以shared mode运行时,用来承担起存储用户进程、dispatchers、服务器间的连接信息,从而减轻share pool的负担。Java pool也是可选项,当使用java程序的时候,需要设置它。PGA是为一个单独的服务器进程或后台进程保留的一块内存区域,它包括:排序区(sort area)、会话信息(session information)、游标声明(cursor state)、stack space。
Oracle进程结构 包括用户进程 、服务器进程 和后台进程 。
a、 user process :当一个用户向oracle server请求连接的时候产生;它可以向oracle server请求交互操作;
它有两个特点:
第二, 必须先与oracle server建立一个连接;
第三, 它不会与oracle server直接的进行交互操作
b、 server process :当用户建立一个session的时候产生;它去连接instence;直接与oracle server进行交互操作;一旦用户建立了与oracle server的连接,就产生了一个server process,它用来处理user process的请求;在dedicated mode下,一个server process只处理一个user process的请求,在shared mode下,处理多个user process的请求。
c、 background process :当oracle instance启动的时候产生。可以理解为它是连接oracle物理结构(database) 和内存结构(SGA) 的纽带 ,有五个强制的进程:
1) DBW R :Database Writer
它将数据库buffer中的dirty buffer写到数据文件中,从而保证在database buffer cache中有足够的可用的buffer;
2) LGWR :Log Writer
它从redo log buffer中将数据有顺序的写到redo log file中;
3) SMON :System Monitor
当instance异常结束后,再次重新打开的时候,SMON自动执行恢复操作:
1、向前执行已经提交成功的事务,即被记录到redo log中的操作;
2、打开数据库,一边用户可以登陆,这时用户可以访问没有被锁住的数据,即执行成功的事务的数据;
3、向后回滚instance异常时未被提交的事务,这些操作没有来得及写到redo log中。
4) PMON :process monitor
Clean up after failed process by:
1、回滚用户当前的事务;
2、释放当前锁住的表和行;
3、释放其他用户占用的资源;
4、重启dispatcher
5) CKPT :CheckPoint
当DBWn进程将SGA中所有的修改了的buffers(提交了的和未提交的)都写到数据文件中的时候,产生CheckPoint。
6) ARCn :Archiver
它是可选的后台进程。当一个redo log file写满了之后,需要切换到另外一个redolog file中,这个过程称之为log switch。那么ARCn就是在每个log switch时候,都初始化备份、归档。它自动对连接的redolog文件进行归档,以保证所有的对数据库的改变都受到保护。
Oracle经典资料:
《Oracle Concepts 手册》
《Oracle9i&10g编程艺术》
《SQL语言艺术》
cnOracle:http://www.cnoracle.com/archives/276