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

更新时间:2024-04-07 06:50:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第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

数据库 SYSTEM表空间 USERS表空间 SYSAUX表空间 段 区间1 表空间 段1 段3 段5 段2 段4 段6 区间2 块

图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数据库中的每个数据文件正好是一个表空间的成员。但是,一个表空间可以包含多个数据文件。大文件表空间是例外情况,这个表空间正好包含一个数据文件。

实例 内存结构 后台进程 数据库 物理数据库结构 数据文件 控制文件 重做日志文件 归档重做日志文件 数据文件1 数据文件2 数据文件3 数据文件4 数据库 SYSTEM 表空间 逻辑数据库 结构 USERS表空间 SYSAUX 表空间

图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缓冲区池 SGA 共享池 保留的池 库缓存 数据库缓冲区缓存(大小nk) 数据库缓冲区缓存(大小nk) 共享内存 大池 Java池 控制结构 流池 重做日志缓冲区缓存 固定SGA 数据字典缓存 共享的SQL区域 PL/SQL 过程和包 软件代码区 PGA 非共享内存 栈空间 会话信息 排序、散列、归并区域

图1-3 Oracle逻辑内存结构

缓冲区缓存(Buffer Cache) 数据库缓冲区缓存保存最近从磁盘读取的用于满足SELECT

语句要求的数据块,或包含已修改块(已经从DML语句更改或添加)的数据块。从Oracle9i开始,SGA中保存这些数据块的内存区域是动态的。这是一件好事,假如数据库的多个表空间的块大小不是默认块大小。Oracle允许表空间最多使用5种不同的块大小(一种块大小是默认的,其余类型的最多有4种)。每个块大小都需要自己的缓冲区缓存。如果一天或一周中处理和事务需求发生了变化,将可以动态更改DB_CACHE_SIZE和DB_nK_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_AGGREGATE_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。

12

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

系统全局区 数据库缓冲区缓存 重做日志 缓冲区 用户进程 用户进程 共享服务 专用服务 器进程 器进程 脱机存 储设备 图例: 恢复进程 进程监视器 系统监视器 检查点 归档进程 数据库写入器 日志写入器 调度程序进程 用户进程 控制 文件 重做日 志文件 数据 文件

图1-4 Oracle后台进程

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

DBWn 早期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进程失败,在更正问题前,整个实例将挂起。

ARCn 如果数据库处于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相同的进程,它们执行相关(但不同)的功能。换言之,进程行为因实例类型而异。 练习1-1 查找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 CMD 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所示。

表1-1 ASM磁盘组的原始磁盘 设 备 名 称 /dev/raw/raw1 /dev/raw/raw2 /dev/raw/raw3 /dev/raw/raw4 /dev/raw/raw5 /dev/raw/raw6 /dev/raw/raw7 /dev/raw/raw8 12GB 12GB 12GB 12GB 4GB 4GB 4GB 4GB 容 量 在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实例时,此参数包含给定数据库实例首选的故障组。此参数因实例而异:每个实例可以指定与实例节点最接近的故障组以便

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

21

提高性能,例如,服务器本地磁盘上的故障组。

1.3.2 ASM动态性能视图

有多个新的动态性能视图与ASM实例相关。表1-2包含与ASM相关的常见动态性能视图。本章后面对此做了进一步的解释。

表1-2 与ASM相关的动态性能视图 视 图 名 称 V$ASM_DISK 是否用于标准数据库 是 说 明 ASM实例发现的每个磁盘(无论是否由磁盘组使用)对应一行。对于数据库实例,实例使用的每个磁盘组对应一行 V$ASM_DISKGROUP 是 ASM实例的每个磁盘组对应一行,每行中包含相应磁盘组的一般特性。对于数据库实例,使用中的每个磁盘组(无论是否已经安装)对应一行 V$ASM_FILE V$ASM_OPERATION V$ASM_TEMPLATE 否 否 是 每个已经安装的磁盘组中的每个文件对应一行 ASM实例中每次执行长期运行的操作时写入一行 ASM实例中的每个已安装磁盘组的每个模板对应一行。对于数据库实例,每个已安装的磁盘组的每个模板对应一行 V$ASM_CLIENT 是 使用由ASM实例管理的磁盘组的每个数据库对应一行。对于数据库实例,ASM实例对应一行(如果ASM文件打开) V$ASM_ALIAS

否 每个已安装的磁盘组的每个别名对应一行 练习1-2 查询磁盘组和可用的原始设备

在本练习中,您将查找磁盘组名及其相关联的底层设备,然后确认Linux服务器上的原始设备列表。

(1) 连接到数据库实例(而非ASM实例),并查询动态性能视图V$ASM_DISK:

SQL> select group_number, disk_number, mount_status, name, path 1 from v$asm_disk

2 order by group_number, disk_number;

GROUP_NUMBER DISK_NUMBER MOUNT_STATUS NAME PATH ------------ ------------ ------------ -------------- ------------- 0 0 CLOSED /dev/raw/raw7 0 1 CLOSED /dev/raw/raw8 0 2 CLOSED /dev/raw/raw5 0 3 CLOSED /dev/raw/raw6

22

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

1 0 CACHED DATA_0000 /dev/raw/raw1 1 1 CACHED DATA_0001 /dev/raw/raw2 2 0 CACHED RECOV_0000 /dev/raw/raw3 2 1 CACHED RECOV_0001 /dev/raw/raw4

8 rows selected

注意,ASM磁盘组使用了8个可用原始设备中的4个设备。 (2) 在Linux命令行中,使用raw命令查询可用的原始磁盘组:

[root@dw ~]# raw –qa

/dev/raw/raw1: bound to major 8, minor 49 /dev/raw/raw2: bound to major 8, minor 65 /dev/raw/raw3: bound to major 8, minor 81 /dev/raw/raw4: bound to major 8, minor 97 /dev/raw/raw5: bound to major 8, minor 113 /dev/raw/raw6: bound to major 8, minor 129 /dev/raw/raw7: bound to major 8, minor 145 /dev/raw/raw8: bound to major 8, minor 161 [root@dw ~]#

1.3.3 ASM文件名格式

Oracle的最佳实践提出这样的建议:应将ASM文件创建为OMF格式,因此在执行大多数管理功能时,并不需要磁盘组中的实际文件名的详细信息。如果删除ASM磁盘组中的对象,也会自动删除文件。某些命令将公开实际文件名,如ALTER DATABASE BACKUP CONTROLFILE TO TRACE以及一些数据字典和动态性能视图。例如,动态性能视图V$DATAFILE显示每个磁盘组中的实际文件名。下面是一个例子:

SQL> select file#, name, blocks from v$datafile;

FILE# NAME BLOCKS ---------- ---------------------------------------- ----------

1 +DATA/dw/datafile/system.256.627432971 89600 2 +DATA/dw/datafile/sysaux.257.627432973 77640 3 +DATA/dw/datafile/undotbs1.258.627432975 12800 4 +DATA/dw/datafile/users.259.627432977 640 5 +DATA/dw/datafile/example.265.627433157 12800 6 /u05/oradata/dmarts.dbf 32000 8 /u05/oradata/xport.dbf 38400

7 rows selected.

ASM文件名可以是6种不同格式之一。在下一节中,您将了解不同的格式和可以使用这些格式的上下文:作为对现有文件的引用,或在创建单个文件的操作中使用,或在创建多个文件的操作中使用。

1. 完全限定名称

只在引用现有文件时使用完全限定的ASM文件名。完全限定的ASM文件名的格式如下:

+group/dbname/file type/tag.file.incarnation

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

23

其中,group是磁盘组名称,dbname是文件所属的数据库的名称,file type是Oracle文件类型,tag是文件类型的特定信息,file.incarnation对用于确保唯一性。下面是一个USER表空间的ASM文件示例:

