搜档网
当前位置:搜档网 › OCP认证考试指南(1Z0-053)数据库架构和ASM

OCP认证考试指南(1Z0-053)数据库架构和ASM

第1章

数据库体系结构和ASM

认证目标

●了解数据库体系结构和ASM

●描述ASM

●为ASM和数据库实例设置初始化参数文件

●启动和关闭ASM实例

●管理ASM磁盘组

2

OCP认证考试指南(1Z0-053):Oracle Database 11g Administration II

ASM(Automatic Storage Management,自动存储管理)是一项十分重要的Oracle数据库技术,它适用于各种环境,甚至适用于仅有一个数据库和一个数据库实例的环境。通过集成服务器文件系统和Oracle数据库文件专用的卷管理器,磁盘管理和调整成为一项轻松愉悦的任务:ASM 会对每个文件对象实施条带化和镜像化处理来优化性能。此外,可在卷联机时完成几乎所有ASM卷管理任务,例如在用户访问某个卷时,将此卷扩展或移至另一磁盘上,而这几乎不影响性能。ASM集群的多路复用功能通常比手动将重要文件和备份保存在不同物理磁盘的做法更高效,并且最大限度地减少了丢失数据的可能性。还可使用一个ASM实例及对应的磁盘组服务多个数据库实例,以尽量压缩磁盘硬件方面的投资。

在详细阐释ASM的工作原理以及如何在您的环境中使用ASM前,本章简要介绍了Oracle 数据库体系结构,包括实例内存结构、逻辑数据库结构和物理数据库结构。为了全面了解和领会ASM的工作原理,需要透彻了解Oracle数据库体系结构,如果尚未通过学习前面的课程做到这一点,可通过本课程弥补不足之处。

描述ASM工作原理后,本章介绍如何设置ASM实例及其关联的磁盘组和所需的初始化参数。启动和关闭ASM实例与启动和关闭数据库实例的做法是相似的,仅有几处主要差别。

最后介绍几个典型的ASM管理场景,包括添加磁盘组、删除磁盘组和重新平衡磁盘组。1.1 了解数据库体系结构和ASM

在具体了解ASM之前,需要透彻地了解Oracle数据库及其相关联的内存和进程结构。本节首先介绍Oracle物理存储结构,包括数据文件、控制文件、重做日志文件和归档重做日志文件,以及运行Oracle数据库需要的非数据库文件,如初始化文件和日志文件。本节接着介绍Oracle实例中的重要内存结构,最后分析物理存储结构与内存结构之间的关系。

1.1.1 Oracle逻辑存储结构

Oracle数据库中的数据文件被组合成一个或多个表空间。数据文件是物理结构,可进而分成区间和块。一个表空间有点像一组数据文件的逻辑包装器。表空间包含粒度更小的逻辑数据库结构,如表和索引。使用的另一个术语是段,在Oracle数据库中,此术语用来描述表或索引占用的物理空间。Oracle数据库的条块划分方式允许更高效地控制磁盘空间的使用。图1-1显示数据库中逻辑存储结构之间的关系。

1. 表空间

Oracle表空间由一个或多个数据文件组成;数据文件必须正好是一个表空间的一部分。

Oracle 11g的安装会至少创建两个表空间:SYSTEM和SYSAUX表空间。Oracle 11g的默认安装创建6个表空间。

Oracle 11g(以及原来的Oracle 10g)允许创建名为“大文件表空间”的特殊类型的表空间,此表空间的大小可达128TB(百万兆字节)。使用大文件后,表空间管理对于数据库管理员(DBA)完全透明;也就是说,DBA可将表空间作为一个单元进行管理,而无需考虑底层数据文件的大小和结构。

第1章 数据库体系结构和ASM 3 数据库

区间1

区间2

块 表空间

段1

SYSTEM 表空间 USERS 表空间 SYSAUX 表空间

段3

段5 段2 段4 段6

图1-1 逻辑存储结构

使用Oracle 管理文件(Oracle Managed Files ,OMF),管理表空间数据文件将变得更容易。有了OMF ,DBA 在文件系统中指定保存数据文件、控制文件和重做日志文件的一个或多个位置,Oracle 会自动处理这些文件的命名和管理。

如果表空间是临时的,只是表明表空间中保存的段是临时的,而表空间本身是永久的。可将临时表空间用于排序操作和仅在用户会话期间存在的表,为这些操作类型专门指定表空间有助于减少临时段和另一个表空间中存储的永久段(如表)的I/O 争用。

表空间可以是字典管理的表空间或本地管理的表空间。在字典管理的表空间中,会将区间管理记录在数据字典表中。因此,即使所有应用程序表在USERS 表空间中,仍然是访问SYSTEM 表空间来管理应用程序表上的数据操作语言(Data Manipulation Language ,DML)。由于所有用户和应用程序必须使用SYSTEM 表空间来管理区间,对于密集执行写操作的应用程序而言,这成为一个潜在的瓶颈。而在本地管理的表空间中,Oracle 在表空间的每个数据文件的头中维护一个位图来跟踪空间可用性。只在数据字典中管理配额,这极大地降低了数据字典表的争用率。

从Oracle 9i 开始,如果在本地管理SYSTEM 表空间,那么,如果要在其他所有表空间上同时执行读写操作,则必须在本地管理这些表空间。在本地管理SYSTEM 表空间的情况下,数据库中字典管理的表空间必须是只读的。

2. 块

数据库块是Oracle 中的最小存储单元。块的大小是数据库给定表空间中的特定存储字节数。

为了提高磁盘I/O 性能效率,Oracle 块的大小通常是操作系统块大小的倍数。默认块大小由Oracle 初始化参数DB_BLOCK_SIZE 指定。大多数操作系统允许在数据库的其他表空间中

4

OCP认证考试指南(1Z0-053):Oracle Database 11g Administration II

定义另外4种块大小。一些高端操作系统允许使用5种块大小。SYSTEM、SYSAUX和任何临时表空间中的块大小必须是DB_BLOCK_SIZE。

3. 区间

区间是下一个级别的数据库逻辑分组。一个区间由一个或多个数据库块组成。扩大数据库对象时,为对象添加的空间作为区间进行分配。Oracle在数据文件级别管理区间。

4. 段

