4.2 自动存储管理
第3章介绍了一些用于ASM对象的文件命名约定。本节将深入介绍如何在具有一个或多个磁盘组的ASM环境中创建表空间及表空间中最终的数据文件。
在创建新的表空间或其他数据库结构(如控制文件或重做日志文件)时,可指定磁盘组而不是操作系统文件,作为数据库结构的存储区域。ASM简化了Oracle管理文件(Oracle Managed Files,OMF)的使用,并将OMF与镜像和条带化特性结合起来,从而提供了健壮的文件系统和逻辑卷管理程序,这种管理程序甚至支持Oracle实时应用群集(Real Application Cluster,RAC)中的多个节点。ASM使得不再需要购买第三方逻辑卷管理程序。
ASM不仅能自动将数据库对象扩展到多个设备以增强性能,而且允许在不关闭数据库的情况下将新的磁盘设备添加到数据库,从而增强可用性。ASM自动重新平衡文件的分布,将所需的干涉降到最低限度。
下面将讨论ASM体系结构。此外,还将展示如何创建特殊类型的Oracle实例以支持ASM,并介绍如何启动和关闭ASM实例。接着介绍与ASM相关的新初始参数以及具有新值以支持ASM实例的已有初始参数。另外要介绍asmcmd命令行实用工具,它是Oracle 10g版本2的新增特性,提供了另一种浏览和维护ASM磁盘组中对象的方法。最后,使用Linux服务器上的一些裸磁盘设备来演示如何创建和维护磁盘组。
4.2.1 ASM体系结构
ASM将数据文件和其他数据库结构划分为多个盘区,并将盘区划分到磁盘组的所有磁盘中,从而增强性能和可靠性。ASM并未镜像整个磁盘卷,而是镜像数据库对象,从而提供根据类型有区别地镜像或条带化数据库对象的灵活性。如果底层磁盘硬件已启用RAID作为存储区域网络(Storage Area Network,SAN)的一部分,或者网络附加存储(Network Attached Storage,NAS)设备的一部分,则对象不可以条带化。
自动重新平衡是ASM的另一个关键特性。需要增加磁盘空间时,可将额外的磁盘设备添加到磁盘组,ASM会将一定比例的文件从一个或多个已有的磁盘移动到新的磁盘,从而维持所有磁盘之间整体的I/O平衡。当包含在磁盘文件中的数据库对象保持联机并且可供用户用时,这种自动重新平衡在后台发生。如果在重新平衡操作期间I/O子系统会受到非常大的影响,可使用初始参数降低重新平衡发生的速度。
ASM需要特殊类型的Oracle实例来提供传统Oracle实例和文件系统之间的接口。ASM软件的组件和Oracle数据库软件一起传输。在创建数据库并为SYSTEM、SYSAUX和其他表空间选择存储类型时,总可将这些组件作为一种选择。
然而,ASM并不支持组合使用ASM磁盘组与手动Oracle数据文件管理技术(如第3章和本章前面介绍的一些技术)。然而,ASM易于使用并且具有很高的性能,因此使用ASM磁盘组可以很好地满足所有存储需求。
Oracle Database 10g中新增了两个Oracle后台进程,以支持ASM实例:RBAL和ORBn。RBAL协调磁盘组的磁盘活动,而ORBn(其中n可以是0~9之间的数字,在Oracle Database 12c中,也可以是字母A)执行磁盘组中磁盘之间的实际盘区移动。
对于使用ASM磁盘的数据库,从Oracle Database 10g开始,也有两个新的后台进程:ASMB和RBAL。ASMB执行数据库和ASM实例之间的通信,而RBAL执行代表数据库的磁盘组中磁盘的打开和关闭。
4.2.2 创建ASM实例
ASM需要专用的Oracle实例来管理磁盘组。ASM实例一般只需要较少的内存占用:100MB ~150MB。安装Oracle软件时,当指定ASM(作为Grid Infrastructure的一部分)为数据库的文件存储选项而ASM实例不存在时,将自动配置ASM实例。这一点可在图4-9所示的Oracle Universal Installer界面上看到。
图4-9 指定ASM作为数据库文件存储方法
具有内存量超过128GB的服务器,Oracle建议最好将ASM实例的初始参数设置为如下值的近似值:
●SGA_TARGET=1250M(ASMM)
●PGA_AGGREGATE_TARGET=400M
●MEMORY_TARGET=0或不设置(无AMM)
作为创建ASM磁盘组的磁盘设备的示例,假定Linux服务器具有两个未使用的磁盘,表4-2列出了它们的容量。
表4-2 ASM磁盘组的裸设备
在Oracle通用安装程序(Oracle Universal Installer,OUI)中配置第一个磁盘组,如图4-10所示。
图4-10 使用OUI配置初始ASM磁盘组
第一个磁盘组的名称是DATA,并使用/dev/sdb1和/dev/sdc1创建普通的冗余磁盘组。如果为所需要的冗余级别选择的裸磁盘数量不够,OUI就生成一条错误消息。创建数据库后,启动普通实例和ASM实例。
ASM实例还有一些独特的特征。虽然它确实有初始参数文件和密码文件,但没有数据字典,因此所有到ASM实例的连接都通过SYS或SYSTEM并且只使用操作系统身份验证。如果使用Oracle Database 12c,可创建密码文件甚至将其放入ASM磁盘组,这与对RDBMS密码文件的处理方式一样,如下例所示:
[oracle@tettnang ~]$ . oraenv ORACLE_SID = [RPT12C] ? +ASM The Oracle base remains unchanged with value /u00/app/oracle [oracle@tettnang ~]$ orapwd file=+DATA asm=y Enter password for SYS: xxxxxxxxxxx [oracle@tettnang ~]$ srvctl config asm -detail ASM home: /u00/app/oracle/product/12.1.0/grid Password file: +DATA/ASM/PASSWORD/pwdasm.406.834577299 ASM listener: LISTENER Spfile: +DATA/ASM/ASMPARAMETERFILE/registry.253.826648367 ASM diskgroup discovery string: /dev/oracleasm/disks ASM is enabled. [oracle@tettnang ~]$
磁盘组命令,如CREATE DISKGROUP、ALTER DISKGROUP和DROP DISKGROUP,只在ASM实例中有效。最后,ASM实例只能处于NOMOUNT或MOUNT状态,而绝对不会处于OPEN状态。
4.2.3 ASM实例组件
使用可用于传统数据库的各种方法无法访问ASM实例。本节将讨论使用SYSASM权限连接时用户所具有的权限。通过新增的和扩展的只可用于ASM实例的初始参数(在Oracle Database 10g中引入并在Oracle Database 11g和12c中得到增强),可区分ASM实例。本节的末尾将介绍启动和停止ASM实例的过程,以及ASM实例与其服务的数据库实例之间的依赖性。
1.访问ASM实例
本章前面曾提及,ASM实例没有数据字典,因此只有通过操作系统身份验证的用户才可以访问实例,即由dba组中的操作系统用户以SYSASM权限连接。
以SYSASM权限连接到ASM实例的用户可执行所有的ASM操作,例如创建和删除磁盘组,以及向磁盘组中添加磁盘和从磁盘组中删除磁盘。在Oracle Database 11g和12c中,拥有SYSDBA权限的用户仍可以与拥有SYSASM权限的用户一样执行相同的任务,但该角色已不建议使用,在未来版本中,将不再拥有与SYSASM相同的权限。
SYSOPER用户在使用可用于ASM实例中的命令集时有更多限制。一般来说,SYSOPER用户可用的命令只提供了足够的权限来执行已配置的和稳定的ASM实例的例程操作。下面列出SYSOPER可用的操作:
●启动和关闭ASM实例
●安装或卸载磁盘组
●将磁盘组的磁盘状态从ONLINE改为OFFLINE,或从OFFLINE改为ONLINE
●重新平衡磁盘组
●执行磁盘组的完整性检查
●访问V$ASM_*动态性能视图
在Oracle Database 12c中,为ASM实例添加了以下3种新权限。这些角色是面向任务的,有助于企业进一步划分职责要求:
●SYSBACKUP 从RMAN或SQL*Plus命令行执行备份和恢复。
●SYSDG 用Data Guard Broker或dgmgrl命令行执行Data Guard操作。
●SYSKM 为TDE(Transparent Data Encryption)管理加密密钥。
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参数控制重新平衡操作发生的速度。对于Oracle Database 12c,其值的范围是0~1024(在Oracle Database 11g中,除非使用11.2.0.2版本而且将COMPATIBLE.ASM磁盘组属性设置为11.2.0.2或更高,值范围是1~11),1024是最大可能的值;默认值是1(较低的I/O开销)。因为这是动态参数,所以可在日间将其设为较低的值,而在夜间必须进行磁盘重新平衡操作时,将其设为较高的值。
ASM_DISKSTRING ASM_DISKSTRING参数指定一个或多个字符串,这些字符串与操作系统相关,用于限制可用于创建磁盘组的磁盘设备。如果该值为NULL,则ASM实例可见的所有磁盘将潜在地成为创建磁盘组的候选项。对于本章中作为测试服务器的示例,ASM_DISKSTRING参数的值为/dev/raw/*:
ASM_DISKGROUPS ASM_DISKGROUPS参数指定一个包含磁盘组名称的列表,可以在启动时由ASM实例自动安装,或者通过ALTER DISKGROUP 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实例时给定数据库实例的首选故障组。不同的实例可以有不同的参数值:每个实例可指定距离实例的节点最近的故障组(例如,服务器的本地磁盘上的故障组),从而提高性能。
3.ASM实例的启动和关闭
ASM实例的启动非常类似于数据库实例,除了STARTUP命令默认为STARTUP MOUNT。由于没有安装任何控制文件、数据库或数据字典,因此系统将安装ASM磁盘组而不是数据库。命令STARTUP NOMOUNT启动实例,但不安装任何ASM磁盘。此外,可指定STARTUP RESTRICT,临时防止数据库实例连接到ASM实例以安装磁盘组。
注意:
即使ASM实例处于MOUNT状态,STATUS列也设置为STARTED而非MOUNTED,这与RDBMS实例中的情形一样。
在ASM实例上执行SHUTDOWN命令,相当于在使用ASM实例的任何数据库实例上执行相同的SHUTDOWN命令。在ASM实例完成关闭前,它等待所有相关的数据库关闭。这种情况的唯一例外是,如果在ASM实例上使用SHUTDOWN ABORT命令,将最终迫使所有依赖的数据库执行SHUTDOWN ABORT。
对于共享磁盘组的多个ASM实例,例如在RAC(实时应用群集)环境中,一个ASM实例故障不会造成数据库实例失败。此时,另一个ASM实例可执行失败实例的恢复操作。
4.2.4 ASM动态性能视图
一些新的动态性能视图与ASM实例关联。表4-3包含常见的与ASM相关的动态性能视图。本章后面将对其中一些视图进行更深入的解释。
表4-3 与ASM相关的动态性能视图
4.2.5 ASM文件名格式
所有ASM文件都是Oracle管理文件(OMF),因此大多数管理功能并不需要磁盘组中实际文件名的细节。删除ASM磁盘组中的对象时,将自动删除对应的文件。某些命令将提供实际的文件名,如ALTER DATABASE BACKUP CONTROLFILE TO TRACE;以及一些数据字典和动态性能视图也可以提供实际的文件名,例如,动态性能视图V$DATAFILE显示每个磁盘组中的实际文件名。下面是一个示例:
ASM文件名有6种不同格式。下面分别介绍不同的格式以及使用它们的环境:或者作为对已有文件的引用,或者用于单个文件和多个文件的创建操作期间。
1.完全限定的名称
完全限定的ASM文件名只在引用已有文件时使用。完全限定的ASM文件名具有如下格式:
+<group>/<dbname>/<file type>/<tag>.<file>.<incarnation>
其中,group是磁盘组名,dbname是文件所属的数据库,file type是Oracle文件类型,tag是文件类型特有的信息,file.incarnation确保唯一性。下面是USERS表空间的ASM文件示例:
+DATA/dw/datafile/users.259.627432977
磁盘组名是+DATA,数据库名是dw,它是USERS表空间的数据文件。如果决定创建USERS表空间的另一个ASM数据文件,则文件编号/具体名称对259.627432977可确保唯一性。
2.数字名称
数字名称只在引用已有的ASM文件时使用。这允许仅通过磁盘组名和文件编号/具体名称对来引用已有的ASM文件。上面示例中ASM文件的数字名称是:
+DATA.259.627432977
3.别名
在引用已有的对象或创建单个ASM文件时,可使用别名。使用ALTER DISKGROUP ADD ALIAS命令,可为已有的或新的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
稍后的4.2.6小节将更详细地讨论ASM模板。
5.不完整的名称
不完整的文件名格式可用于单文件创建或多文件创建操作。可以只指定磁盘组名,并根据文件类型使用默认的模板,如下所示:
SQL> create tablespace users5 datafile '+data1';
Tablespace created.
6.具有模板的不完整名称
和不完整的ASM文件名一样,具有模板的不完整文件名可用于单文件创建或多文件创建操作。无论实际的文件类型是什么,模板名都可确定文件的特征。
下面的示例创建一个表空间,但对这个新的表空间使用联机日志文件的条带化和镜像特征(细密条带化)代替了数据文件的属性(粗糙条带化):
SQL> create tablespace users6 datafile '+data1(onlinelog)';
Tablespace created.
4.2.6 ASM文件类型和模板
除了操作系统可执行文件外,ASM支持数据库使用的所有文件类型。表4-4包含ASM文件类型的完整列表,“ASM文件类型”和“标志”列是针对前面的ASM文件命名约定所介绍的内容。
表4-4 ASM文件类型
表4-5介绍了表4-4的最后一列中所引用的默认ASM文件模板。
表4-5 ASM文件模板的默认值
创建新的磁盘组时,从表4-5中默认模板复制而来的一组ASM文件模板与磁盘组一起保存。因此,可改变单个模板特征,并且只应用于它们驻留的磁盘组。换句话说,磁盘组+DATA1中的DATAFILE系统模板可能有默认的粗糙条带化,而磁盘组+DATA2中的DATAFILE模板可能有细密条带化。用户可根据需要在每个磁盘组中创建自己的模板。
使用DATAFILE模板创建ASM数据文件时,默认情况下数据文件为100MB,它可以自动扩展,最大尺寸是32 767MB(32GB)。
4.2.7 管理ASM磁盘组
使用ASM磁盘组具有诸多优点:提升I/O性能、增加可用性、简化将磁盘添加到磁盘组或添加全新的磁盘组,从而允许在相同的时间内管理更多的数据库。理解磁盘组的组成部分并正确配置磁盘组,是成功DBA的重要目标。
本小节将深入研究磁盘组结构的细节;同时将回顾与磁盘组相关的不同管理任务类型,并显示如何将磁盘赋予故障组,如何镜像磁盘组,以及如何创建、删除和改变磁盘组;在命令行方面,还要介绍asmcmd这一命令行实用程序,使用此命令可以浏览、复制和管理ASM对象。
1.磁盘组的体系结构
本章前面定义过,磁盘组是作为一个单位管理的物理磁盘的集合。作为磁盘组一部分的每个ASM磁盘都有ASM磁盘名,可由DBA分配该磁盘名,也可在将该磁盘分配给磁盘组时自动指定磁盘名。
使用粗糙条带化或细密条带化,在磁盘上对磁盘组中的文件条带化。粗糙条带化以1MB为单位将文件扩展到所有磁盘。粗糙条带化适用于具有高度并发的小I/O请求的系统,如OLTP环境。而细密条带化以128KB为单位扩展文件,它适用于传统的数据仓库环境或具有较低并发性的OLTP系统,可以最大化单个I/O请求的响应速度。
2.磁盘组镜像和故障组
在定义磁盘组中的镜像类型之前,必须将磁盘分组到故障组中。故障组是磁盘组中的一个或多个磁盘,这些磁盘共享常见的资源,如磁盘控制器,它的故障将造成磁盘组无法使用整个磁盘集。大多数情况下,ASM实例不知道给定磁盘的硬件和软件相关性。因此,除非专门将一个磁盘分配给故障组,否则磁盘组中的每个磁盘都分配给它自己的故障组。
一旦定义了故障组,就可以定义磁盘组的镜像。可用于磁盘组中的故障组的数量可以限制可用于磁盘组的镜像类型。有3种可用的镜像类型:外部冗余、普通冗余和高度冗余。
外部冗余 外部冗余只需要一个磁盘位置,并假设磁盘对于正在进行的数据库操作不是至关重要的,或者使用高可用性的硬件(例如RAID控制器)在外部管理磁盘。
普通冗余 普通冗余提供双向镜像,并且要求磁盘组中至少有两个故障组。故障组中的一个磁盘产生故障不会造成磁盘组的任何停机时间或数据丢失,只是对磁盘组中对象的查询有一些性能上的影响。当故障组的所有磁盘都处于联机状态时,读性能一般会得到提高,因为请求的数据在多个磁盘上可用。
高度冗余 高度冗余提供三向镜像,并要求磁盘组中至少有3个故障组。对于数据库用户来说,任意两个故障组中的磁盘产生故障基本上不会有明显的表现,如同在普通冗余镜像中那样。
镜像管理的级别非常低。被镜像的是盘区而非磁盘。此外,每个磁盘同时具有自身主要的和镜像的(次要的和第三位的)盘区。虽然在盘区级别管理镜像会带来少量的系统开销,但它具有如下优点:将负载从失败的磁盘扩展到所有其他磁盘,而不是一个磁盘。
3.磁盘组的动态重新平衡
改变磁盘组的配置时,无论添加或删除故障组或故障组中的磁盘,都将自动进行动态的重新平衡,按比例将数据从磁盘组的其他成员重新分配到磁盘组的新成员。当数据库联机并且用户可使用该数据库时,这种重新平衡就会发生。通过将初始参数ASM_POWER_LIMIT的值调整为较低的值,可控制对正在进行的数据库I/O的任何影响。
动态重新平衡不仅可免除标识磁盘组中热点这种繁杂的、通常易出错的任务,也提供了将整个数据库从一组较慢的磁盘迁移到一组较快磁盘的自动方法,同时整个数据库保持联机。较快的磁盘作为已有磁盘组中新的故障组和较慢的磁盘一起添加,并自动进行重新平衡。重新平衡操作完成后,删除包含较慢磁盘的故障组,保留只有较快磁盘的磁盘组。为使这一操作更快,可在同一ALTER DISKGROUP命令中启动ADD和DROP操作。
作为示例,假定希望创建具有高度冗余的新磁盘组,保存用于新信用卡授权的表空间。使用视图V$ASM_DISK,可查看使用初始参数ASM_DISKSTRING发现的所有磁盘,以及这些磁盘的状态(换句话说,是否将其赋给已有的磁盘组)。下面是相关的命令:
在8个可用于ASM磁盘,只有4个磁盘被分配给两个磁盘组DATA和RECOV,每个都在自己的故障组中。可从视图V$ASM_DISKGROUP中获得磁盘组名。
注意,如果有大量ASM磁盘和磁盘组,可在GROUP_NUMBER列上连接两个视图,并且通过GROUP_NUMBER过滤查询结果。同时,从V$ASM_DISKGROUP中看到,两个磁盘组都是由两个磁盘组成的NORMAL REDUNDANCY组。
第一步是创建磁盘组:
SQL> create diskgroup data2 high redundancy 2 failgroup fg1 disk '/dev/sdj1' name d2a 3 failgroup fg2 disk '/dev/sdk1' name d2b 4 failgroup fg3 disk '/dev/sdl1' name d2c 5 failgroup fg4 disk '/dev/sdm1' name d2d; Diskgroup created. SQL>
查看动态性能视图,可看到新的磁盘组出现在V$ASM_DISKGROUP中,故障组出现在V$ASM_DISK中:
然而,如果磁盘空间非常紧密,则不需要4个成员。对于高度冗余的磁盘组,只需要3个故障组,因此接下来删除磁盘组,并且重新创建只有3个成员的磁盘组:
SQL> drop diskgroup data2;
Diskgroup dropped.
如果磁盘组有任何不同于磁盘组元数据的数据库对象,则必须在DROP DISKGROUP命令中指定INCLUDING CONTENTS子句。这是额外的安全措施,可确保不会无意中删除具有数据库对象的磁盘组。命令如下:
完成新磁盘组的配置后,可通过数据库实例创建新磁盘组中的表空间:
SQL> create tablespace users3 datafile '+DATA2';
Tablespace created.
因为ASM文件是Oracle管理文件(OMF),所以在创建表空间时不需要指定其他任何数据文件特征。
4.磁盘组快速镜像重新同步
镜像磁盘组中的文件可提高性能和可用性。但当修理磁盘组中的故障磁盘并将它重新联机时,重新镜像整个新磁盘会很费时间。有些情况下,由于磁盘控制器故障,需要使磁盘组中的某个磁盘脱机,此时并不需要对整个磁盘重新镜像,只有在故障磁盘停机期间发生改变的数据需要重新同步。因此,可使用Oracle Database 11g中引入的ASM快速镜像重新同步特性。
要实现快速镜像重新同步,需要设置时间窗口,在此时间窗口内,当短暂的计划内或计划外故障发生时,ASM并不自动删除磁盘组中的磁盘。在此短暂故障期间,ASM跟踪所有发生改变的数据块,当不可用的磁盘重新联机时,只需重新镜像改变的数据块,而不需要重新镜像整个磁盘。
要为DATA磁盘组设置时间窗口,必须先将RDBMS实例和ASM实例的磁盘组的兼容性级别设置为11.1或更高(只需要对磁盘组设置一次):
SQL> alter diskgroup data set attribute 2 'compatible.asm' = '12.1.0.0.0'; Diskgroup altered. SQL> alter diskgroup data set attribute 2 'compatible.rdbms' = '12.1.0.0.0'; Diskgroup altered. SQL>
对RDBMS实例和ASM实例使用较高兼容性级别的唯一缺点是,只有版本号为12.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。
5.改变磁盘组
可向磁盘组中添加或从磁盘组中删除磁盘,也可改变磁盘组的大多数特征,而不需要重新创建磁盘组或影响磁盘组中对象上的用户事务。
将磁盘添加到磁盘组时,需要把新的磁盘格式化以用于磁盘组中,然后在后台执行重新平衡操作。本章前面提及,通过初始参数ASM_POWER_LIMIT可控制重新平衡的速度。
继续上面的示例,假定决定将最近可用的裸磁盘添加到磁盘组,以改进磁盘组DATA的I/O特征,具体如下:
SQL> alter diskgroup data 2 add failgroup d1fg3 disk '/dev/sdj1' name d1c; Diskgroup altered.
该命令立刻返回,并在后台进行格式化和重新平衡。然后,通过检查V$ASM_OPERATION视
因为完成重新平衡操作估计用时16分钟,所以可决定给重新平衡操作分配更多资源,并改变当前重新平衡操作的功率限制:
SQL> alter diskgroup data rebalance power 700;
Diskgroup altered.
检查重新平衡操作的状态可确认估计的完成时间已减少到2分钟,而非原来的16分钟:
大约4分钟后,再次检查重新平衡操作的状态:
SQL> / no rows selected
最后,可通过V$ASM_DISK和V$ASM_DISKGROUP视图确认新磁盘的配置:
注意,磁盘组DATA仍是普通冗余,即使它有3个故障组。然而,由于磁盘组中有额外的盘区副本,因此可以改进针对DATA磁盘组中对象的SELECT语句的I/O性能。但磁盘组的可用性将更高,因为它可以容忍丢失一个磁盘,仍维持普通冗余。
表4-6中列出了其他的磁盘组ALTER命令。
表4-6 磁盘组的ALTER命令
6.使用asmcmd命令
asmcmd实用程序是Oracle 10g版本2的新增特性,它是一个命令行实用工具,提供了一种简单方法,可使用类似于Linux shell命令(如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/12.1.0/grid ORACLE_SID=+ASM
此外,必须以dba组中用户的身份登录到操作系统,因为asmcmd实用程序使用SYSDBA权限连接到数据库。操作系统用户通常是oracle,但也可以是dba组中的其他任何用户。
可采用asmcmd command格式,一次使用一条asmcmd命令,也可在Linux shell提示符下输入“asmcmd”来交互式地启动asmcmd。为获得可用命令列表,可在ASMCMD>提示符下输入“help”,这会得到更多信息。表4-7列出了asmcmd命令及其简单说明,注意有些asmcmd命令只在Oracle Database 11g和12c中可用(见中间一列)。
表4-7 asmcmd命令汇总
启动asmcmd命令时,从ASM实例的文件系统的根节点开始。与Linux文件系统不同,根节点不是由前导正斜杠(/)来指明,而由加号(+)来指明,但以下各级目录则使用正斜杠。在此例中,启动asmcmd命令,并查询现有的磁盘组以及所有磁盘组中使用的总磁盘空间:
与Linux shell的ls命令一样,如果想得到此命令检索出来的对象的详细信息,可在ls命令后追加-l参数。ls命令显示了本章所用的ASM实例中的3个磁盘组+DATA、+DATA2和+RECOV。
另外注意,du命令只显示已用的磁盘空间以及跨镜像磁盘组所用的总磁盘空间。要获得每个磁盘组中的空闲空间量,需使用lsdg命令。
下面的示例查找文件名中包含字符串user的所有文件:
注意包含+DATA/purch/users.dbf的这一行:find命令查找所有ASM对象。在此例中,它查找一个别名以及与此模式相匹配的数据文件。
最后可对外部文件系统甚至其他ASM实例进行文件备份。在此例中,使用cp命令将数据库的SPFILE备份到主机文件系统的/tmp目录中:
ASMCMD> pwd +data/DW ASMCMD> ls CONTROLFILE/ DATAFILE/ ONLINELOG/ PARAMETERFILE/ TEMPFILE/ spfiledw.ora 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 Jul 13 09:47 /tmp/BACKUPspfiledw.ora [oracle@dw ~]$
此例也展示了数据库dw的所有数据库文件是如何存储在ASM文件系统中的。看起来这些数据库文件好像存储在传统的主机文件系统中,但实际上是由ASM进行管理的,其所提供的内置性能和冗余特性(为用于Oracle Database 12c,已进行了优化)使DBA可以更轻松地管理数据文件。