+DATA/dw/datafile/users.259.627432977

磁盘组名为+DATA,数据库名为DW,它是USERS表空间的一个数据文件,文件编号/化身对是259.627432977,如果决定为USERS表空间创建另一个ASM数据文件,这个对可以确保唯一性。

2. 数值名称

只有在引用现有的ASM文件时才使用数值名称。此时,只需使用磁盘组名和文件编号/化身对即可引用现有的ASM文件。上一节中的ASM文件的数值名称如下:

+DATA.259.627432977

3. 别名

在引用现有对象或创建单个ASM文件时会使用别名。可以使用ALTER DISKGROUP ADD ALIAS命令,为现有的ASM文件或新ASM文件创建更具可读性的名称。别名不同于普通的ASM文件名,它的结尾处不是加点的编号对(文件编号/化身对),如下所示:

SQL> alter diskgroup data

2 add directory '+data/purch'; Diskgroup altered.

SQL> alter diskgroup data

2 add alias '+data/purch/users.dbf'

3 for '+data/dw/datafile/users.259.627432977'; Diskgroup altered.

SQL>

4. 包含模板名称的别名

只能在新建ASM文件时使用带有模板的别名。模板提供了速记方法,以便在新建ASM文件时指定文件类型和标记。

下面是一个为+DATA磁盘组中的新表空间使用模板的别名例子:

SQL> create tablespace users2 datafile '+data(datafile)'; Tablespace created.

DATAFILE模板为普通冗余组指定COARSE条带化、MIRROR,为高冗余组指定HIGH;它是数据文件的默认模板。由于未完全限定名称,此磁盘组的ASM名称如下:

+DATA/dw/datafile/users2.267.627782171

本章后面的“ASM文件类型和模板”一节详细介绍了ASM模板。

24

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

5. 不完整名称

可在创建单个文件或多个文件时使用不完整的文件名格式。只指定磁盘组名称,会根据文件类型使用默认模板,如下所示:

SQL> create tablespace users5 datafile '+data1'; Tablespace created.

6. 使用模板的不完整名称

与不完整的ASM文件名一样,也可以在创建单个文件或多个文件时使用带有模板的不完整文件名。无论哪种实际文件类型,都使用模板名来确定文件特征。

下例虽然创建了表空间,但会为新表空间使用联机日志文件的条带化和镜像特征(精细条带化),而不使用数据文件的特性(粗略条带化):

SQL> create tablespace users6 datafile '+data1(onlinelog)'; Tablespace created.

1.3.4 ASM文件类型和模板

ASM支持数据库使用的所有文件类型(操作系统可执行文件除外)。表1-3列出了全部ASM文件类型。“ASM文件类型”和“标记”列是前面“ASM文件名格式”一节中介绍的内容。

表1-3 ASM文件类型 Oracle文件类型 ASM文件类型 标 记 默 认 模 板 控制文件 controlfile cf(控制文件)或bcf(备份控制文件) CONTROLFILE DATAFILE ONLINELOG ARCHIVELOG TEMPFILE BACKUPSET BACKUPSET BACKUPSET DATAFILE PARAMETERFILE DATAGUARDCONFIG FLASHBACK CHANGETRACKING AUTOBACKUP DUMPSET XTRANSPORT 数据文件 联机日志 归档日志 临时文件 RMAN数据文件备份段 datafile online_log archive_log temp backupset backupset backupset datafile init drc rlog ctb autobackup dumpset tablespace name.file# log_thread# parameter tablespace name.file# 由客户指定 由客户指定 由客户指定 tablespace name.file# spfile drc thread#_log# bitmap 由客户指定 dump RMAN增量备份段 RMAN归档日志备份段 RMAN数据文件副本 初始化参数 代理配置 闪回日志 更改跟踪位图 自动备份 Data Pump转储集 跨平台数据文件

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

25

表1-4中显示了表1-3最后一列引用的默认ASM文件模板。

表1-4 ASM文件模板(默认) 系 统 模 板 外 部 冗 余 普 通 冗 余 双向镜像 双向镜像 双向镜像 双向镜像 双向镜像 双向镜像 双向镜像 双向镜像 双向镜像 双向镜像 双向镜像 双向镜像 双向镜像 高 度 冗 余 三向镜像 三向镜像 三向镜像 三向镜像 三向镜像 三向镜像 三向镜像 三向镜像 三向镜像 三向镜像 三向镜像 三向镜像 三向镜像 条 带 化 CONTROLFILE DATAFILE ONLINELOG ARCHIVELOG TEMPFILE BACKUPSET XTRANSPORT PARAMETERFILE DATAGUARDCONFIG FLASHBACK CHANGETRACKING AUTOBACKUP DUMPSET 不支持 不支持 不支持 不支持 不支持 不支持 不支持 不支持 不支持 不支持 不支持 不支持 不支持 精细 粗略 精细 粗略 粗略 粗略 粗略 粗略 粗略 精细 粗略 粗略 粗略

在新建磁盘组时,从表1-4的默认模板复制的一组ASM文件模板保存在文件组中。结果,可以更改每个模板的特征,但只能将更改应用于模板所在的磁盘组。也就是说,+DATA1磁盘组中的DATAFILE系统模板可能使用默认的粗略条带化,而+DATA2磁盘组中的DATAFILE模板可能使用精细条带化。可以根据需要在每个磁盘组中创建自定义模板。

默认情况下,如果使用DATAFILE模板创建ASM数据文件,则数据文件的大小是100MB,而且可以自动扩展。最大的大小是32 767MB (32GB)。

1.4 启动和关闭ASM实例

ASM实例的启动方法与数据库实例的启动方法十分相似,只是STARTUP命令默认使用STARTUP MOUNT。由于没有安装控制文件、数据库或数据字典,会安装ASM磁盘组(而不是数据库)。STARTUP NOMOUNT命令启动实例,但不安装任何ASM磁盘。另外,可以指定STARTUP RESTRICT临时性阻止数据库实例连接到ASM实例以安装磁盘组。

如果存在任何已连接的RDBMS实例,那么,针对ASM实例执行SHUTDOWN命令将导致失败;首先要关闭相关的RDBMS实例。唯一的例外是在ASM实例上使用SHUTDOWN ABORT命令,这种情况下,在失去与ASM实例的连接后最终会强制所有相关数据库执行SHUTDOWN ABORT,并生成ORA-15064错误消息。

26

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

提示:

仅在别无选择的情况下使用SHUTDOWN ABORT。SHUTDOWN ABORT会逐 一取消操作系统级别的所有进程。在重新启动时,会回滚任何挂起的数据库更改活动。实际上,重新启动所做的工作与SHUTDOWN类似。它们的唯一区别在于,在使用SHUTDOWN ABORT时,会断开与数据库的连接。虽然可以使用RMAN进行恢复,但要避免这样做。有时您会发现,无论由谁设置备份,都达不到大多数DBA期望的标准。

对于多个共享磁盘组的ASM实例,例如RAC环境,一个ASM实例失败并不会导致数据库实例失败。相反,另一个ASM实例在此实例失败后执行恢复操作。已连接的RDBMS实例的失败不影响ASM实例。 练习1-3 使用活动连接停止ASM实例

在本练习中您将看到:在尝试使用活动数据库客户端停止ASM实例时会发生什么情况。 (1) 在/etc/oratab中查询ASM实例的名称:

[oracle@dw ~]$ cat /etc/oratab #

# This file is used by ORACLE utilities. It is created by root.sh # and updated by the Database Configuration Assistant when creating # a database.

# A colon, ':', is used as the field terminator. A new line terminates # the entry. Lines beginning with a pound sign, '#', are comments. #

# Entries are of the form:

# $ORACLE_SID:$ORACLE_HOME:: #

# The first and second fields are the system identifier and home # directory of the database respectively. The third filed indicates

# to the dbstart utility that the database should , \# \#