下一个逻辑分组级别是段。段是一组区间,这些区间形成Oracle视为一个单元的数据库对象,如表或索引。因此,段通常是数据库最终用户将要处理的最小存储单元。Oracle数据库中的4种段类型是:数据段、索引段、临时段和撤消段。

数据库中的每个表保存在单个数据段中,一个数据段由一个或多个区间组成;对于分区表或集群表,Oracle会为表分配多个段。数据段包括LOB(large object,大对象)段,此段存储表段中的LOB定位器列引用的LOB数据(如果未将LOB以内联方式存储在表中)。

每个索引存储在自己的索引段中。与分区表一样,分区索引的每个分区存储在专门的段中。

这种类别包括LOB索引段。表的非LOB列、表的LOB列和LOB的相关索引均可以保存在不同的表空间(不同的段)中以提高性能。

如果用户的SQL语句需要磁盘空间来完成操作,例如内存中容纳不下的排序操作,Oracle 会分配临时段。仅在执行SQL语句期间存在临时段。

从Oracle 10g开始,只有SYSTEM表空间中存在手动回滚段,但DBA通常无需维护SYSTEM 回滚段。在前一Oracle版本中,会创建回滚段,以便在回滚事务时保存数据库DML操作的旧值,并维护“旧”映像数据,以便为其他访问此表的用户提供表数据的读一致性视图。在恢复数据库期间,为了回滚在数据库实例崩溃或异常终止时处于活动状态的未提交事务,也会使用回滚段。

在Oracle 10g中,自动撤消管理处理撤消表空间中的回滚段的自动分配和管理。在撤消表空间中,撤消段的结构与回滚段类似,只是这些段的管理细节由Oracle控制,而非由DBA管理(这样做效率通常不高)。从Oracle9i开始使用自动撤消管理,但在Oracle 10g中仍然可以使用手动管理的回滚段。但是,从Oracle 10g开始不赞成使用此手动功能,在未来版本中,不再使用此功能。在Oracle 11g中,会默认启用自动撤消管理;另外,提供了PL/SQL(Procedural Language/Structured Query Language,过程语言/结构化查询语言)过程来帮助调整UNDO表空间的大小。

提示:

如果开始使用Oracle Database 11g,您真正需要了解的是:手动回滚是多余的,

在未来版本中会予以取消。另外,自动撤消管理是Oracle Database 11g的一项

标准功能。

1.1.2 Oracle物理存储结构

Oracle数据库使用磁盘上的多个物理存储结构来保存和管理用户事务的数据。其中的一些存储结构,如数据文件、重做日志文件和归档重做日志文件保存真正的用户数据。而其他一些

第1章 数据库体系结构和ASM 5

结构,如控制文件,则维护数据库对象的状态。基于文本的警报和跟踪文件包含数据库中的例行事件和错误条件的记录信息。图1-2显示这些物理结构与逻辑存储结构(见“Oracle 逻辑存储结构”一节)之间的关系。

1. 数据文件

Oracle 数据库至少必须包含一个数据文件。一个Oracle 数据文件对应于磁盘上的一个物理操作系统文件。Oracle 数据库中的每个数据文件正好是一个表空间的成员。但是,一个表空间可以包含多个数据文件。大文件表空间是例外情况,这个表空间正好包含一个数据文件。 内存结构

后台进程

数据库

归档重做日志文件

重做日志文件 控制文件 数据文件 数据文件3 数据文件2 数据文件1 数据文件4

SYSAUX

表空间

USERS 表空间 SYSTEM

表空间 数据库

物理数据库结构

实例 逻辑数据库 结构

图1-2 Oracle 物理存储结构

如果DBA 使用AUTOEXTEND 参数创建数据文件,那么在空间不足的情况下,Oracle 数据文件可以自动扩展。DBA 还可以使用MAXSIZE 参数来限制给定数据文件的扩展量。在任一情况下,数据文件的大小最终都会受到其所在的磁盘容量大小的限制。

数据文件是数据库中所有数据的最终栖息之地。数据文件中频繁访问的块都会缓存到内存中。同样,新数据块并非直接写入数据文件,而是根据数据库写入器进程的激活时间写入到数据文件中。在用户事务完成前,会将事务的更改写入重做日志文件。

6

OCP认证考试指南(1Z0-053):Oracle Database 11g Administration II

2. 重做日志文件

每次在表、索引或其他Oracle对象中添加、删除或更改数据时,都会将一个条目写入当前的重做日志文件中。由于Oracle以循环方式重用重做日志文件,Oracle数据库至少必须有两个重做日志文件。在一个重做日志文件填满重做日志条目时,如果实例恢复仍需要使用此当前日志文件,就将此文件标记为ACTIVE;如果实例恢复不需要此文件,就将其标记为INACTIVE。

接着会按顺序从头使用下一个日志文件,并将此文件标记为CURRENT。

在理想状况下,永远都不会使用重做日志文件中的信息。但是,如果发生了停电故障或其他一些服务器故障,从而导致Oracle实例失败,那么数据库缓冲区缓存中的新数据块或更新的数据块可能尚未写入到数据文件中。重新启动Oracle实例时,会在前滚操作中将重做日志文件中的条目应用于数据库数据文件,以便将数据库的状态恢复到发生故障时的状态。

为了能够在一个重做日志组的一个重做日志文件丢失时执行恢复,可以在不同的物理磁盘上保存重做日志文件的多个副本。您将在本章后面了解到,可以实现重做日志文件、归档日志文件和控制文件的多路复用,以便确保Oracle数据库的可用性和数据完整性。简而言之,多路复用的意思是拥有多个结构副本,以便提高性能和可用性。

3. 控制文件

Oracle数据库至少有一个控制文件,此文件维护数据库的元数据。元数据是数据库本身的物理结构(表和字段定义)的数据。除其他外,控制文件还包含数据库名称、创建数据库的时间,以及所有数据文件和重做日志文件的名称和地址。另外,控制文件维护恢复管理器(Recovery Manager,RMAN)使用的信息,如持久性RMAN设置以及数据库上已经执行的备份类型。每当数据库结构发生任何改动时,更改信息会立即在控制文件中反映出来。

由于控制文件对数据库的运行如此重要,因此也可以对控制文件进行多路复用(可以复制一个或多个控制文件)。但是,无论有多少个控制文件的副本与一个实例相关,都只有一个控制文件主要用于检索数据库元数据。

