Oracle数据库简介
一、介绍
Oracle数据库系统是美国Oracle(甲骨文)公司提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(Client/Server,C/S)或浏览器/服务器(Browser/Server,B/S)体系结构的数据库之一。
Oracle数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。
截止至2015年06月,Oracle数据库最新版本为Oracle Database 12c。
二、特点
1、完整的数据管理功能:
- 数据的大量性
- 数据的保存的持久性
- 数据的共享性
- 数据的可靠性
2、完备关系的产品:
- 信息准则—关系型DBMS的所有信息都应在逻辑上用一种方法,即表中的值显式地表示
- 保证访问的准则
- 视图更新准则—只要形成视图的表中的数据变化了,相应的视图中的数据同时变化
- 数据物理性和逻辑性独立准则
3、分布式处理功能:
Oracle数据库自第5版起就提供了分布式处理能力,到第7版就有比较完善的分布式数据库功能了,一个Oracle分布式数据库由Oracler DBMS、sql*Net、SQL*CONNECT和其他非Oracle的关系型产品构成。
4、用ORACLE能轻松的实现数据仓库的操作。
优点:
- 可用性强
- 可扩展性强
- 数据安全性强
- 稳定性强
三、Oracle体系架构
Oracle体系结构包括很多基本组件,下面简要介绍一下几个常见组件。
1、Oracle Server(服务器)
Oracle服务器是最大的概念,包含多种文件结构、进程结构和内存结构;但是,处理SQL语句时,并非所有这些结构都会用到。某些结构用于提高数据库的性能,确保该数据库在遇到软件或硬件错误时可以恢复,或者执行维护该数据库所需的其它任务。Oracle服务器包含两部分:Oracle Instance(实例)和Oracle Database(数据库)。
2、Oracle Instance(实例)
Oracle Instance(实例)的定义:访问Oracle Database的一个手段;一个instance对应一个且也只能对应一个database,而一个database可以有多个instance来访问它,也就是说instance和database的多对一的关系,在典型的情况下,一台机器上装的oracle,他们俩是一对一的关系,对应集群方式(简称RAK)是多对一;instance也是由两个部分组成:内存(memory)和后台进程(background process)。
memory由两部分构成:SGA(system global area,系统全局区)和PGA(program global area,程序全局区);一个实例就一个SGA,SGA是实例的基本组成部分;一个server process启动的时候,就有一个PGA;oracle是一个狂吃内存的软件,内存主要消耗在SGA上。
说明:instance是活的东西,易于消失,oracle没有启动的话,也就没有instance。
2.1 SGA结构
SGA是动态的结构,其大小由SGA_MAX_SIZE指定。
2.1.1 共享池shared pool
用于存储最近使用过的SQL语句和数据字典。它包括两个部分,即库缓存(library cache)和数据字典缓存(dictionary cache)两部分组成。
下面是改变共享池的命令:
Alter system set SHARED_POOL_SIZE=64M;
库缓存用于储存使用的SQL语句,而数据字典缓存用于存储最近使用过的数据字典。它们的大小都需要使用共享池来确定而不能自己设置。
2.1.2 database buffer cache数据高速缓存区
它用于存储最近访问的数据块,由多个小缓冲区组成。DB_BLOCK_SIZE则确定了数据块的大小。
Alter system set DB_CACHE_SIZE=96M;
在执行SELECT或DML时,数据都是从数据文件读取到高速缓存区执行的,即数据的访问和操作是在内存中完成的。
2.1.3 redo log buffer日志缓冲区
用于记录例程的变化,其尺寸由LOG_BUFFER来定义。当执行DDL或DML时,服务器进程首先会将变化记录到日志缓冲区,然后才会修改数据的高速缓存。
2.1.4 large pool大池和JAVA池(可选)
如果安装或使用JAVA的话就需要使用JAVA池。
2.2 后台进程结构
Oracle中process(进程)分为三类:background process(后台进程)、server process(服务器进程)和user process(用户进程)。其实server process也属于后台进程,oracle中对进程进行了细化,这里说的background process主要是专注于数据库核心的进程,而server process主要是用于处理客户端和服务器连接的进程。
Oracle有许多必须的后台进程,它是运行Oracle服务时必须的。
2.2.1 DBWR
用于将数据高速缓存中的脏数据写入到数据文件中。所谓脏数据就是发生改变的数据。
2.2.2 PMON
用于监视服务器进程的执行,并在其失败时清除这个进程。
2.2.3 CKPT
用于发出检查点,用于同步数据库的数据文件、控制文件和重做文件。
2.2.4 LGWR
用于将日志缓冲区的内容写入到重做日志中去。
2.2.5 SMON
系统监控进程。用于自动恢复实例,合并空闲空间和释放临时段。
2.2.6 其它进程
用于运行Oracle服务时的其它后台进程。
3、Oracle Database(数据库)
我们先看两个概念:connection(链接)和session(会话)。一个connection主要是指oracle客户端与后台服务器建立的链接,即客户端与服务器之间的通道。只有当链接建立起来以后,才建立session会话。
从物理结构分析,Oracle Database主要包括三种文件类型:Data files(数据文件)、Control files(控制文件)和Redo Log files(重做日志文件),它们是oracle的核心文件,除此之外还有Parameter file(参数文件)、Archived Log files(归档日志文件)以及Password file(口令文件)等。
3.1 Data files(数据文件)
用于存储数据库数据,它包括数据字典,用户数据,UNDO数据,临时数据等。数据库逻辑上由一个或多个表空间Tablespace组成,而表空间在物理上由一个或多个数据文件组成。
3.2 Control files(控制文件)
用于记录和维护数据库的物理结构。
3.3 Redo Log files(重做日志文件)
用于记录数据库的变化,当例程出现失败或介质失败时可以使用它进行恢复数据库。当DDL或DML时,事务会写到日志缓冲区,在特定时刻会由LGWR将这些日志写入重做日志文件。数据库中至少有两个日志文件,它们是循环使用的。
3.4 Archived Log files(归档日志文件)
它是重做日志的备份,它会保存全部的重做历史记录。
3.5 Password file(口令文件)和Parameter file(参数文件)
口令文件主要用于存放超级用户的口令及其他特权用户的用户名和口令。两个文件都保存在<安装路径>/database文件夹中。
四、Oracle数据库的辑逻结构
Oracle数据库在逻辑上是由许多表空间构成,主要分为系统表空间和非系统表空间。非系统表空间内存储着各项应用的数据、索引、程序等相关信息。
逻辑存储结构主要包括数据块(datablocks),数据区(extents),数据段(segments),表空间(tablespace),这些逻辑结构使Oracle可以精细地控制磁盘空间的使用。
1、表空间
一个数据库被分割为数个被称作表空间(tablespace)的逻辑存储单位,每个表空间内保存的是一组相关的逻辑对象。
每个数据库都在逻辑上被划分为一个或多个表空间。用户需要为每个表空间创建一个或多个数据文件来物理地存储属于此表空间的逻辑对象。一个表空间所有数据文件的大小就是此表空间的可用数据存储量。数据库的数据实际存储在构成各个表空间的数据文件中。
我们准备上线一个较大的Oracle应用系统时,应该创建它所独占的表空间,同时定义物理文件的存放路径和所占硬盘的大小。
数据文件与表空间的关系:
2、段
段是为一个特定逻辑结构分配的一组数据区(extents)。
按照段所存储数据的特征,将段分为四种类型,即数据段、索引段、回退段和临时段。
当一个段内已有的数据区装满之后,Oracle动态地分配新空间。换句话说,段内已有的数据区装满之后,Oracle为这个段分配新的数据区。因为数据区是随需分配的,因此一个段内的数据区在物理上未必是连续的。
段中的数据可以跨多个数据文件,但不能跨多个表空间。
3、数据区
数据区是由一次存储空间分配而获得的数个连续数据块的集合,用于存储信息。
当用户创建数据表时,Oracle为此表的数据段分配一个包含若干数据块的初始数据区。虽然此时数据表中还没有数据,但是在此初始数据区中的数据块已经为插入新数据做好了准备。
如果一个段的初始数据区中的数据块都已装满,且有新数据插入需要空间时,Oracle自动为这个段分配一个增量数据区。增量数据区是一个段中继已有数据区之后分配的后续数据区,它的容量大于或等于之前的数据区。
对于本地管理的表空间,Oracle在为新的数据区寻找可用空间时,首先选择一个属于此表空间的数据文件,再搜索此数据文件的位图查找连续的数据块。如果此数据块中没有足够的连续可用空间,Oracle将查询其他数据文件。
4、数据块
在Oracle数据库中,最精细的数据存储粒度是数据块,一个数据块相当于磁盘上一段连续的物理存储空间。
与数据块对应的,所有数据在操作系统级的最小物理存储单位是字节(byte)。每种操作系统都有一个被称为块容量(block size)的参数。Oracle每次获取数据时,总是访问整数个(Oracle)数据块,而不是按照操作系统块的容量访问数据。
数据块分配的默认容量由初始化参数DB_BLOCK_SIZE决定。除了这个参数,管理员还可以额外设定5个数据块容量参数。Oracle数据库在数据块中分配、利用存储空间。数据块容量应该设为操作系统块容量的整数倍(同时小于数据块容量的最大限制),以便减少不必要的I/O操作。Oracle数据块是Oracle可以使用和分配的最小存储单位。
在Oracle中,不论数据块中存储的是表(table)、索引(index)或簇表(clustered data),其内部结构都是类似的。
段,数据区,数据块之间的关系: