3.1 为Oracle自动存储管理(ASM)配置存储空间

Grid Infrastructure包含ASM功能:管理用于Oracle数据库文件的存储空间。在早期版本(版本11.1.x 之前),ASM附带为数据库软件的一部分,但从11.2.x 版本以后,它变成GI的一部分。GI是一组过程,运行为操作系统的一部分:在Windows上,服务用管理员权限运行,在Linux上,后台过程用根权限运行。GI过程启动一个ASM实例。在某些方面,ASM实例类似于所有数据库管理员都很熟悉的关系数据库管理系统(RDBMS)实例,但其目标完全不同:它管理设备,使其可用于RDBMS实例来存储文件。这些设备必须在安装GI之前,由系统管理员配置。

3.1.1 GI体系结构

GI由一组进程组成,所有进程都为防止失败进行了保护。核心进程是High Availability Services 守护进程(OHASD)。它由操作系统保护。如果它失败,操作系统就重启动它。接着OHASD启动并监控一组其他进程,这些进程则启动并监控数据库实例使用的资源。这些资源是ASM和数据库侦听器。

提示:

可以从数据库主目录或GI主目录下运行数据库侦听器。最佳实践方式是仅运行一个侦听器(如果安装了GI,就从GI主目录下运行)。

GI维护一组资源,这组资源在它的控制下运行。这些资源可以包含如下一个或所有选项:

● 数据库侦听器

● 虚拟IP地址

● ASM实例(只有一个)

● ASM磁盘组

● 数据库实例

● 第三方产品

注册表在文件Oracle Local Registry(OLR)中。OLR的位置由与平台相关的指针指定。在Linux上,该指针是文件/etc/Oracle/olr.loc。在Windows上,它是注册键HKEY_LOCAL_MACHINE/SOFTWARE/Oracle/olr/olrconfig_loc。

资源在OLR中用crsctl实用工具注册。这些注册包括如何启动和停止资源、应在哪个操作账户下运行、如果失败该怎么办的细节。GI守护进程使用这些信息管理资源。

crsctl实用工具也用于停止和启动GI进程(包括OHASD),以及管理注册的资源。另一个管理工具是srvctl实用程序。srvctl可以管理Oracle资源,但不能管理可以在GI控制下注册、放置的任何第三方产品。在语法上,它比crsctl实用工具容易使用得多(且不容易出错)。

考点:

GI进程和任何资源都可以用crsctl实用工具管理。srvctl实用工具只能管理Oracle资源,不能管理GI或第三方资源。

3.1.2 ASM体系结构

ASM是一个逻辑卷管理器(LVM),可用于配置带区的卷和镜像的卷,来存储Oracle 数据库文件。这些卷称为磁盘组。磁盘组不使用操作系统可见的文件系统进行格式化;它们只能用于Oracle数据库文件,这些文件只能用Oracle产品和实用工具来管理。

为理解ASM文件和Oracle数据库文件之间的关系,可研究如图3-1所示的实体-关系图。

图3-1 ASM存储模型

ASM文件位于磁盘组上,由一个或多个ASM磁盘组成。ASM磁盘格式化为分配单元(AU)。AU分组为文件区,一个文件由一个或多个文件区组成。实际上,ASM文件和ASM磁盘之间是多对多关系。一个文件可以分布在许多磁盘上,一个磁盘可以包含许多文件的不同部分。优秀的关系工程师不允许多对多关系,该关系以两种方式解析:通过磁盘组实体解析,通过文件区和AU路径解析。任何一个文件区都在一个ASM磁盘上包含连续的AU。ASM文件用其区域地图来定义,区域地图就是一个指针列表,这些指针指向其文件区的物理位置。

ASM由ASM实例管理。ASM实例包含内存组件和后台进程;它是一个轻型结构,管理ASM环境。它跟踪定义文件位置的区域地图,根据RDBMS实例使用文件的要求,在文件中添加或删除文件区域。

ASM实例有一个系统全局区(System Global Area, SGA),它接受会话的方式与RDBMS实例相同,但它只能处于非装载模式。ASM实例从来不会装载控制文件,它没有数据字典。因此,登录它的唯一方式是使用操作系统验证或密码文件验证。

ASM引导程序执行如下操作:

(1) 操作系统启动GI进程。

(2) GI启动ASM实例。

(3) ASM实例定位ASM磁盘设备。

(4) ASM实例用GI装载磁盘组,注册它们。

(5) RDBMS实例启动。

(6) RDBMS实例需要一个ASM磁盘组上的文件。

(7) RDBMS从GI中请求ASM实例地址。

(8) RDBMS实例登录到ASM实例上,请求访问ASM文件。