# 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 ~]$

(2) 为ASM实例设置ORACLE_SID环境变量:

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

(3) 连接到ASM实例:

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

[oracle@dw ~]$ sqlplus / as sysasm

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>

27

(4) 尝试关闭ASM实例:

SQL> shutdown immediate

ORA-15097: cannot SHUTDOWN ASM instance with connected RDBMS instance SQL>

注意,如果使用SHUTDOWN ABORT,将强制关闭ASM实例,但最终会在每个已经连接的数据库实例上强制性地隐式执行SHUTDOWN ABORT。

1.5 管理ASM磁盘组

如果使用ASM磁盘组,可获得多个方面的好处:可以提高I/O性能和可用性,可以方便地将磁盘添加到磁盘组,可以添加一个全新磁盘组,可在相同的时间内管理更多数据库。要成为一名成功的DBA,了解磁盘组的组件以及正确配置磁盘组是十分重要的努力目标。

本节将更深入详细地研究磁盘组结构,还将介绍与磁盘组相关的不同管理任务,说明如何将磁盘分配给故障组,如何对磁盘组进行镜像操作,如何创建、删除和更改磁盘组。在手动实验练习中,通过Linux服务器上使用的一些原始磁盘设备来演示磁盘组的创建和维护方式。本节也将简要介绍ASM的EM Database Control界面;在命令行方面,将简要介绍可用来浏览、复制和管理ASM对象的asmcmd命令行实用程序。

1.5.1 磁盘组体系结构

正如本章前面所定义,磁盘组是作为一个单元进行管理的物理磁盘集合。作为磁盘组的一部分,每个ASM磁盘都有ASM磁盘名,磁盘名由DBA指定,也可以在将磁盘分配给磁盘组时自动指定。

使用粗略或精细条带化方法,以条带方式在磁盘上保存磁盘组中的文件。粗略条带化方法在所有磁盘上分布文件,每个分布单元是1MB。粗略条带化适用于具有并发程度很高的小型I/O请求的系统,例如联机事务处理(Online Transaction Processing,OLTP)环境。而精细条带化方法的文件分布单元是128KB,适用于并发程度较低的传统数据仓库环境或OLTP系统;它将单个I/O请求的响应时间最大化。

1.5.2 磁盘组镜像和故障组

在磁盘组中定义镜像类型前,必须将磁盘组合成故障组。故障组是磁盘组中共享公共资源

28

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

的一个或多个磁盘,磁盘控制器是一个公共资源例子,如果它出现故障,将导致此组无法使用整个磁盘集合。大多数情况下,ASM实例不了解给定磁盘的硬件和软件依赖性。因此,除非专门将磁盘分配给故障组,磁盘组中的每个磁盘都将分配到自身的故障组中。

定义了故障组后,可以定义磁盘组的镜像;磁盘组中的可用故障组数量会限制磁盘组可用的镜像类型。有3类可用的镜像类型:外部冗余、普通冗余和高度冗余。

1. 外部冗余

外部冗余仅需要一个磁盘位置,并假定磁盘对数据库的连续运行无关紧要,或使用高可用性硬件(如RAID控制器)在外部管理磁盘。

2. 普通冗余

普通冗余提供双向镜像,要求磁盘组中至少有两个故障组。如果故障组中的一个磁盘出现故障,不会导致此磁盘组停止工作,也不会丢失任何数据,但如果针对磁盘组中的对象进行查询,性能会受到轻微的影响。当故障组中的所有磁盘均联机时,读性能通常会得到提高,因为可以在多个磁盘上获得请求的数据。

3. 高度冗余

高度冗余提供三向镜像,并要求一个磁盘组中至少有3个故障组。在很大程度上,数据库用户看不到3个故障组中的两个故障组中的磁盘故障,这与普通冗余镜像一样。

在极低级别管理镜像。对区间(而非磁盘)进行镜像操作。另外,每个磁盘都有每个磁盘上的主区间和镜像区间(第二个区间和第三个区间)的结合物。虽然在区间级别管理镜像会带来些许开销,但它提供了将故障磁盘的负载分布到其他所有磁盘(而非单个磁盘)的优势。

1.5.3 以动态方式重新平衡磁盘组

每次更改磁盘组的配置方式时(添加或删除故障组或者添加或删除故障组中的磁盘),会以动态方式自动执行重新平衡操作,以便将磁盘组的其他成员的数据按比例重新分配给磁盘组中的新成员。可在数据库联机且可供用户使用时执行重新平衡操作。将初始化参数ASM_POWER_LIMIT调整为一个较低值,可以控制对正在进行的数据库I/O操作的影响。

依靠这些动态化的重新平衡操作,您将无需执行繁重而且经常出错的在磁盘组中确定热点的任务,还可在整个数据库依然联机的情况下,将整个数据库从一组速度较慢的磁盘自动迁移到一组速度较快的磁盘。在包含速度较慢磁盘的现有磁盘组中,将速度较快的磁盘作为新的故障组来添加,并会自动执行重新平衡操作。完成重新平衡操作后,会删除包含速度较慢磁盘的故障组,得到一个仅包含速度较快磁盘的磁盘组。为加快操作速度,可在同一个ALTER DISKGROUP命令中启动ADD和DROP操作。

例如,假如要新建一个高度冗余的新磁盘组,来保存新信用卡授权信息的表空间。使用V$ASM_DISK视图,可以查看使用初始化参数ASM_DISKSTRING发现的所有磁盘以及磁盘状态(也就是说,分配给现有磁盘组,还是未予分配),命令如下:

SQL> select group_number, disk_number, name,

2 failgroup, create_date, path from v$asm_disk;

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

GROUP_NUMBER DISK_NUMBER NAME FAILGROUP CREATE_DA PATH ------------ ----------- ---------- ---------- --------- -------------

0 0 /dev/raw/raw8 0 1 /dev/raw/raw7 0 2 /dev/raw/raw6 0 3 /dev/raw/raw5 2 1 RECOV_0001 RECOV_0001 08-JUL-07 /dev/raw/raw4 2 0 RECOV_0000 RECOV_0000 08-JUL-07 /dev/raw/raw3 1 1 DATA_0001 DATA_0001 08-JUL-07 /dev/raw/raw2 1 0 DATA_0000 DATA_0000 08-JUL-07 /dev/raw/raw1

8 rows selected.

SQL>

29

在可供ASM使用的8个磁盘中,只有4个磁盘分配给了两个磁盘组DATA和RECOV,每个磁盘都在各自的故障组中。可以在V$ASM_DISKGROUP视图中看到磁盘组名:

SQL> select group_number, name, type, total_mb, free_mb 2 from v$asm_diskgroup;

GROUP_NUMBER NAME TYPE TOTAL_MB FREE_MB ------------ ---------- ------ ---------- ----------

1 DATA NORMAL 24568 20798 2 RECOV NORMAL 24568 24090

SQL>

注意,如果有多个ASM磁盘和磁盘组,可以连接两个视图的GROUP_NUMBER列,并按GROUP_NUMBER过滤查询结果。另外,可以在V$ASM_DISKGROUP中看到,两个磁盘组都是普通冗余组,每个组包含两个磁盘。

第一步是在ASM实例上创建磁盘组:

SQL> create diskgroup data2 high redundancy

2 failgroup fg1 disk '/dev/raw/raw5' name d2a 3 failgroup fg2 disk '/dev/raw/raw6' name d2b 4 failgroup fg3 disk '/dev/raw/raw7' name d2c 5 failgroup fg4 disk '/dev/raw/raw8' name d2d;

Diskgroup created.

SQL>

查看动态性能视图,可在V$ASM_DISKGROUP中查看可用的新磁盘组,在V$ASM_DISK中查看故障组:

SQL> select group_number, name, type, total_mb, free_mb 2 from v$asm_diskgroup; GROUP_NUMBER NAME TYPE TOTAL_MB FREE_MB ------------ ---------- ------ ---------- ----------

1 DATA NORMAL 24568 20798

30

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

2 RECOV NORMAL 24568 24090 3 DATA2 HIGH 16376 16221

SQL> select group_number, disk_number, name,

2 failgroup, create_date, path from v$asm_disk;

GROUP_NUMBER DISK_NUMBER NAME FAILGROUP CREATE_DA PATH ------------ ----------- ---------- ---------- --------- -------------

3 3 D2D FG4 13-JUL-07 /dev/raw/raw8 3 2 D2C FG3 13-JUL-07 /dev/raw/raw7 3 1 D2B FG2 13-JUL-07 /dev/raw/raw6 3 0 D2A FG1 13-JUL-07 /dev/raw/raw5 2 1 RECOV_0001 RECOV_0001 08-JUL-07 /dev/raw/raw4 2 0 RECOV_0000 RECOV_0000 08-JUL-07 /dev/raw/raw3 1 1 DATA_0001 DATA_0001 08-JUL-07 /dev/raw/raw2 1 0 DATA_0000 DATA_0000 08-JUL-07 /dev/raw/raw1

8 rows selected.

SQL>

注意,已经完成了新磁盘组的配置工作。可以在数据库中创建新磁盘组的表空间:

SQL> create tablespace users3 datafile '+DATA2'; Tablespace created.

由于ASM文件可以采用OMF格式,在创建表空间时无需指定其他任何特征。

1.5.4 磁盘组的快速镜像重新同步功能

通过对磁盘组中的文件进行镜像操作,可以提高性能和可用性;但是,在修复了磁盘组中的故障磁盘并使其重新联机时,对全新的磁盘执行重新镜像会占用很多时间。有时,由于发生磁盘控制器故障,需要使磁盘组中的某个磁盘脱机;不需要重新镜像整个磁盘,只需要重新同步在故障磁盘停止工作时更改的数据。结果,可以使用Oracle Database 11g中引入的ASM快速镜像重新同步功能。

为了实现快速镜像重新同步功能,设置一个时间窗口,在此期间,当发生短暂的计划中或计划外故障时,ASM不会自动删除磁盘组中的磁盘。在短暂故障期间,ASM跟踪所有已经更改的数据块,从而在使不可用的磁盘重新联机时,只需要重新镜像已更改的块,无需重新镜像整个磁盘。

要设置DATA磁盘组的时间窗口,首先将RDBMS实例和ASM实例的磁盘组兼容级别设置为11.1或更高(只需为此磁盘组执行一次该操作):

SQL> alter diskgroup data set attribute 2 'compatible.asm' = '11.1.0.0.0';

Diskgroup altered.

SQL> alter diskgroup data set attribute 2 'compatible.rdbms' = '11.1.0.0.0';

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

Diskgroup altered.

SQL>

31

如果为RDBMS和ASM实例使用更高兼容性级别,副作用是只有版本号为11.1.0.0.0或更高的其他实例才可以访问此磁盘组。接下来,像本例一样,设置磁盘组属性DISK_REPAIR_ TIME:

SQL> alter diskgroup data set attribute 2 'disk_repair_time' = '2.5h';

Diskgroup altered.

SQL>

默认的磁盘修复时间是3.6小时,对于大多数的计划内和计划外(临时)停工而言,这段时间足够了。一旦磁盘重新联机,就运行此命令来通知ASM实例磁盘DATA_0001已经重新联机:

SQL> alter diskgroup data online disk data_0001;

Diskgroup altered.

SQL>

此命令启动后台过程,将磁盘组中其余磁盘上所有更改过的区间复制到已经重新联机的DATA_0001磁盘上。

1.5.5 更改磁盘组

可针对磁盘组添加和删除磁盘;另外,可在不重新创建磁盘组或者不影响磁盘组中对象的用户事务的前提下,更改磁盘组的大多数特征。

为磁盘组添加磁盘时,在对新磁盘进行格式化以便用于磁盘组后,会在后台执行重新平衡操作。如本章前面所述,初始化参数ASM_POWER_LIMIT控制重新平衡的速度。

继续上一节中的例子,假设通过将最近购买的原始磁盘添加到磁盘组中来提高磁盘组DATA的I/O速度,如下所示:

SQL> alter diskgroup data

2 add failgroup d1fg3 disk '/dev/raw/raw8' name d1c;

Diskgroup altered.

此命令立即返回结果,继续在后台执行格式化和重新平衡操作。此后,可以查看V$ASM_OPERATION视图来检查重新平衡操作的状态:

SQL> select group_number, operation, state, power, actual,

2 sofar, est_work, est_rate, est_minutes from v$asm_operation;

GROUP_NUMBER OPERA STAT POWER ACTUA SOFAR EST_WORK EST_RATE EST_MINUTES ------------ ----- ---- ----- ----- ----- -------- -------- -----------

32

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

1 REBAL RUN 1 1 3 964 60 16

由于重新平衡操作大约需要16分钟才能完成,您决定为重新平衡操作分配更多资源,并

更改此特定重新平衡操作的能力限制:

SQL> alter diskgroup data rebalance power 8; Diskgroup altered.

检查此重新平衡操作的状态可知,估计完成时间已经从16分钟减少为4分钟:

SQL> select group_number, operation, state, power, actual,

2 sofar, est_work, est_rate, est_minutes from v$asm_operation;

GROUP_NUMBER OPERA STAT POWER ACTUA SOFAR EST_WORK EST_RATE EST_MINUTES ------------ ----- ---- ----- ----- ----- -------- -------- -----------

1 REBAL RUN 8 8 16 605 118 4

经过4分钟后,再次检查状态:

SQL> /

no rows selected

最后从V$ASM_DISK和V$ASM_DISKGROUP视图确认新磁盘配置情况:

SQL> select group_number, disk_number, name,

2 failgroup, create_date, path from v$asm_disk;

GROUP_NUMBER DISK_NUMBER NAME FAILGROUP CREATE_DA PATH ------------ ----------- ---------- ---------- --------- ---------------

1 2 D1C D1FG3 13-JUL-07 /dev/raw/raw8 3 2 D2C FG3 13-JUL-07 /dev/raw/raw7 3 1 D2B FG2 13-JUL-07 /dev/raw/raw6 3 0 D2A FG1 13-JUL-07 /dev/raw/raw5 2 1 RECOV_0001 RECOV_0001 08-JUL-07 /dev/raw/raw4 2 0 RECOV_0000 RECOV_0000 08-JUL-07 /dev/raw/raw3 1 1 DATA_0001 DATA_0001 08-JUL-07 /dev/raw/raw2 1 0 DATA_0000 DATA_0000 08-JUL-07 /dev/raw/raw1

8 rows selected.

SQL> select group_number, name, type, total_mb, free_mb 2 from v$asm_diskgroup;

GROUP_NUMBER NAME TYPE TOTAL_MB FREE_MB ------------ ---------- ------ ---------- ----------

1 DATA NORMAL 28662 24814 2 RECOV NORMAL 24568 24090 3 DATA2 HIGH 12282 11820

SQL>

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

33

注意,磁盘组DATA虽然已经有3个故障组,但仍然是普通冗余磁盘组。但是,在针对DATA磁盘组的对象执行SELECT语句时,由于磁盘组中可供使用的区间副本更多,I/O性能提高了。

表1-5列出了其他磁盘组ALTER命令。

表1-5 ALTER DISKGROUP命令 ALTER DISKGROUP命令 ALTER DISKGROUP ... DROP DISK 说 明 从磁盘组内的故障组中删除磁盘,然后自动执行重新平衡操作 使用一条命令,从故障组中删除一个磁盘,并添加另一个磁盘 使磁盘组可供所有实例使用 使所有实例都不能使用磁盘组 确认磁盘组的内部一致性 ALTER DISKGROUP ... DROP ... ADD ALTER DISKGROUP ... MOUNT ALTER DISKGROUP ... DISMOUNT ALTER DISKGROUP ... CHECK ALL