ALTER DATABASE BACKUP CONTROLFILE TO TRACE命令是另一种备份控制文件的方式。它生成SQL脚本,如果由于发生了灾难性故障造成控制文件的所有多路复用二进制版本丢失,则可以使用此脚本来重新创建数据库控制文件。

还可以使用此跟踪文件在以下情况下重新创建控制文件:需要重命名数据库,或更改各种数据库限制(如果不重新创建整个数据库,不能以其他方式更改)。

4. 归档日志文件

Oracle数据库可按以下两种模式运行:ARCHIVELOG或NOARCHIVELOG模式。如果数据库处于NOARCHIVELOG模式,则循环重用重做日志文件(又称联机重做日志文件)将意味着,在出现硬盘故障或其他与介质相关的故障时,重做条目(以前事务的内容)不再可用。以NOARCHIVELOG模式运行可以在实例发生故障或系统崩溃时保护数据库的完整性,因为只能在联机重做日志文件中使用已经提交但尚未写入数据文件的所有事务。因此,崩溃恢复的范围仅限于联机重做日志中的当前条目。如果在最早的重做日志文件之前数据文件最近一次备份发生故障,将无法恢复数据库。

与此相反,ARCHIVELOG模式将填满的重做日志文件发送到一个或多个指定目标,可以

第1章数据库体系结构和ASM 7 在数据库介质发生故障时,在任何特定的时间点使用备份文件重新构造数据库。例如,如果包

含数据文件的硬盘发生崩溃,有了最新的备份数据文件、重做日志文件和归档日志文件(在备

份后生成),可将数据库的内容恢复到崩溃前的一个时间点。

为填满的重做日志文件使用多个归档日志目标对于Oracle中名为Oracle Data Guard(以前

称为Oracle Standby Database)的高可用性功能至关重要。

5. 初始化参数文件

启动数据库实例时,会为Oracle实例分配内存,并会打开两类初始化参数文件中的一个:

基于文本的文件init.ora(通常称为init.ora或PFILE)或服务器参数文件(SPFILE)。实例首

先在操作系统的默认位置(例如,Unix上的$ORACLE_HOME/dbs)查找SPFILE文件spfile.ora或spfile.ora。如果这些文件都不存在,实例会查找名为init.ora的PFILE。

另外,STARTUP命令可显式指定在启动Oracle时使用的PFILE。

无论采用哪种格式,初始化参数文件都指定跟踪文件、控制文件和填满的重做日志文件等

的位置。它们还设置系统全局区域(System Global Area,SGA)中各种结构的大小,以及允许多

少用户同时连接到数据库。

一直到Oracle9i,只能使用init.ora文件来指定实例的初始化参数。虽然可以使用文本编辑

器方便地进行编辑,但是此文件存在一些缺点。如果在命令行使用ALTER SYSTEM命令更改

动态系统参数,DBA必须记住更改init.ora文件,以便下次重新启动实例时新参数值可以生效。

SPFILE使DBA可以更方便高效地管理参数。如果运行的实例正在使用SPFILE,那么,

如果任何ALTER SYSTEM命令更改初始化参数,将自动更改SPFILE中的初始化参数(可以仅

针对运行的实例,也可能针对两者)。无需编辑SPFILE文件,甚至也无法对其进行编辑(否则

会损坏SPFILE)。

虽然本质上无法对参数文件或SPFILE进行镜像操作,但可将SPFILE备份为init.ora文件。应该使用传统的操作系统命令备份Oracle实例的init.ora和SPFILE(对于SPFILE,可以使用恢

复管理器)。

使用DBCA(Database Configuration Assistant,数据库配置助手)工具来创建数据库时,会默

认创建SPFILE。

6. 警报和跟踪日志文件

出现故障时,Oracle可以而且经常会将消息写入到警报日志文件,对于后台进程或用户会话,则会写入跟踪日志文件。

警报日志文件位于BACKGROUND_DUMP_DEST初始化参数指定的目录中,包含最重要

的例行状态消息以及重要错误条件。在启动或关闭数据库时,会将消息以及一系列未采用默认

值的初始化参数记录到警报日志中。还会记录DBA发送的任何ALTER DATABASE或ALTER SYSTEM命令。此处还会记录涉及表空间及其数据文件的操作,例如,添加表空间、删除表空

间以及将数据文件添加到表空间中。错误条件,例如表空间的空间不足或日志文件受损等(这

些都是重要条件)也会记录在此处。

Oracle实例后台进程的跟踪文件也位于BACKGROUND_DUMP_DEST中。例如,PMON(process monitor,进程监视器)和SMON(system monitor,系统监视器)的跟踪文件包含错

误发生时间的条目,或SMON需要执行实例恢复操作的时间的条目。QMON(queue monitor,

8

OCP认证考试指南(1Z0-053):Oracle Database 11g Administration II

队列监视器)的跟踪文件包含何时产生新进程的消息。

也为各个用户会话或数据库连接创建跟踪文件,这些跟踪文件位于初始化参数USER_ DUMP_DEST指定的目录中。在两种情况下为用户进程创建跟踪文件:由于权限问题,用户会话发生了一些类型的错误或用户进程的运行空间不足。也可以使用以下的命令显式创建跟踪文件:

ALTER SESSION SET SQL_TRACE=TRUE;

为用户执行的每条SQL语句生成跟踪信息,在调整用户的SQL语句时,跟踪信息会起到帮助作用。

可以随时删除或重命名警报日志文件;下次生成警报日志消息时会重新创建此文件。DBA 经常通过操作系统机制(Oracle Database内部调度机制)或Oracle Enterprise Manager的调度程序,设置一项日常批处理作业,在日常工作中重命名和归档警报日志。

从Oracle Database 11g第1版开始,实例的诊断信息被集中到初始化参数DIAGNOSTIC_ DEST指定的单个目录中,并且忽略USER_DUMP_DEST和BACKGROUND_DUMP_DEST。

7. 备份文件

可以从多个来源,例如操作系统复制命令或Oracle RMAN生成备份文件。如果DBA执行冷备份,那么备份文件只是数据文件、重做日志文件、控制文件和归档重做日志文件等的操作系统副本。

