Oracle 11g体系结构
Oracle 11g 体系结构概述
基本概念
数据库database:一个数据集合,数据存放在数据文件中;
实例instance:通俗的讲,实例就是操作数据库的一种手段,也称作服务器,是用来访问数据库文件集的存储结构和后台进程的集合;一个数据库可以被多个实例访问。
体系结构的组成
Oracle数据库
指安装在磁盘上的Oracle数据库文件和相关的数据库管理系统(DBMS)的集合,主要包括以下几种文件:
数据文件(Data files)
控制文件(Control files)
重做日志文件(Redo log files)
初始化参数文件(Paramter file)
口令文件(Password file)
归档重做日志文件(Archived log files)等
Oracle实例
- 实例:是连接库的入口,仅打开并连接至一个数据库,包括后台进程和内存进程;
- 后台进程包括以下几种进程:
a) 数据库写入进程(DBWn)
b) 日志写入进程(LGWR)
c) 日志归档进程(ARCn)
d) 检查点进程(CKPT)
e) 系统监控进程(SMON)
f) 进程监控进程(PMON) - 内存结构组织称为系统全局区(System Global Area,SGA)。SGA是由所有用户进程共享的一块区域。主要包括以下几方面:
a) 数据库缓冲存储区(Database Buffer Cache);
b) 重做日志缓冲区(Redo Log Buffer);
c) 共享池(Shared Pool);
d) Java池(Java Pool);
e) 大型池(Large Pool)等。
Oracle用户环境
- 指用户进程发布并执行SQL语句的用户环境,包括以下三种:
a) 用户进程(User process);
b) 服务器进程(Server process);
c) 程序全局区(Program Global Area,PGA); - 当用户连接到Oracle服务器时,Oracle便创建一个服务器进程与之交互,并代表该用户进程完成与Oracle数据库间的交互;
- 程序全局区PGA是用户专用的内存结构,存储该用户连接期间与SQL语句执行相关的信息。
Oracle 服务器的内存结构
系统全局区(System Global Area,SGA)
一组共享内存结构,用于存放数据库数据和控制信息,以实现对数据库数据的管理和操作。主要包括数据库缓冲存储区、重做日志缓冲区、共享池、大型池、Java池等。
数据库缓冲存储区
- 用于存放最近访问的数据块;
- 大小由初始化参数定义;
- 采用LRU(Least Recently Used,最近最少使用)算法管理数据库缓冲存储区;
重做日志缓冲区
- 用于存放数据进行的所有修改;
- 大小由初始化参数定义;
- 当重做日志缓冲区被添加满时,由日志写入进程把重做日志缓冲区的内容写到磁盘的重做日志文件中保存。
共享池
- 用于存放最近执行的SQL语句(库高速缓存)和数据字典信息(数据字典高速缓存);
- 大小由初始化参数定义,可动态变化;
- 其大小影响数据库的性能。
大型池
- 为大的内存需求提供内存空间;
- 大小由初始化参数LARGE_POOL_SIZE定义。
Java池
- 用于存放Java代码、Java语句的语法分析表、Java语句的执行方案和支持Java程序开发;
- 大小由初始化参数JAVA_POOL_SIZE定义。
程序全局区(Program Global Area,PGA)
指用户进程连接到数据库并创建一个会话时,由oracle服务器进程分配的专门用于当前会话的内存区,该区域是私有的。
排序区
- 存放执行GROUP BY和ORDER BY等包含排序操作所产生的临时数据;
- 大小由初始化参数SORT_AREA_SIZE设置。
会话区
存储该会话所具有的权限、角色、性能统计等信息。
游标状态区
存储用户会话中当前使用的各游标所处的状态。
堆栈区
存储该会话的绑定变量(Bind Variable)和会话变量(Session Variable)及SQL运行时的内存结构信息。
Oracle 服务器的进程结构
用户进程
指当用户运行一个应用程序时建立的一个用户进程。
后台进程
包括为所有数据库用户异步完成各种任务和用于数据库的各种数据操作。
数据库写入进程(DBWn)
- 作用:将已更改的数据块从内存写入数据文件;
- 默认情况下,启动实例时只启动一个数据库写入进程,即DBWO。
日志写入进程(LGWR)
- 将重做日志缓冲区的数据写入重做日志文件中永久保存;
- 是唯一一个能够读/写重做日志文件的进程。
日志归档进程(ARCn)
- 将重做日志的事务变化复制到归档日志文件中;
- 是一个可选进程,默认情况下只有两个归档日志进程(ARC0和ARC1)。
检查点进程(CKPT)
- 作用:发出检查点(Checkpoint),实现同步数据库的数据文件、控制文件和重做日志。
- 是一个可选进程,确保数据文件、控制文件和重做日志文件的一致性。
系统监控进程(SMON)
- 在数据库系统启动时执行恢复工作;
- 合并空间碎片并释放临时段。
进程监控进程(PMON)
- 监控服务器进程的执行,并在服务器进程失败时清除该服务器进程;
- 用于恢复失败的数据库用户的强制性进程;
- 在视图V$BGPROCESS中查询当前启动的后台进程,执行命令:
CONN /@ORCL AS SYSDBA
COLUMN DESCRIPTION FORMAT a30
SET PAGESIZE 200
SELECT PADDR,PSERIAL#,NAME,DESCRIPTION
FROM V$BGPROCESS
ORDER BY NAME;
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
服务器进程
指处理用户进程的请求。主要包括专用服务器模式和共享服务器模式。
专用服务器模式
- Oracle用于支持用户连接的最简单的进程结构;
- 为每一个连接到实例的客户进程启动一个专门的前台服务进程;
- 一般只用在密集的批操作,能让服务器进程大部分时间保持繁忙;
- 当预期客户机连接总数较少,或客户机向服务器发出的请求持续时间较长时,应采用专用服务器模式。
共享服务器模式
- 少数共享服务器进程执行了许多连接客户的数据访问操作,很少的进程开销就可以满足大量的用户群;
- 其组件包括:调度器、共享服务器进程和队列。
Oracle 数据库的物理结构
指实际的数据存储单元,如文件或者数据库等。
以Oracle11g版本为例,文件存放如下所示:
数据文件
- 是物理存储oracle数据库数据的文件;
- 每一个数据文件只与一个数据库相联系;
- 数据文件一旦被建立则不能修改其大小,一般位于目录“ORACLE_BASE\oradata\ORACLE_SID”;
- 一个表空间可以包含一个或多个数据文件。
重做日志文件
- 用于记录所有对数据库数据的修改,以备恢复数据时使用;
- 每一个数据库至少包含两个日志文件组;
- 日志文件组以循环方式进行写操作;日志开关(Log Switch)是为实现日志文件组的循环使用而设置的,出现日志开关的情况如下:
a) 当一个日志文件组被填满;
b) 关闭数据库时候;
c) DBA手动转移日志开关。 日志文件写操作图示:
Oracle数据库运行模式包括归档日志模式和非归档日志模式;
a) 归档日志(ARACHIVELOG)模式
i. 所有的事务重做日志都将保存;
ii. 在一个重做日志被覆盖前为其建立一个副本;
iii. 在重做日志归档工作完成之前,Oracle不对其进行覆盖;
iv. 数据库
b) 非归档日志(NOARACHIVELOG)模式
i. 为系统默认模式;
ii. 系统不保留旧的重做日志;
iii. 有限的恢复能力。
控制文件
- 是一个较小的二进制文件,用于描述数据库结构;
- 描述信息包括以下:
a) 数据库建立的日期;
b) 数据库名;
c) 数据库中所有数据文件和日志文件的文件名及路径;
d) 恢复数据库时所需的同步信息; - 在打开和存取数据库时都要访问该文件;
- 一个实例只能访问一个数据库,通过控制文件在实例和数据库之间建立关联;
- 数据库运行时,控制文件被不断更新。
参数文件
- 一个文本文件,可直接使用操作系统下的文本编辑器对其进行修改;
- 该文件只在建立数据库或启动实例时才能被访问,在修改该文件之前必须关闭实例;
- 作用包括以下:
a) 确定存储结构的大小;
b) 设置数据库的全部缺省值;
c) 设置数据库的范围;
d) 设置数据库的各种物理属性;
e) 优化数据库性能。
口令文件
- 存放具有SYSDBA或SYSOPER权限的用户信息;
- 初始特权用户为SYS。
警告文件
- 由连续的信息和错误信息组成;
- 查看Oracle内部错误也可以监视特权用户的操作;
- 应从文件尾部开始查看。
后台进程跟踪文件
- 用于记载后台进程的警告或错误信息;
服务器进程跟踪文件
- 用于跟踪SQL语句,诊断SQL语句的性能,并做出相应的调整。
Oracle 数据库的逻辑结构
概述
- 数据库的逻辑结构是面向用户的;
- Oracle的逻辑结构由一个或多个表空间组成:
a) 每个表空间(Tablespace)由多个段(Segment)组成;
b) 每个段由多个区间(extend)组成;
c) 每个区间由多个数据块(block)组成;
d) 每个数据库对应多个物理磁盘块。
表空间(Tablespace)
- 是数据库的逻辑组成部分,对应一个或多个数据文件,其大小是所对应数据文件大小的总和;
- 一个Oracle数据库中至少要包含一个SYSTEM表空间和一个SYSAUX表空间;
- 一般还包含数据表空间、索引表空间、临时表空间和UNDO表空间等表空间;
- 一个表空间只能属于一个数据库。
- 系统表空间
a) SYSTEM表空间:每个数据库至少要有一个表空间,即SYSTEM表空间,用于存放系统信息;
b) SYSAUX表空间:从Oracle10g后新增的辅助系统表空间。 - 非系统表空间
a) 撤销表空间UNDOTBS1:用于保存事务回退(Rollback)信息;
b) 用户表空间USERS:用于存放用户的私有信息;
c) 临时表空间TEMP:用于存放临时表和临时数据。 - 表空间的实际应用
a) 建议将不同类型的数据部署到不同的空间,以提高数据访问性能,便于数据管理、备份、恢复等操作;
b) 一个Oracle数据库应用方案应该包括专用的数据表空间、索引表空间和临时表空间;
c) 表空间对应的数据文件分开存储到不同的磁盘上;
d) SYSTEM表空间应该只包含系统数据(比如数据字典)。 - 表空间的状态和工作模式
a) Oracle允许控制基于表空间的数据库数据的可用性,表空间可以是脱机的或联机的;
b) 联机表空间中的数据对用户是可用的;
c) 脱机表空间中的数据对用户是不可用的;
d) 一个新的表空间创建时,总是一个可读写表空间;
e) 当一个表空间的数据不能被改变时(比如数据仓库中的历史数据),可将其设置为只读表空间;
f) 只读表空间能节约数据库备份的时间。
g) 查看表空间的语句
SELECT tablespace_name, block_size, status, segment_space_management
FROM dba_tablespaces;
段(Segment)
- 段由一个或多个区间组成,用于存储特定对象的数据;
- Oracle以区间为单位为端分配空间;
- 段不可以跨空间,一个段只能属于一个表空间;但段可以跨表空间文件;
- 常将各种形式的数据表对应的段称为数据段;
- 一个Oracle数据库中的常见段可归为4种:
a) 数据段
b) 索引段
c) 临时段
d) 回退段 - Oracle提供的段类型:
a) 表:每一个表都有一个数据段,段名即表的名字;
b) 表分区:表数据可分区存储在不同的表空间;
c) 簇:将多个表的数据按照关键字存储在一起;
d) 按索引组织的表:索引关键字和非关键字数据存储在一起;
e) LOB段:为大对象类型(LOB)数据提供的存储字段;
f) 嵌套表:嵌套表的数据存放在单独的嵌套表段中;
g) 索引:存储表表记录关键字及对应记录的ROWID;
h) 索引分区:将索引数据分区,改善对索引的访问性能;
i) 临时段:存放SQL语句操作的数据;
j) 回退段:存放数据更新事务中更新前的数据。
区间(Extent)
- 表空间中的一个连续空间称为区间;
- 区间是Oracle进行空间分配的逻辑单元,是Oracle数据库的最小存储分配单元;
- 一个区间一定属于某个段;
- Oracle根据段的存储特性确定区间的大小;
- 属于段的区间在段删除时才成为自由空间;
- 区间不可以跨数据文件,只能存在于某一个数据文件中。
数据块(Data Block)
- 也称为Oracle块,是Oracle在数据文件上执行I/O操作的最小单位;
- 尺寸为OS磁盘块大小的整数倍,2/4/8/16/32KB;
- 数据块不写满数据;
- 设计策略:以空间换取时间,改善系统性能;
a) 头部:保存数据块的地址、表目录、行目录以及为事务保留的空间;
b) 数据:在数据块的底部;
c) 空闲区:在中间,保留用于以后的数据更新。
数据库结构
Oracle数据库中的数据逻辑存储在表空间中,物理存储在数据文件中。
Oracle 11g 网格基础架构
网格计算能力
服务器虚拟
- 实时应用集群(RAC)可以使一个数据库运行在多个节点上;
- 将多个计算机的处理资源集中使用;
- 跨计算机分配工作负载;
虚拟存储
- 自动存储管理(ASM)提供了数据库和物理存储之间的一个虚拟层;
- 使得多个磁盘可以被看做一个单独的磁盘组,动态加载和移除;
网格管理
- 提供将多系统集成管理为一个逻辑组的控制台;
- 可以管理网格中独立的节点;
- 集中维护各族系统的配置和安全设置。
数据字典
数据库创建期间,Oracle服务器在数据文件中创建两种类型的对象:
数据字典
- 存储数据库自身信息,用于内部系统处理的其他对象和数据库方案对象的定义等信息;
- 这些信息一般是在发布DDL语句后由系统进行维护;
- 是相对静态的信息。
动态性能监测视图
- 名称以V$为前缀,系统管理员用户SYS可以访问;
- 在数据库打开和使用时被不断地进行更新,内容主要与性能有关。
Oracle管理
Oracle环境变量
安装完成后,系统会自动创建一组环境变量:
常用的Oracle服务
OracleDBConsoleorcl
- Oracle数据库控制台服务,orcl是Oracle实例标识,默认的实例为orcl;
- 默认设置为自动启动;
- 在运行Enterprise Manager 11g时,需启动此服务,
OracleJobSchedulerORCL
- Oracle作业调度运行,orcl是Oracle实例标识,默认的实例为orcl;
- 默认设置为禁用;
OracleOraDb11g_home1TNSListener
- 监听器服务,只有在数据库远程访问时才需要;
- 默认设置为自动启动。
OracleServiceORCL
- 数据库服务,会自动地启动和停止数据库,ORCL是Oracle实例标识;
- 默认设置为自动启动。
OracleOraDb11g_home1ClrAgent
- Oracle客户端服务;
- 默认设置为自动启动;
数据库默认用户
在创建Oracle数据库时,以下用户被自动创建:
1. SYS:系统用户,数据字典所有者,超级权限所有者(SYSDBA);
2. SYSTEM:数据库默认管理用户,拥有DBA角色权限;
3. SCOOT:实验、测试用户;
4. DBSNMP:具有CONNECT\RESOUCEHE\SNMPAGENT权限的角色;
5. SYSMAN:企业管理器账户。
数据库的启动
启动过程
1) 启动实例:包括读取参数文件,分配SGA,启动后台进程;
2) 装载数据库:将数据库与已启动的实例相联系。数据库装载后,数据库保持关闭状态;
3) 打开数据库:使数据库可以进行正常的操作处理,主要是打开控制文件、数据库文件和日志文件。
启动参数
- nomount:只启动实例,不装载数据库;通过start nomount实现;
- mount:启动实例,并装载数据,但不打开数据库;通过start mount实现;
- read only:设置数据库为只读,通过alter database open read only实现,前提是已经启动实例并装载数据;
- read write:以可读写方式打开数据,通过alter database open read write实现,这是默认方式,前提是已经启动实例并装载数据;
- open:打开数据库,通过alter database open实现,这是默认方式,前提是已经启动实例并装载数据;
- restrict:以受限方式打开,只有具有RESTRICTED SESSION权限的用户才可以连接数据库,通过startup restrict实现;
- pfile:启动指定参数文件,通过“startup pfile=文件名” 实现;
- force:以强制方式启动数据库,通过“startup pfile=文件名 open restrict force”实现。
数据库的关闭
关闭过程
- 关闭数据库;
- 卸载数据库;
- 关闭数据库实例;
关闭参数
使用shutdown命令,该命令有四个参数:
1. normal:需要等待所有的用户断开连接,执行该命令后不允许新的连接,这是默认方式;
2. immediate:在用户执行完正在执行的语句后就断开用户连接,并不允许新用户连接;
3. transactional:在用户执行完当前事务后断开连接,并不允许新用户连接;
4. abort:不做任何等待,直接关闭数据库。
禁止/暂停/恢复数据库
- 将数据库置为停顿状态,通过“alter system quiesce restricted;”实现;
- 将数据库还原为normal状态,通过”alter system unquiesce;”实现;
- 查看实例的操作状态,通过”select active_state from v$instance;”实现;
- 暂停数据库,通过”alter system suspend;”实现;
- 恢复数据库,通过”alter system resume;”实现;