1.5.6 企业管理器Database Control与ASM磁盘组

也可以使用Enterprise Manager(企业管理器,EM) Database Control来管理磁盘组。对于使用ASM磁盘组的数据库,可以单击Administration选项卡中的Disk Groups链接来打开ASM实例的登录页,如图1-7所示。注意,ASM实例的身份验证仅使用操作系统身份验证。图1-8显示ASM实例的主页。

图1-7 EM Database Control ASM实例登录页

34

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

图1-8 EMDatabase Control ASM实例主页

在通过身份验证连接到ASM实例后,可以像在本章前面的命令行中那样执行相同的操作:安装和卸载磁盘组、添加磁盘组以及添加或删除磁盘组成员等。图1-9显示ASM管理页的Disk Groups选项卡,而图1-10显示磁盘组DATA的统计信息和选项。

图1-9 EM Database Control ASM磁盘组管理页

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

35

图1-10 EM Database Control ASM磁盘组统计信息

在图1-10显示的页面中可以看到,磁盘组中的新磁盘明显小于此组中的其他磁盘;这会影响性能,也会浪费磁盘组中的磁盘空间。要使用EM Database Control删除故障组,请选中成员磁盘对应的复选框,然后单击Remove按钮。

EM Database Control其他与ASM相关的页面显示磁盘组的I/O响应时间,为磁盘组定义的模板,以及可用于此ASM实例的初始化参数等。

1.5.7 使用asmcmd命令

Oracle 10g第2版中引入的asmcmd是一个命令行实用程序,使用此实用程序,可以通过与Linux外壳命令(诸如ls和mkdir)类似的命令集方便地浏览和维护ASM磁盘组中的对象。ASM实例中维护的对象具有层次特点,因此它适用于与用来浏览和维护Linux文件系统中文件的命令集相似的命令集。

使用asmcmd前,必须确保已将ORACLE_BASE、ORACLE_HOME和ORACLE_SID环境变量设置为指向ASM实例;对于本章使用的ASM实例,可按如下方式设置这些变量:

ORACLE_BASE=/u01/app/oracle

ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1 ORACLE_SID=+ASM

另外,由于asmcmd实用程序使用SYSDBA权限连接到数据库,因此必须以dba组中的用户的身份登录到操作系统。操作系统用户通常是oracle,不过,也可以使用dba组中的其他任何用户。

36

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

使用asmcmd实用程序时,可以使用asmcmd command格式,每次使用一条命令;也可以通过在Linux外壳提示符下仅键入asmcmd,以交互方式启动asmcmd。要获得可用命令的列表,请在ASMCMD>提示符下键入help。表1-6列出了asmcmd命令,并简要介绍了命令的作用。仅能用于Oracle Database 11g的asmcmd命令对应的中间列标为Y,意即是。

表1-6 asmcmd命令一览 asmcmd命令 cd cp 仅适用于11g 说 明 将目录更改为指定的目录 在ASM磁盘组(在同一实例中或者在远程实例中)之间复制文件 以递归方式显示当前目录及其所有子目录使用的磁盘空间总量 终止asmcmd,然后返回到操作系统外壳提示窗口 查找所有以指定目录开头的名称(也使用通配符) 列出asmcmd命令 列出当前目录的内容 列出当前ASM客户端数据库的相关信息 列出所有磁盘组及其属性 列出ASM实例可以访问的所有磁盘 为指定的磁盘组创建元数据备份脚本 使用备份内容来还原磁盘组 为系统生成的ASM文件名创建别名 创建ASM目录 显示当前的ASM目录 修复磁盘上一系列受损的物理块 删除ASM文件或目录 删除ASM别名,但不删除别名的目标 Y du exit find help ls lsct lsdg lsdsk md_backup md_restore mkalias mkdir pwd remap rm rmalias Y Y Y Y 启动asmcmd实用程序时,从ASM实例的文件系统的根节点开始,与Linux文件系统不同,根节点由加号(+)而不是前导正斜杠(/)来指定,但后续目录级别使用正斜杠。在本例中,启动asmcmd,查询现有的磁盘组以及所有磁盘组使用的总磁盘空间:

[oracle@dw ~]$ asmcmd ASMCMD> ls –l State Type Rebal Unbal Name MOUNTED NORMAL N N DATA/ MOUNTED HIGH N N DATA2/ MOUNTED NORMAL N N RECOV/ ASMCMD> du

Used_MB Mirror_used_MB

2143 4399

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

ASMCMD> pwd +

ASMCMD>

37

如此处的Linux外壳命令ls所示,可以附加–l来获得命令检索到的更详细对象列表。ls命令显示本章一直使用的ASM实例中的3个磁盘组:+DATA、+DATA2和+RECOV。

另外注意,du命令仅显示每个镜像磁盘组已用的磁盘空间和总磁盘空间;要获得每个磁盘组的可用空间量,请改用lsdg命令。

在本例中,希望查找文件名中包含字符串user的所有文件:

ASMCMD> pwd +

ASMCMD> find . user*

+DATA/DW/DATAFILE/USERS.259.627432977 +DATA/DW/DATAFILE/USERS2.267.627782171 +DATA/purch/users.dbf

+DATA2/DW/DATAFILE/USERS3.256.627786775 ASMCMD> ls -l +DATA/purch/users.dbf Type Redund Striped Time Sys Name

N users.dbf =>

+DATA/DW/DATAFILE/

USERS.259.627432977 ASMCMD>

注意+DATA/purch/users.dbf行:find命令将查找所有ASM对象;在本例中,它查找与模式匹配的别名和数据文件。 练习1-1 用asmcmd实用程序创建SPFILE的副本

在本练习中,您将在ASM文件层次结构中找到SPFILE,并在ASM实例以外的文件系统创建备份副本。您将使用cp命令,将数据库的SPFILE复制到主机文件系统的/tmp目录中。

(1) 在文件系统的根节点开始,导航到dw实例的DATA磁盘组:

[oracle@dw ~]$ asmcmd ASMCMD> pwd +

ASMCMD> ls DATA/ RECOV/

ASMCMD> cd data/dw ASMCMD> pwd +data/DW ASMCMD> ls CONTROLFILE/ DATAFILE/ ONLINELOG/

PARAMETERFILE/ TEMPFILE/ spfiledw.ora

38

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

(2) 使用cp命令复制SPFILE:

ASMCMD> cp spfiledw.ora /tmp/BACKUPspfiledw.ora source +data/DW/spfiledw.ora target /tmp/BACKUPspfiledw.ora copying file(s)...

file, /tmp/BACKUPspfiledw.ora, copy committed. ASMCMD> exit

[oracle@dw ~]$ ls -l /tmp/BACKUP*

-rw-r----- 1 oracle oinstall 2560 Jan 27 09:47 /tmp/BACKUPspfiledw.ora [oracle@dw ~]$

本练习显示如何将数据库dw的所有数据库文件存储在ASM文件系统中。它看似存储在传统的主机文件系统中,实则由ASM管理,提供了内置的性能和冗余功能(做了优化,以便用于Oracle Database 11g),使DBA可以更加方便地管理数据文件。

1.6 本章小结

本章开头简要介绍Oracle数据库体系结构。虽然前一门课程中已经讲述了其中的一些内容,但通过阅读本章,您可以温故知新,更好地完成日常的数据库管理工作。更重要的是,要了解ASM磁盘组存储和管理Oracle表空间的方式,先要了解基本的Oracle表空间基础结构知识。此外,了解基本Oracle后台进程体系结构正好与ASM和RDBMS实例中使用的ASM相关后台进程吻合。