除了数据文件的逐位映像副本(RMAN的默认操作)外,RMAN可以生成数据文件、控制文件、归档重做日志文件和特殊格式的SPFILE的完整和增量备份,称为备份集,备份集仅供RMAN读取。RMAN备份集备份通常比原始的数据文件小,因为RMAN不备份未使用过的块。

RMAN是管理备份和恢复的标准,但在RMAN备份处理会对性能产生有害影响的情况下除外。

1.1.3 Oracle内存结构

Oracle使用服务器的物理内存来保存Oracle实例的很多信息:Oracle可执行代码本身、会话信息、与数据库关联的各个进程以及进程之间共享的信息(例如数据库对象上的锁)。另外,内存结构包含用户和数据字典SQL语句,以及最终永久存储在磁盘上的缓存信息,如数据库段中的数据块以及有关数据库中已完成事务的信息。为Oracle实例分配的数据区域称为系统全局区(System Global Area,SGA)。Oracle可执行文件位于软件代码区域。另外,称为程序全局区(Program Global Area,PGA)的区域专供每个服务器和后台进程使用;为每个用户会话或服务器进程分配一个PGA。

图1-3显示这些Oracle内存结构之间的关系。

1. 系统全局区

SGA是Oracle实例的一组共享内存结构,由数据库实例的多位用户共享。启动Oracle实例时,会根据初始化参数文件中指定的值或Oracle软件中的硬编码为SGA分配内存。用于控制SGA各个部分大小的很多参数是变化的;但是,如果指定SGA_MAX_SIZE参数,所有SGA 区域的总大小就不得超过SGA_MAX_SIZE的值。如果未指定SGA_MAX_SIZE,但指定了SGA_TARGET参数,Oracle会自动调整SGA组件的大小,以便分配的内存总量等于

第1章 数据库体系结构和ASM 9

SGA_TARGET 。SGA_TARGET 是一个动态参数,可在实例运行时更改。Oracle 11g 中引入的新参数MEMORY_TARGET 在SGA 和PGA 之间平衡Oracle 的所有可用内存,以便优化性能。

SGA 中的内存按粒度单元分配。粒度可以是4MB 或16MB ,具体取决于SGA 的总大小。如果SGA 小于等于128MB ,则粒度是4MB ;否则粒度是16MB 。随后的几个小节将介绍Oracle 如何使用SGA 中的每个部分的要点。

KEEP 缓冲区池 RECYCLE 缓冲区池 数据库缓冲区缓存

(默认大小) 数据库缓冲区缓存(大小nk)

数据库缓冲区缓存(大小nk)

流池

重做日志缓冲区缓存 大池

Java 池

软件代码区

共享池 保留的池

库缓存 共享的SQL 区域 PL/SQL 过程和包

数据字典缓存 控制结构

固定SGA 排序、散列、归并区域

会话信息 栈空间 PGA

非共享内存 共享内存 SGA

图1-3 Oracle 逻辑内存结构

缓冲区缓存(Buffer Cache) 数据库缓冲区缓存保存最近从磁盘读取的用于满足SELECT 语句要求的数据块,或包含已修改块(已经从DML 语句更改或添加)的数据块。从Oracle9i 开始,SGA 中保存这些数据块的内存区域是动态的。这是一件好事,假如数据库的多个表空间的块大小不是默认块大小。Oracle 允许表空间最多使用5种不同的块大小(一种块大小是默认的,其余类型的最多有4种)。每个块大小都需要自己的缓冲区缓存。如果一天或一周中处理和事务需求发生了变化,将可以动态更改DB_CACHE_SIZE 和DB_n K_CACHE_SIZE 的值而无需重新启动实例,以便提高使用给定块大小的表空间的性能。

Oracle 可以使用其他两种块大小与默认块大小(DB_CACHE_SIZE)相同的缓存:KEEP 缓冲区池和RECYCLE 缓冲区池。从Oracle9i 开始,这两个池都独立于SGA 中的其他缓存分配内存。

创建表时,可以通过在STORAGE 子句中使用BUFFER_POOL_KEEP 或BUFFER_POOL_ RECYCLE 子句,来指定表的数据块将要驻留的池。对于整天频繁使用的表,有利的做法是将表放在KEEP 缓冲区池中,以尽量减少检索表中的块需要的I/O 数量。

共享池(Shared Pool) 共享池包含两个主要的子缓存:库缓存和数据字典缓存。共享池的

10

OCP认证考试指南(1Z0-053):Oracle Database 11g Administration II

大小由SHARED_POOL_SIZE初始化参数确定。只要SGA总大小小于SGA_MAX_SIZE或SGA_TARGET,这便是另一种可以调整大小的动态参数。

库缓存保存有关针对数据库运行的SQL和PL/SQL语句的信息。库缓存由所有用户共享,所以不同数据库用户可能共享同一SQL语句。

SQL语句及其执行计划存储在库缓存中。当同一用户或另一用户第二次运行同一SQL语句时,由于已经计算出执行计划,查询或DML语句的执行效率将会提高。

如果库缓存过小,则可以将频繁使用的执行计划转出缓存,只需频繁地将SQL语句重新加载到库缓存中。

数据字典是数据库表的集合,归SYS和SYSTEM模式所有,其中包含有关数据库、数据库结构以及数据库用户权限和角色的元数据。数据字典缓存保存第一次将数据字典表读入缓冲区缓存后数据字典表的列的子集。连续使用数据字典中的表的数据块,以便帮助处理用户查询和其他DML命令。

如果数据字典缓存过小,在请求数据字典中的信息时,会引发附加的I/O操作;这些与I/O 相关的数据字典请求称为“递归调用”,可通过正确设置数据字典缓存的大小来避免“递归调用”。

重做日志缓冲区重做日志缓冲区包含数据文件中的数据块的最新更改信息。如果重做日志缓冲区的满度达到1/3(或每隔3秒),Oracle会将重做日志记录写入到重做日志文件中。另外,从Oracle Database 10g开始,如果已将1MB重做信息存储在重做日志缓冲区中,Log Writer(日志写入器,LGWR)进程会将重做日志记录写入到重做日志文件中。一旦将重做日志缓冲区中的条目写入重做日志文件,那么,如果在将更改后的数据块从缓冲区缓存写入数据文件前实例发生了崩溃,这些条目对恢复数据库会起到至关重要的作用。在将重做日志条目成功写入重做日志文件后,才认为用户提交的事务是完整的。