(9) ASM实例返回文件的区域地图。

(10) RDBMS实例打开文件。

总之,打开ASM文件时,GI会建立RDBMS和ASM实例之间的连接,接着ASM实例建立RDBMS实例和文件之间的连接。

考点:

数据不通过ASM实例传递。所有的I/O都在RDBMS实例和文件之间进行。ASM实例仅是一个控制结构。

ASM磁盘组只能存储数据库文件,但它定义了许多数据库文件,包括如下文件类型:

● 控制文件

● 数据文件

● 临时文件

● 联机日志文件

● 归档日志文件

● 服务器参数文件

● 密码文件

● RMAN备份

● Data Pump转储文件

下面的文件类型不能存储在ASM磁盘组上:

● Oracle Home

● 跟踪文件或警报日志

● pfile初始化文件

● 用户托管的备份

3.1.3 ASM磁盘

ASM磁盘这个术语有点误导作用,因为该设备并不是实际的磁盘。

● 直接关联的存储(DAS)设备的分区

● 存储区网络(SAN)设备

● 与网络关联的存储(NAS)设备

DAS设备是物理关联到服务器上的磁盘。这一般意味着SCSI磁盘或某些变体。在早期版本中,可以给ASM提供完整的原始磁盘用作ASM磁盘,但现在很少建议这么做了。而是要求磁盘有一个分区表,甚至在磁盘上只定义了一个覆盖整个磁盘的分区的情况下也要有一个分区表。接着把分区提供给ASM。

SAN设备通常是带区(也可能是镜像的)的卷,由一个存储数组管理,通过光导纤维连接到服务器上。它们提供给ASM,作为逻辑单元号(LUN)。这些卷的尺寸没有实际的限制。用合适的RAID算法给卷分区会提高性能。镜像可以在SAN级别上启用,或用ASM管理。

NAS设备一般是iSCSI卷或NFS文件。iSCSI设备通过iSCSI目标机器导出到网络上,由iSCSI启动器装载到数据库服务器上。在从NFS服务器导出的NFS卷上,NFS文件是填充了0的大文件,由数据库服务器装载。当然,NAS设备的底层存储空间可以是RAID设备, NAS层在ASM中隐藏了它。数据库服务器和存储服务器之间的局域网连接应是高速的,专用于这个功能。可以建议使用多路径,以增加带宽,提高对抗网络失败的弹性。

DAS、SAN或iSCSI设备(不应使用任何文件系统进行格式化)用设备驱动程序来标识。NFS文件用完全限定的文件名来标识。无论使用什么方式,ASM实例都需要确定应使用什么设备。ASM实例通过一个参数文件来控制,其方式与RDBMS实例相同。一个重要的参数是ASM_DISKSTRING,它是一个以逗号分隔的值列表(可以包含通配符),用于标识ASM磁盘。设备的命名方式,以及包含在ASM_DISKSTRING中的值,都与平台相关。表3-1所示是一些常见操作系统的默认值:

表3-1 常见操作系统的默认值

一定要注意,默认值可能定位到不适合ASM使用的磁盘。此时,只有设置参数,才能找到合适的设备。

3.1.4 创建ASM磁盘

磁盘的创建由系统管理员完成。之后,每个磁盘设备都可以通过设备驱动程序来访问。设备驱动程序由操作系统在启动时创建。在启动过程中,操作系统会扫描各种I/O总线,并为每个找到的设备创建设备驱动程序。因为这是一个动态进程,所以在每次启动时,都可能为每个设备指定不同的设备驱动程序。而且,在创建后,设备驱动程序就由根所有。

为了使设备可由ASM使用,必须使其名字在系统多次重启动之间是不变的,且Oracle进程可以读写它。在Linux上,这有3种实现技术:

ASMLib核心库:根据Linux许可,这个库可用于一些Linux发布版本。

ASM过滤器驱动程序:这个功能从12.1.0.2版本开始提供,可以替代ASMLib。它添加的功能禁止任何非Oracle进程写入ASM磁盘。

udev功能:这个功能可运行系统管理员编写的脚本,以标识设备,设置合适的拥有权和许可。

为了在Windows上配置设备,Oracle提供了asmtool.exe实用工具。其他操作系统也有自己的、与平台相关的技术,来管理设备的拥有权和名字的一致性。

如果把NFS文件用作ASM磁盘,就使用下面的命令创建它们,该命令创建了一个1TB的文件,并允许访问Oracle拥有者:

        dd if=/dev/zero of=/asm/disk1 bs=1048576 count=1048576
        chown oracle:dba /asm/disk1
        chmod 660 /asm/disk1

创建ASM磁盘的细节超出了OCA考试的范围,还有许多平台变体。