本章接着讨论如何创建ASM实例,以及如何设置与ASM相关的各种初始化参数(最好存储在SPFILE中)。与RDBMS实例一样,有很多动态性能视图包含有关ASM磁盘组、磁盘组中的每个磁盘以及每个磁盘组中存储的文件的信息。动态性能视图V$ASM_FILE详细说明磁盘组中的文件,如RMAN备份集、联机重做日志文件、归档重做日志文件和数据文件。

本章还介绍了如何启动和关闭ASM实例。DBA在关闭和启动ASM实例时,必须了解ASM实例与连接到ASM实例中磁盘组的任何RDBMS实例之间的依赖关系。

本章最后深入介绍了ASM磁盘组的管理。这些管理任务包括如何以最有效的方式使用ASM磁盘组中的3种镜像类型:外部冗余、普通冗余和高度冗余。此外,介绍了在Oracle Database 11g中引入的多个功能,如磁盘组快速镜像重新同步功能(如果磁盘组中的磁盘脱机,或因除介质故障外的其他原因变得不可用,此功能可将重新同步磁盘组的时间压缩到最低限度)。命令行实用程序asmcmd使用为人熟知的Unix命令(如ls、mkdir和cp)提供ASM磁盘组结构的视图。

本章知识点回顾

了解数据库体系结构和ASM

● Oracle数据库逻辑结构包括表空间、段、区间和块(按粒度等级排列)。 ● 数据库必须至少包含一个SYSTEM和一个SYSAUX表空间。

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

39

● Oracle数据库物理结构包括数据文件、重做日志文件、控制文件、归档日志文件、初

始化参数文件、警报/跟踪文件和备份文件。

● Oracle内存结构包括系统全局区(SGA)、程序全局区(PGA)和软件代码区。

● 主要Oracle后台进程包括SMON、PMON、DBWn、LGWR、ARCn、CKPT和RECO。 ● 支持ASM实例的后台进程是RBAL和ARBn;使用ASM磁盘的数据库包含ASMB和

RBAL后台进程。

描述ASM

● ASM需要一个专门用于管理共享磁盘的实例,即ASM实例。

● 在针对ASM磁盘组添加或删除磁盘时,会自动地在后台重新平衡ASM磁盘组中的

磁盘。

● ASM实例的RBAL后台进程协调磁盘组的磁盘活动。ARBn进程在磁盘组的磁盘之间

执行实际的区间移动操作。

● RDBMS实例中的ASMB后台进程执行数据库与ASM实例之间的通信;RBAL后台进

程为RDBMS实例执行打开和关闭磁盘组中的磁盘的操作。 ● ASM实例有一个初始化参数文件和一个密码文件,但由于ASM实例不存在数据文件,

所以不存在数据字典;ASM实例的所有连接使用操作系统身份验证。

● ASM实例的新SYSASM权限促进了ASM实例的存储管理与数据库管理的分离。

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

● 对于ASM实例,初始化参数INSTANCE_TYPE是ASM;对于RDBMS实例,值是

RDBMS。

● 对于ASM实例,DB_UNIQUE_NAME是+ASM。

● ASM_POWER_LIMIT控制重新平衡操作的速度,取值范围是1~11。

● ASM_PREFERRED_READ_FAILURE_GROUPS包含RDBMS实例的首选故障组列表

(在使用集群ASM实例时)。

● 可在ASM实例和RDBMS实例中使用除以下视图外的所有ASM相关动态性能视图:

V$ASM_FILE、V$ASM_OPERATION和V$ASM_ALIAS。

● 完全限定的ASM文件名的格式为:+group/dbname/file type/tag .file.incarnation。 ● 数值ASM文件名仅对现有ASM文件有效。

● ASM模板是指定ASM磁盘组的冗余类型和条带化的快捷方法。 ● ASM磁盘组的冗余类型是外部冗余、普通冗余和高度冗余。 ● ASM磁盘组条带化有精细和粗糙两种类型。

启动和关闭ASM实例

● 使用STARTUP命令时,ASM实例处于MOUNT状态。ASM实例不能像RDBMS实

例那样处于OPEN状态。

● 在ASM实例中使用STARTUP RESTRICT可以避免数据库实例访问由ASM实例控制

的磁盘组。

40

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

● 如果在ASM实例上执行SHUTDOWN操作,会在所有已经连接的RDBMS实例上执

行SHUTDOWN操作。

管理ASM磁盘组

● 粗略条带化在所有磁盘上分布文件时的单位是1MB;精细条带化分布文件时的单位是

128KB。

● 粗略条带化适用于小型I/O请求十分密集的环境,如OLTP环境。精细条带化适用于

数据仓库环境,并将每个I/O请求的响应时间最大化。

● 故障组是磁盘组中的一个或多个磁盘,故障组共享一个公共资源,如磁盘控制器。 ● 外部冗余适用于由RAID控制器在外部管理的非临界性磁盘组或磁盘。 ● 普通冗余提供双向镜像,要求一个磁盘组中有两个故障组。 ● 高度冗余提供三向镜像,一个磁盘组中至少有3个故障组。 ● 在非常低的级别管理镜像。镜像区间(而非磁盘)。 ● 磁盘组中的每个磁盘都同时包含主区间和镜像区间。

● 以动态方式在磁盘组中自动执行重新平衡操作,以便按比例将其他磁盘组成员的数据

重新分配给新磁盘组成员。

● ASM文件通常是由Oracle管理的文件(Oracle Managed Files,OMF),但也可以对其手

动管理。

● 快速镜像重新同步功能是Oracle Database 11g中引入的新功能,如果磁盘由于诸如控

制器失败的原因而出现故障,此功能可以加快重新镜像磁盘的速度。在将磁盘重新联机时,只需要重新同步已经更改的数据。

● 默认的磁盘修复时间长度是3.6小时,具体由初始化参数DISK_REPAIR_TIME控制。 ● 可以使用动态性能视图V$ASM_OPERATION监视重新平衡磁盘的操作。 ● 可以使用asmcmd命令行实用程序浏览和维护ASM磁盘组中的对象。

● Oracle Database 11g中引入的新asmcmd命令包括cp、lsdsk、md_backup、md_restore

和remap。

1.7 本章测试题

1.7.1 自测题

以下练习题将测试您对本章学习内容的理解程度。正确答案可能不止一个。请认真分析所有选项,并为每个问题选择所有正确答案。

了解数据库体系结构和ASM

1. 在Oracle Database 11g安装中,下面的哪些表空间是必需的(选择所有正确的答案)? A. USERS B. SYSTEM C. SYSAUX D. TEMP

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

41

E. UNDOTBS1 F. RMAN

2. 在Oracle数据库实例中,最多有几个数据库写入器进程(DBWn)? A. 1 B. 10 C. 20

D. 无,只有ASM实例中才有数据库写入器进程。 描述ASM

3. 下面的哪些后台进程同时存在于ASM实例和RDBMS实例中,并且同时支持ASM磁盘组

(选择所有正确的答案)? A. ASMB B. RBAL C. ARBn D. LGWR E. ARCn

4. ASM执行哪个级别的镜像操作? A. 数据库对象级别 B. 表空间级别 C. 磁盘卷级别

D. ASM不支持镜像操作,它仅支持具备RAID功能的磁盘硬件。

设置ASM和数据库实例的初始化参数

5. ASM实例的SPFILE(或init.ora文件)中的INSTANCE_TYPE的值是多少? A. RDBMS B. ASM C. +ASM

D. NOMOUNT

E. 不存在INSTANCE_TYPE这样一个初始化参数

6. 以SYSOPER身份通过连接的RDBMS实例连接到ASM实例,并运行以下命令:

SQL> shutdown immediate

会发生什么情况?

A. 立即关闭ASM实例,使用ABORT选项关闭所有已经连接的RDBMS实例。