大池(Large Pool) 大池是SGA中的可选区域。它用于与多个数据库交互的事务、执行并行查询的进程的消息缓冲区,以及RMAN并行备份和还原操作。顾名思义,大池使需要每次分配大内存块的操作可以使用大内存块。

从Oracle9i第2版开始,初始化参数LARGE_POOL_SIZE控制大池的大小,该参数是一个动态参数。

Java池(Java Pool) Oracle JVM(Java Virtual Machine,Java虚拟机)为用户会话中的所有Java代码和数据使用Java池。在Java池中存储Java代码和数据与在共享池中缓存SQL和PL/ SQL代码是相似的。

流池(Streams Pool) 流池是Oracle 10g中的一种新池,通过初始化参数STREAMS_ POOL_SIZE来设置其大小。流池保存数据和控制结构,以便支持Oracle Enterprise Edition的Oracle流功能。Oracle流管理分布式环境中数据和事件的共享。如果未初始化STREAMS_ POOL_SIZE初始化参数或将其设置为0,则从共享池分配流操作使用的内存,内存占用量最多可达共享池的10%。

2. 程序全局区

PGA(Program Global Area,程序全局区)专门用于一组相互联系的进程,是自行分配动态部分的内存区域。PGA的配置取决于Oracle数据库的连接配置:共享服务器或专用服务器。

在共享服务器配置中,多个用户共享与数据库的连接,此时,对服务器的内存使用量降至

第1章数据库体系结构和ASM 11 最低,但用户请求的响应时间可能受到影响。在共享服务器环境中,SGA(而非PGA)保存用户

的持久会话信息。如果同时有大量用户连接到数据库,请求频率高且时间短,那么共享服务器

环境就是理想环境。

在专用服务器环境中,每个用户进程独自连接到数据库,PGA中包含此配置的会话信息。PGA中还包含一个排序区域,如果用户请求需要排序、位图归并或散列连接操作,将使用此

区域。

从Oracle9i开始,PGA_AGGREGA TE_TARGET参数连同WORKAREA_SIZE_POLICY初

始化参数一起允许DBA选择所有工作区的总大小,并使Oracle在所有用户进程间分配和管理

内存,以此来简化系统管理工作。如本章前面所述,MEMORY_TARGET参数从总体上管理PGA和SGA内存以便优化性能,该参数可以帮助从总体上管理PGA和SGA的大小调整。简

而言之,PGA在Oracle9i中实现了自动化,而SGA在10g中实现了自动化。现在到了11g时代,SGA和PGA作为一个整体实现了自动化。即使经验丰富的DBA也会发现,使用自动化

的内存结构,可以更有效地管理内存分配。

3. 软件代码区

软件代码区存储作为Oracle实例一部分运行的Oracle可执行文件。这些代码区域本质是

静态的,只有在安装新软件版本时才会发生变化。Oracle软件代码区通常位于享有特权的内存区,此内存区与其他用户程序分开放置。

Oracle软件代码完全是只读的,可按共享或不共享形式进行安装。如果以共享形式安装Oracle软件代码,当多个Oracle实例在同一软件版本级别和相同服务器上运行时,可以节省

内存。

4. 后台进程

启动Oracle实例时,会启动多个后台进程。后台进程是一个用于执行特定任务的可执行代

码块。图1-4显示后台进程、数据库和Oracle SGA之间的关系。与前台进程(如SQL*Plus会话

或Web浏览器)形成对照,后台进程在后台运行。SGA与后台进程共同构成了Oracle实例。

SMON 如果由于断电或CPU故障导致系统崩溃或实例故障,SMON(system monitor,系

统监视器)进程通过将联机重做日志文件中的条目应用于数据文件,在崩溃后执行恢复。另外,

在重新启动系统时,会清除所有表空间中的临时段。

如果表空间由字典管理,SMON的一个例行任务是定期组合表空间中的可用空间(在Oracle

11g数据库中,这种情况很少出现或根本不存在)。

PMON 如果用户连接断开或用户进程失败,PMON(process monitor,进程监视器)将执行

清理工作。它清除数据库缓冲区缓存以及用户连接曾使用的其他任何资源。例如,假如一个用

户进程正在更新一个表中的一些行,在一行或多行上设置了锁。用户桌面突然断电,在工作站

断电时SQL*Plus会话消失。PMON会在数毫秒内检测到连接不再存在,并执行以下任务:

●回滚断电时正在进行的事务。

●在缓冲区缓存中将事务的块标记为可用。

●从表中受影响的行上删除锁。

●从一系列活动进程中删除断开连接的进程的进程ID。

OCP认证考试指南(1Z0-053):Oracle Database 11g Administration II

12

用户进程

用户进程

系统全局区

脱机存

储设备

恢复进程

进程监视器系统监视器检查点

归档进程

数据库写入器日志写入器调度程序进程

用户进程

共享服务

器进程

专用服务

器进程

数据库缓冲区缓存

重做日志

缓冲区

图例:

控制

文件

重做日

志文件

数据

文件

图1-4 Oracle后台进程

PMON通过提供有关传入连接请求的实例的状态信息与监听器进行交互。

DBW n 早期Oracle版本的数据库写入器(database writer,DBWR)进程将缓冲区缓存中的新数据块或更改过的数据块(称为脏块)写入到数据文件中。使用LRU(Least Recently Used,最近最少使用)算法,DBWn首先写入时间最早、活动性最差的块。结果,最常请求的块(即使是脏块)会在内存中。

最多可以启动20个DBWn进程,DBW0到DBW9和DBWa到DBWj。DBWn进程的数量由DB_WRITER_PROCESSES参数控制。

LGWR LGWR(Log Writer,日志写入器)负责管理重做日志缓冲区。在DML活动频繁的实例中,LGWR是活动最密集的进程之一。在LGWR将重做信息(包括提交记录)成功写入重做日志文件后,才认为事务已经完成。另外,在LGWR写入重做信息后,DBWn才能将缓冲区缓存中的脏缓冲区写入数据文件中。

如果将重做日志文件分组,而且一个组中的多路复用重做日志文件受损,LGWR会写入到组中的其余成员中,并在警报日志文件中记录错误。如果组中所有成员均不可用,将造成LGWR 进程失败,在更正问题前,整个实例将挂起。

ARC n 如果数据库处于ARCHIVELOG模式,那么,归档程序进程(archiver process,ARCn)会在重做日志填满然后开始将重做信息顺序填充到下一个重做日志中时,将重做日志复制到一个或多个目标目录、设备或网络位置。理想情况下,归档进程会在归档下一个填满的重做日志前完成。否则会发生严重的性能问题:在条目写入重做日志文件前,用户无法完成事务,而重

第1章数据库体系结构和ASM 13 做日志文件无法接受新条目,因为正在将其写入到归档位置。至少可以采用3种可能解决该问

题的方案:增加重做日志文件的大小、增加重做日志组的数量和增加ARCn进程的数量。通过

增加LOG_ARCHIVE_MAX_PROCESSES初始化参数的值,可以为每个实例启动更多ARCn

进程,启动的ARCn进程的最大数量是10个。

CKPT 检查点(checkpoint process,CKPT)进程有助于减少恢复实例的用时。执行检查点

期间,CKPT更新控制文件和数据文件的头,以便反映最后的成功系统更改编号(System Change Number,SCN)。每次填满一个重做日志文件,Oracle开始循环填充下一个日志文件时,会自

动执行检查点操作。

DBWn进程不时写入脏缓冲区,以便前移作为恢复实例开始位置的检查点,减少平均恢复

时间(Mean Time to Recovery,MTTR)。

RECO 恢复程序进程(recoverer process,RECO)处理分布式事务(更改多个数据库的表)的

故障。如果CCTR(contact center,联系中心)数据库中的一个表以及WHSE(数据仓库)数据库中

的一个表都发生了变化,而且数据库之间的网络连接在更新WHSE数据库的表之前出现故障,

那么,RECO将回滚此失败事务。

1.2 描述ASM

ASM是一个多路复用解决方案,它通过将数据文件、控制文件和重做日志文件分布在多

个可用的磁盘上来自动布置这些文件。在将新磁盘添加到ASM集群中时,将自动在所有磁盘

卷上重新分布数据库文件来提高性能。ASM集群的多路复用功能最大程度地减少了丢失数据

的可能性,通常比手工方案(将重要文件和备份文件放在不同物理磁盘上)更高效。ASM磁盘的

一个重要组件是磁盘组,磁盘组是多个磁盘的集合,由ASM作为一个单元进行管理。

在创建新的表空间或其他数据库结构(如控制文件或重做日志文件)时,可以将磁盘组(而不

是操作系统文件)指定为数据库结构的存储区域。ASM具有OMF的易用性,并将OMF与镜像

和条带化功能组合在一起以提供可靠的文件系统和逻辑卷管理器,ASM甚至可以在Oracle RAC(Real Application Cluster,真实应用程序集群)中支持多个节点。有了ASM,将无需购买第

三方逻辑卷管理器。

ASM不仅通过将数据库对象自动分布在多个设备上来提高性能,还由于允许可在不关闭

数据库的情况下将新磁盘设备添加到数据库而拥有提高可用性的能力;几乎不需要干预,ASM

就可以自动地重新分布文件以达到平衡目的。

以下各节介绍ASM体系结构,讨论如何创建特殊类型的Oracle实例来支持ASM,以及如

何启动和关闭ASM实例。

1.2.1 ASM体系结构

ASM将数据文件和其他数据库结构分成区间,将区间分配到磁盘组中的所有磁盘上来提

高性能和可靠性。并非是镜像整个磁盘卷,ASM会镜像数据库对象以提供根据类型镜像和条

14

OCP认证考试指南(1Z0-053):Oracle Database 11g Administration II

带化数据库对象的灵活性。如果底层磁盘硬件已经启用了RAID,或是存储区域网络(storage area network,SAN)的一部分,或是网络附加存储(network-attached storage,NAS)设备的一部分,就会根据情况完全不条带化对象。

ASM的另一项重要功能是自动重新平衡。如果需要增加磁盘空间,可以将其他磁盘设备添加到磁盘组中,ASM会将相称的文件数量从一个或多个现有磁盘移到新磁盘上,来维护整个I/O在所有磁盘上的平衡。这一切操作在后台进行,而磁盘文件中包含的数据库对象依然联机,可供用户使用。如果重新平衡操作期间对I/O子系统影响颇大,可以使用初始化参数来降低重新平衡的速度。

ASM要求使用特殊类型的Oracle实例来提供传统Oracle实例和文件系统之间的接口;

ASM软件组件随Oracle数据库软件提供,在选择整个数据库的存储类型和创建数据库时,始终可以选择该组件。

使用ASM时,也可以将ASM磁盘组与手动Oracle数据文件管理技术结合使用。例如,ASM存储中可能有所有的表空间,但有在一个服务器的文件系统上创建的表空间,以便能更方便地将其传输到另一个数据库中。无论如何,ASM的易用性和性能为最终使用ASM磁盘组来满足所有存储需求提供了强有力的依据。

Oracle Database 10g中引入的两个Oracle后台进程支持ASM实例:重新平衡程序(rebalancer,RBAL)和ARBn。RBAL协调磁盘组的磁盘活动,在添加或卸下磁盘时执行重新平衡操作。ARBn 中的n可以是数字0到9,该进程在磁盘组中的磁盘之间执行实际区间移动。

从Oracle Database 10g开始,对于使用ASM磁盘的数据库,有两个新的后台进程:ASMB 和RBAL。ASMB执行数据库和ASM实例间的通信,而RBAL代表数据库打开和关闭磁盘组中的磁盘。这是与ASM实例中的RBAL相同的进程,它们执行相关(但不同)的功能。换言之,进程行为因实例类型而异。

查找ASM和RDBMS实例中与ASM相关的新进程

在本练习中,您将在Linux服务器上确定RDBMS实例和ASM实例的新后台进程。在Linux 上,每个Oracle进程都有自己的线程。可以联合Oracle动态性能视图V$BGPROCESS和V$SESSION,也可以使用Linux ps –ef命令,并搜索包含ASM或RDBMS实例名的命令名。

(1) 查询/etc/oratab来了解ASM和RDBMS实例的名称:

[oracle@dw ~]$ tail /etc/oratab

#

# Multiple entries with the same $ORACLE_SID are not allowed.

#

#

+ASM:/u01/app/oracle/product/11.1.0/db_1:Y

dw:/u01/app/oracle/product/11.1.0/db_1:Y