B. 立即关闭ASM实例,使用IMMEDIATE选项关闭所有已经连接的RDBMS实例。 C. 会忽略此命令,原因在于SYSOPER角色无权启动或关闭ASM实例。 D. 由于至少有一个已经连接的RDBMS实例,所以不会关闭ASM实例。

7. ASM实例的初始化参数ASM_DISKGROUPS的值是DATA、RECOV和DATA2。启动ASM实例时会出现什么情况(选择一个最佳答案)?

42

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

A. 发出ALTER DISKGROUP MOUNT命令前什么都不会发生。

B. ASM实例自动安装磁盘组,可以手动安装未在列表中列出的任何磁盘组。 C. ASM_DISKGROUPS仅对RDBMS实例有效。

D. DATA、RECOV和DATA2磁盘设备可用于创建新磁盘组。

8. 在下面的参数中,哪些是ASM实例的必需参数(选择所有正确的答案)? A. INSTANCE_NAME B. INSTANCE_TYPE C. ASM_DISKGROUPS D. ASM_POWER_LIMIT

E. ASM_PREFERRED_READ_FAILURE_GROUPS 启动和关闭ASM实例

9. 如果已经连接的RDBMS实例发生故障,ASM实例的状态会有什么变化? A. ASM实例不受影响。 B. ASM实例失败。

C. ASM实例将自行关闭。

D. 在重新启动失败RDBMS实例前,其他所有已经连接的RDBMS实例将会暂停。 E. ASM实例针对失败的RDBMS实例执行实例恢复,继续为其他RDBMS客户端提供支持。

10. ASM实例的可能状态有哪些(选择所有正确的答案)? A. OPEN B. MOUNT C. NOMOUNT D. RESTRICT 管理ASM磁盘组

11. 磁盘组中的文件的粗略条带化和精细条带化有什么区别?

A. 粗略条带化在所有磁盘分布文件的分布单元是1MB,而精细条带化的分布单元是64KB。

B. 粗略条带化在所有磁盘分布文件的分布单元是1MB,而精细条带化的分布单元是128KB。

C. 粗略条带化在所有磁盘分布文件的分布单元是64MB,精细条带化的分布单元是1MB。

D. 粗略条带化在所有磁盘分布文件的分布单元是4MB,而精细条带化的分布单元是128KB。

12. 什么情况下为ASM磁盘组中的对象使用精细条带化(选择所有正确的答案)?

A. 传统的数据仓库环境

B. 并发程度很低的OLTP系统 C. 并发程度很高的OLTP系统 D. 混合数据仓库和OLTP环境

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

43

E. I/O请求不多但并发程度很高的环境

13. 何时适于使用不完整的ASM文件名(选择所有正确的答案)?

A. 创建单个文件的操作 B. 创建多个文件的操作 C. 引用单个数据库对象

D. 引用由多个非RAC RDBMS实例共享的同一对象

14. 如果要为新磁盘组使用双向镜像(普通冗余),需要多少个故障组?

A. 配置两块磁盘的一个故障组,这两块磁盘在同一个控制器上。 B. 两个故障组。

C. 3个或更多故障组。

D. 只能使用RAID硬件或软件镜像解决方案,在操作系统级别支持双向镜像。 15. 在下面对ASM对象及别名的描述中,哪些是正确的(选择所有正确的答案)?

A. 可使用ALTER DISKGROUP ADD ALIAS命令为现有对象添加更好理解的别名。 B. 可使用别名引用现有对象。 C. 可使用别名创建新对象。

D. 可在创建多个对象时使用别名。

E. 别名的结尾处通常包含带点的编号对。 F. 可使用单个别名来引用现有对象组。

16. 不带选项创建的ASM文件有哪些默认特征?

A. 条带化ASM对象,但不予以镜像化。

B. 默认方式下,会条带化和镜像化ASM对象。 C. 镜像化ASM对象,但不予以条带化。 D. 既不条带化,也不镜像化ASM对象。

1.7.2 实践题

对于本章前面“以动态方式重新平衡磁盘组”一节中创建的DATA2磁盘组,请删除一个故障组。磁盘空间十分宝贵,不需要磁盘组的四路冗余。

1.7.3 自测题答案

了解数据库体系结构和ASM

1. 正确答案是B和C。SYSTEM和SYSAUX表空间是必需的。A、D、E和F是错误的。虽然要将应用程序表放在其表空间中,USERS表空间是十分可取的,但此表空间不是必需的。TEMP、USERS和UNDOTBS1在Oracle Database 11g的默认安装中创建。在Oracle Database 11g安装中,不创建RMAN表空间,此表空间也不是必需的。

2. 正确答案是C。数据库写入器进程是DBW0到DBW9,如有必要,也可以是DBWa到DBWj (适用于大多数操作系统平台)。A、B和D是错误的。数据库写入器仅存在于RDBMS实例中。

44

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

描述ASM

3. 正确答案是B。只有RBAL进程同时存在于ASM和RDBMS实例中以执行ASM操作。RBAL协调ASM实例的磁盘组的磁盘活动。RBAL代表数据库打开和关闭RDBMS实例的磁盘组中的磁盘。

A是错误的,因为ASMB仅存在于使用ASM磁盘的RDBMS实例中。C是错误的,ARBn只存在于ASM实例中,并在磁盘组的磁盘之间移动区间。D是错误的,因为LGWR仅存在于RDBMS实例中,与ASM无关;它将重做信息写入联机重做日志文件。E是错误的,ARCn仅存在于RDBMS实例中,与ASM无关;如果数据库处于ARCHIVELOG模式,它将联机重做日志文件写入归档重做日志文件。

4. 正确答案是A。ASM仅镜像数据库对象。B、C和D是错误的。ASM镜像数据库对象的目的是根据类型灵活地镜像化或条带化每个数据库对象。如果RAID硬件或操作系统已经镜像了给定对象的底层对象,ASM无需镜像此对象。

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

5. 正确答案是B。正如您可能期望的,对ASM实例而言,INSTANCE_TYPE的值是ASM。A、C、D和E是错误的。A仅适用于RDBMS(数据库)实例。C是ASM实例的DB_UNIQUE_NAME的值。D是STARTUP命令的选项。

6. 正确答案是D。在使用IMMEDIATE选项关闭ASM实例前,必须关闭所有连接的RDBMS实例。如果使用ABORT选项停止ASM实例,则必须停止所有已经连接的RDBMS实例。A是错误的,因为只有使用ABORT选项关闭ASM实例或ASM实例崩溃时,才使用ABORT关闭ASM实例。B是错误的,必须首先显式关闭已经连接的RDBMS实例。C是错误的,因为SYSOPER虽不及SYSDBA或SYSASM权限大,但有权启动和关闭ASM实例。

7. 正确答案是B。ASM实例会自动安装指定的磁盘组,可以手动安装未在列表中列出的任何磁盘组。A是错误的,因为ASM_DISKGROUPS有助于在启动时自动安装指定的磁盘组。C是错误的,ASM_DISKGROUPS仅适用于ASM实例。D是错误的,ASM_DISKGROUPS参数包含现有的磁盘组,而不包含磁盘组的原始设备。

8. 正确答案是B。只有INSTANCE_TYPE参数是必需的,其值必须是ASM。A、C、D和E是错误的。ASM_DISKGROUPS可为空,但必须在启动ASM实例后手动安装磁盘组。如果未设置ASM_POWER_LIMIT,ASM_POWER_LIMIT的默认值是1;ASM_PREFERRED_ READ_FAILURE_GROUPS是Oracle Database 11g引入的新参数,它指定与实例的节点最接近的首选故障组,以便提高集群ASM环境中的性能。

启动和关闭ASM实例