[oracle@dw ~]$

第1章数据库体系结构和ASM 15

(2) 为RDBMS实例设置ORACLE_SID环境变量,在本例中是DW:

[oracle@dw ~]$ export ORACLE_SID=DW

(3) 连接到RDBMS实例,并查询V$SESSION和V$BGPROCESS以获得一系列正在运行

的进程:

[oracle@dw ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.1.0.6.0 - Production on Sun Feb 10 22:22:51 2008

Copyright (c) 1982, 2007, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 – Production

With the Partitioning, OLAP, Data Mining and

Real Application Testing options

SQL> select sid, serial#, process, name, description

2> from v$session join v$bgprocess using(paddr);

SID SERIAL# PROCESS NAME DESCRIPTION

---------- ---------- --------- ----- ------------------------------- 169 1 7113 PMON process cleanup

168 1 7117 VKTM Virtual Keeper of TiMe process

167 1 7129 DIAG diagnosibility process

166 1 7131 DBRM Resource Manager process

164 3 7141 PSP0 process spawner 0

162 1 7157 DSKM slave DiSKMon process

165 1 7151 DIA0 diagnosibility process 0

163 1 7153 MMAN Memory Manager

162 1 7157 DBW0 db writer process 0

148 9 7291 ARC0 Archival Process 0

146 1 7293 ARC1 Archival Process 1

147 1 7295 ARC2 Archival Process 2

145 1 7297 ARC3 Archival Process 3

160 1 7164 LGWR Redo etc.

161 1 7166 CKPT checkpoint

141 5 7359 CTWR Change Tracking Writer

150 2 7236 RVWR Recovery Writer

138 1 7370 FBDA Flashback Data Archiver Process

158 1 7170 SMON System Monitor Process

136 1 7372 SMCO Space Manager Process

159 1 7172 RECO distributed recovery

119 1030 7847 CJQ0 Job Queue Coordinator

140 7 7375 QMNC AQ Coordinator

155 1 7174 RBAL ASM Rebalance master

157 1 7180 ASMB ASM Background

156 1 7182 MMON Manageability Monitor Process

154 1 7184 MMNL Manageability Monitor Process 2

27 rows selected.

SQL>

16

OCP认证考试指南(1Z0-053):Oracle Database 11g Administration II

注意列表底部的RBAL和ASMB进程。

(4) 可以使用PID列确定Linux进程号,并直接查询此Linux进程:

SQL> !ps -f -p 7174

UID PID PPID C STIME TTY TIME C MD

oracle 7174 1 0 21:34 ? 00:00:00 ora_rbal_dw

SQL>

(5) 接下来,通过为ASM实例(+ASM)设置ORACLE_SID环境变量来检查ASM后台进程:

[oracle@dw ~]$ export ORACLE_SID=+ASM

(6) 连接到ASM实例,查询V$SESSION和V$BGPROCESS来获得一系列正在运行的进程:

[oracle@dw ~]$ sqlplus / as sysasm

. . .

SQL> select sid, serial#, process, name, description

2> from v$session join v$bgprocess using(paddr);

SID SERIAL# PROCESS NAME DESCRIPTION

---------- ---------- --------- ----- ------------------------------ 114 1 6926 PMON process cleanup

113 1 6928 VKTM Virtual Keeper of TiMe process

105 1 6950 RBAL ASM Rebalance master

106 1 6946 CKPT checkpoint

107 1 6944 LGWR Redo etc.

109 1 6940 MMAN Memory Manager

109 1 6940 DSKM slave DiSKMon process

104 1 6948 SMON System Monitor Process

103 1 6952 GMON diskgroup monitor

108 1 6942 DBW0 db writer process 0

111 1 6934 PSP0 process spawner 0

112 1 6932 DIAG diagnosibility process

110 3 6938 DIA0 diagnosibility process 0

98 36 9858 ASMB ASM Background

14 rows selected.

SQL>

注意列表中的新进程RBAL和ASMB。ARBn进程将在启动重新平衡操作时启动。

1.2.2 创建ASM实例

ASM要求使用专用的Oracle实例来管理磁盘组。ASM实例占用的内存量通常比RDBMS 实例小,内存范围在60MB到120MB之间。如果将ASM指定为数据库的文件存储选项,会自动配置ASM实例。如果已经安装了Oracle软件,但不存在ASM实例,将看到如图1-5所示的Oracle Universal Installer屏幕。

第1章数据库体系结构和ASM 17

图1-5 将ASM指定为数据库文件存储方法

这里列举一个使用磁盘设备创建ASM磁盘组的例子,假如Linux服务器拥有多个原始磁

盘设备,其容量如表1-1所示。

在Oracle Universal Installer (OUI)中配置第一个磁盘组,如图1-6所示。

第一个磁盘组名为DATA,您将使用/dev/raw/raw1和/dev/raw/raw2来创建普通的冗余磁盘

组。如果为需要的冗余级别选择的原始磁盘数量不足,OUI将生成一条错误消息。在创建数据

库后,将启动普通实例和ASM实例。

ASM实例具有其他几个唯一特点:它虽然有初始化参数文件和密码文件,但没有数据字

典,因此只能使用操作系统身份验证方式,通过SYS和SYSTEM连接到ASM实例。只能使

用CONNECT/AS SYSASM命令连接到ASM实例。会忽略CONNECT命令中的任何用户名/

密码。诸如CREATE DISKGROUP、ALTER DISKGROUP和DROP DISKGROUP的磁盘组命

令仅在ASM实例中有效。最后,ASM实例只能处于NOMOUNT或MOUNT状态,决不会处

18

OCP认证考试指南(1Z0-053):Oracle Database 11g Administration II

于OPEN状态。

图1-6 使用OUI配置初始ASM磁盘组

从Oracle Database 11g开始,名为SYSASM的新系统权限将SYSDBA数据库管理权限与ASM存储管理权限分离开来。操作系统组OSASM为操作系统用户自动授予SYSASM权限,因此对于ASM磁盘组,通过以下命令使用操作系统身份验证以SYSASM权限连接到ASM 实例:

export ORACLE_SID=+ASM

sqlplus / as sysasm

虽然仍可在Oracle Database 11g版本1中使用SYSDBA权限,但Oracle会在警报日志中写入一条消息,指出不赞成在ASM实例中为管理命令使用SYSDBA权限,在未来版本中将取消此权限。

下面是ASM实例的警报日志的内容:

Sun Mar 02 14:57:33 2008

WARNING: Deprecated privilege SYSDBA for command 'CREATE USER'

为数据库用户授予SYSASM权限与授予SYSDBA或SYSOPER权限是等效的;在本例中,创建用户marthag,授予其ASM实例上的SYSASM权限,然后以marthag的身份连接:SQL> create user marthag identified by tarese3;

User created.

SQL> grant sysasm to marthag;

Grant succeeded.

SQL> connect marthag as sysasm;

Enter password:

Connected.

SQL>

第1章数据库体系结构和ASM

19

提示:

在Oracle Database 11g第1版中,SYSASM和SYSDBA的操作系统组是一样

的:dba。在未来版本中,需要分离SYSASM和SYSDBA用户的操作系统组。

由于ASM实例没有数据字典,因此只使用新用户和SYSASM权限来更新ASM实例的密码文件。可以使用REVOKE命令撤消用户的SYSASM权限。正如RDBMS实例所示,可以查看动态性能视图V$PWFILE_USERS来了解哪些用户拥有ASM实例上的SYSDBA、SYSASM 或SYSOPER权限。

SQL> select * from v$pwfile_users;

USERNAME SYSDBA SYSOPER SYSASM

-------------------- -------- -------- --------

SYS TRUE TRUE TRUE

MARTHAG FALSE FALSE TRUE

BOBBYB FALSE FALSE TRUE

SQL>

1.3 为ASM和数据库实例设置初始化参数文件

以下几节介绍用于支持ASM实例的与ASM相关的新初始化参数以及采用新值的现有初始化参数。在启动和关闭ASM实例时,需要注意多个事项。其中最重要的一条是,不能从任何活动的RDBMS实例关闭正在管理磁盘的ASM实例(首先要关闭数据库)。本节还介绍Oracle 为ASM文件名命名的约定,以及可以使用缩写ASM文件名的时机。如果不透彻地分析相关的动态性能视图,将无法全面讨论ASM。

1.3.1 ASM实例组件

不能使用可用于传统数据库的各种方法来访问ASM实例。本节讨论可以使用的与SYSDBA、SYSOPER和SYSASM有关的权限,还通过只能用于ASM实例的新初始化参数和扩展初始化参数(在Oracle Database 10g中引入,在Oracle Database 11g中增强)来介绍ASM实例的特点。本节末尾将介绍启动和停止ASM实例的过程,以及ASM实例与所服务的数据库实例的相关性。

1. 访问ASM实例

如本章前面所述,ASM实例没有数据字典,因此对此实例的访问仅限于通过操作系统身份验证的用户。换言之,使用dba组中的操作系统用户,以SYSDBA、SYSASM或SYSOPER 权限连接。

以SYSDBA或SYSASM权限(注意,从Oracle Database 11g开始,不再赞成使用SYSDBA)连接到ASM实例的用户可以执行所有ASM操作,如创建或删除磁盘组,以及从磁盘组添加和删除磁盘。

SYSOPER用户只能使用更为有限的ASM实例的命令集合。一般而言,供SYSOPER用户使用的命令仅足以在已经配置且趋于稳定的ASM实例上执行日常操作。下面列出了SYSOPER

20

OCP认证考试指南(1Z0-053):Oracle Database 11g Administration II

可以执行的操作:

●启动和关闭ASM实例

●安装或卸载磁盘组

●将磁盘组的磁盘状态从ONLINE更改为OFFLINE,反之亦然。

●重新平衡磁盘组

●针对磁盘组执行完整性检查

●访问V$ASM_*动态性能视图

2. ASM初始化参数

有很多初始化参数要么是ASM实例专用的,要么在ASM实例中使用新值。强烈建议为ASM实例使用SPFILE(而非初始化参数文件)。例如,在添加或删除磁盘组时,将自动维护诸如ASM_DISKGROUPS的参数,使您无需手动更改此值。

下面介绍与ASM相关的初始化参数。

INSTANCE_TYPE 对于ASM实例,INSTANCE_TYPE参数的值是ASM,而传统的Oracle 实例的默认值是RDBMS。

DB_UNIQUE_NAME DB_UNIQUE_NAME参数的默认值是+ASM,是集群中或单个节点上的一组ASM实例的唯一名称。

ASM_POWER_LIMIT 为确保重新平衡操作不干扰正在进行的用户I/O操作,可使用ASM_POWER_LIMIT参数来控制重新平衡操作的速度。此参数的值是1到11,最大值是11,默认值是1(I/O开销低)。由于这是一个动态参数,在必须执行重新平衡磁盘的操作时,可以在白天将其设成一个低值,在夜间将其设置成一个较高值(前提是您不是24小时工作)。

ASM_DISKSTRING ASM_DISKSTRING参数指定一个或多个与操作系统相关的字符串来限制可以用于创建磁盘组的磁盘设备。如果此值是NULL,那么可以使用ASM实例可见的所有磁盘来创建磁盘组。在本章的示例的测试服务器中,将ASM_DISKSTRING参数的值设置为/dev/raw/*:

SQL> select name, type, value from v$parameter

2 where name = 'asm_diskstring';

NAME TYPE VALUE

--------------- ---------- -------------------------

asm_diskstring 2 /dev/raw/*

ASM_DISKGROUPS ASM_DISKGROUPS参数指定一个包含磁盘组名称的列表,在启动ASM实例时(或通过ALTERDISKGROUP ALL MOUNT命令)会自动安装这些磁盘组。在启动实例时,即使此列表是空的,也可以手动安装任何现有的磁盘组。

LARGE_POOL_SIZE LARGE_POOL_SIZE参数用于普通实例和ASM实例。但是,此池对于ASM实例的用法有所不同。可以在此池中执行所有的内部ASM包,因此对于单个实例,至少要将此参数设置为12MB;对于RAC实例,至少要将此参数设置为16MB。

ASM_PREFERRED_READ_FAILURE_GROUPS ASM_PREFERRED_READ_FAILURE_ GROUPS是Oracle Database 11g中的新参数,在使用集群ASM实例时,此参数包含给定数据库实例首选的故障组。此参数因实例而异:每个实例可以指定与实例节点最接近的故障组以便

相关主题