9. 正确答案是A。ASM实例继续服务于其他RDBMS客户端。失败的RDBMS客户端重新启动和恢复后,ASM实例将准备服务恢复后的RDBMS实例。B、C、D和E是错误的。一个或多个已经连接的RDBMS实例的失败不影响ASM实例的状态。ASM实例不为任何已经连接的RDBMS实例执行实例恢复操作。

10. 正确答案是B、C和D。可将ASM实例置于NOMOUNT模式;会启动实例,但不安装任何ASM磁盘。MOUNT状态安装ASM_DISKGROUPS初始化参数中的所有ASM磁盘;

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

45

可以使用STARTUP RESTRICT临时阻止RDBMS实例访问已经安装的磁盘组;A是错误的,ASM实例不能像RDBMS实例那样处于OPEN状态。

管理ASM磁盘组

11. 正确答案是B。粗略条带化在所有磁盘分布文件时的分布单元是1MB,精细条带化分布文件时的分布单元是128KB。注意,条带化在数据库对象级别执行,不在文件或磁盘故障组级别执行。A、C和D是错误的。这些条带化组合都不适用于ASM磁盘组中的文件。

12. 正确答案是A和B。精细条带化适用于并发程度低的传统数据仓库环境或OLTP系统,这会将单个I/O请求的响应时间最小化。C、D和E是错误的。粗略条带化更适用于I/O请求小但并发程度高的系统。混合数据仓库和OLTP环境要求混合精细条带化和粗略条带化,具体取决于对象。注意,可以逐一条带化同一磁盘组中的不同对象类型。例如,一个表空间可用于OLTP事务(粗略条带化),另一个空间用于数据仓库星模式(精细条带化)。

13. 正确答案是A和B。在创建单个文件或多个文件时,可以使用不完整的ASM文件名。例如,可以创建一个表空间,并只指定磁盘组名;ASM实例使用OMF来完全限定磁盘组中的表空间的内部名。C是错误的,因为解析名称不完整的数据库对象(例如磁盘组名称)。D是错误的,因为可以在RAC环境中的多个RDBMS实例之间(而不是独立RDBMS实例之间)共享磁盘组。

14. 正确答案是B。双向镜像磁盘组要求使用两个故障组。A是错误的,因为单个控制器上的两个磁盘有一个故障点,不支持双向镜像。C是错误的,3个或更多磁盘组适用于高度冗余磁盘组。D是错误的,虽然可以为任何类型的ASM磁盘组镜像解决方案使用操作系统RAID解决方案,但通常为针对外部冗余定义的磁盘组使用操作系统或硬件RAID解决方案。

15. 正确答案是A、B和C。使用ALTER DISKGROUP ADD ALIAS命令为现有对象添加别名;可以使用别名引用现有对象或创建新对象。D是错误的,因为只能为单个对象创建别名。E是错误的,因为别名的结束处并不是带点的编号对;对于结束处包含带点编号对的完全限定对象名,通常将创建更好理解的别名。F是错误的,因为单个别名只能引用磁盘组中的单个数据库对象。

16. 正确答案是B。默认情况下,会条带化和镜像化所有ASM对象;不能禁用条带化,但可以在创建磁盘组时使用EXTERNAL REDUNDANCY子句禁用镜像。A、C和D是错误的。可以禁用镜像,但为了提高性能,始终在磁盘组中启动条带化。

1.7.4 实践题答案

磁盘空间紧张,不需要包含4个成员的DATA2磁盘组。运行一个查询,将V$ASM_ DISKGROUP和V$ASM_DISK连接起来,确认构成DATA2磁盘组的ASM磁盘的列表:

SQL> select dg.name diskgroup, dg.type, d.disk_number, 2 d.name asmdisk, d.failgroup, d.path 3 from v$asm_diskgroup dg join v$asm_disk d using(group_number) 4 where dg.name = 'DATA2';

DISKGROUP TYPE DISK_NUMBER ASMDISK FAILGROUP PATH ------------ ------ ----------- ---------- ------------ ----------------- DATA2 HIGH 0 D2A FG1 /dev/raw/raw5

46

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

DATA2 HIGH 3 D2D FG4 /dev/raw/raw8 DATA2 HIGH 2 D2C FG3 /dev/raw/raw7 DATA2 HIGH 1 D2B FG2 /dev/raw/raw6

SQL>

高度冗余磁盘组只需3个故障组,因此要删除此磁盘组,并重新创建它,使其只有3个成员:

SQL> drop diskgroup data2; Diskgroup dropped.

如果磁盘组包含除磁盘组元数据外的其他数据库对象,则必须在DROP DISKGROUP命令中指定INCLUDING CONTENTS子句。这是一个额外保障,以免在无意间删除包含数据库对象的磁盘组。下面的命令重新创建包含3个磁盘的磁盘组:

SQL> create diskgroup data2 high redundancy 2 failgroup fg1 disk '/dev/raw/raw5' name d2a 3 failgroup fg2 disk '/dev/raw/raw6' name d2b 4 failgroup fg3 disk '/dev/raw/raw7' name d2c; Diskgroup created.

SQL> select group_number, disk_number, name, 2 failgroup, create_date, path from v$asm_disk;

GROUP_NUMBER DISK_NUMBER NAME FAILGROUP CREATE_DA PATH ------------ ----------- ------- ---------- --------- ---------------

0 3 24-FEB-08 /dev/raw/raw8 3 2 D2C FG3 24-FEB-08 /dev/raw/raw7 3 0 D2A FG1 24-FEB-08 /dev/raw/raw5 3 1 D2B FG2 24-FEB-08 /dev/raw/raw6 2 1 RECOV_0001 RECOV_0001 09-AUG-07 /dev/raw/raw4 2 0 RECOV_0000 RECOV_0000 09-AUG-07 /dev/raw/raw3 1 1 DATA_0001 DATA_0001 10-AUG-07 /dev/raw/raw2 1 0 DATA_0000 DATA_0000 10-AUG-07 /dev/raw/raw1

8 rows selected. SQL>

46

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

DATA2 HIGH 3 D2D FG4 /dev/raw/raw8 DATA2 HIGH 2 D2C FG3 /dev/raw/raw7 DATA2 HIGH 1 D2B FG2 /dev/raw/raw6

SQL>

高度冗余磁盘组只需3个故障组,因此要删除此磁盘组,并重新创建它,使其只有3个成员:

SQL> drop diskgroup data2; Diskgroup dropped.

如果磁盘组包含除磁盘组元数据外的其他数据库对象,则必须在DROP DISKGROUP命令中指定INCLUDING CONTENTS子句。这是一个额外保障,以免在无意间删除包含数据库对象的磁盘组。下面的命令重新创建包含3个磁盘的磁盘组:

SQL> create diskgroup data2 high redundancy 2 failgroup fg1 disk '/dev/raw/raw5' name d2a 3 failgroup fg2 disk '/dev/raw/raw6' name d2b 4 failgroup fg3 disk '/dev/raw/raw7' name d2c; Diskgroup created.

SQL> select group_number, disk_number, name, 2 failgroup, create_date, path from v$asm_disk;

GROUP_NUMBER DISK_NUMBER NAME FAILGROUP CREATE_DA PATH ------------ ----------- ------- ---------- --------- ---------------

0 3 24-FEB-08 /dev/raw/raw8 3 2 D2C FG3 24-FEB-08 /dev/raw/raw7 3 0 D2A FG1 24-FEB-08 /dev/raw/raw5 3 1 D2B FG2 24-FEB-08 /dev/raw/raw6 2 1 RECOV_0001 RECOV_0001 09-AUG-07 /dev/raw/raw4 2 0 RECOV_0000 RECOV_0000 09-AUG-07 /dev/raw/raw3 1 1 DATA_0001 DATA_0001 10-AUG-07 /dev/raw/raw2 1 0 DATA_0000 DATA_0000 10-AUG-07 /dev/raw/raw1

8 rows selected. SQL>

本文来源:https://www.bwwdw.com/article/ofar.html

Top