Original
2016-07-16
庄培培
沃趣科技
原作者:Bane Radulovic
译者: 庄培培
审核: 魏兴华
DBGeeK社群联合出品
ASM中有部分的命令提供了force选项,它允许管理员不以默认的行为来做某些操作。在一些操作上使用force选项是十分安全且必要的,但一些操作上去使用就可能会致使磁盘组不可用,本文会针对具体的情况做详细说明。在对一个磁盘组做mount操作时,如果磁盘组的磁盘成员中有磁盘不可用时,就会需要使用到force选项。这是前面所提到“十分安全且必要”的使用场景之一。假定不是太多磁盘不可用,带force选项的mount磁盘组一般都会成功。根本上,要满足故障磁盘的每一个具有partnership关系的盘都必须是可用的。接下来我们创建一个名称为PLAY的normal冗余的磁盘组,它包含了三个磁盘,如果不指定failgroup,每一个磁盘其实都是一个独立的failgroup:SQL> create diskgroup PLAY disk '/dev/ASMPLAY01','/dev/ASMPLAY02','/dev/ASMPLAY03';Diskgroup created.之后,我们对磁盘组进行了dismount,然后删除了路径为/dev/ASMPLAY01磁盘。再次mount磁盘组时,ASM就会有磁盘不可用的报错。SQL> alter diskgroup PLAY mount;alter diskgroup PLAY mount*ERROR at line 1:ORA-15032: not all alterations performedORA-15040: diskgroup is incompleteORA-15042: ASM disk "0" is missing from group number "2"因为我们只有一个磁盘不可用(normal冗余的磁盘组),可以使用force选项来mount磁盘组。SQL> alter diskgroup PLAY mount force;Diskgroup altered.这个命令执行后,ASM会在后台做一些清除操作,例如它会将不可用的磁盘标识为offline,最终这个磁盘会从磁盘组中drop。这些操作会被记录在ASM的alert日志中。SQL> alter diskgroup PLAY mount forceNOTE: cache registered group PLAY number=2 incarn=0xb71d3834NOTE: cache began mount (first) of group PLAY number=2 incarn=0xb71d3834NOTE: Assigning number (2,2) to disk (/dev/ASMPLAY03)NOTE: Assigning number (2,1) to disk (/dev/ASMPLAY02)...NOTE: process _user5733_+asm (5733) initiating offline of disk 0.3916286251 () withmask 0x7e in group 2NOTE: checking PST: grp = 2GMON checking disk modes for group 2 at 29 for pid 19, osid 5733NOTE: checking PST for grp 2 done.WARNING: Disk 0 () in group 2 mode 0x7f is now being offlined...SUCCESS: diskgroup PLAY was mountedSUCCESS: alter diskgroup PLAY mount force...WARNING: PST-initiated drop of 1 disk(s) in group 2(.3072145460))SQL> alter diskgroup PLAY drop disk PLAY_0000 force /* ASM SERVER */...NOTE: starting rebalance of group 2/0xb71d3834 (PLAY) at power 1Starting background process ARB0SUCCESS: alter diskgroup PLAY drop disk PLAY_0000 force /* ASM SERVER */ARB0 started with pid=21, OS id=5762NOTE: assigning ARB0 to group 2/0xb71d3834 (PLAY) with 1 parallel I/OSUCCESS: PST-initiated drop disk in group 2(3072145460))NOTE: F1X0 copy 1 relocating from 0:2 to 2:2 for diskgroup 2 (PLAY)NOTE: F1X0 copy 3 relocating from 2:2 to 65534:4294967294 for diskgroup 2 (PLAY)NOTE: Attempting voting file refresh on diskgroup PLAY...NOTE: stopping process ARB0SUCCESS: rebalance completed for group 2/0xb71d3834 (PLAY)...SUCCESS: grp 2 disk _DROPPED_0000_PLAY going offline非常有趣的是,我们只是做了磁盘组的force mount,从日志中看到了ASM其实还使用force选项进行磁盘的DROP操作。后面会有关于这点的详细说明。在集群中,只有第一个mount该磁盘组的ASM实例,才能成功进行带有force选项的mount操作。从ASM版本11.2.0.3开始,在Exadata和Oracle Database Appliance环境中,带磁盘组force选项的mount行为会有一点变化:不使用force选项也能mount磁盘组,这只要normal冗余的磁盘组不多于一个failgroup或者high冗余的磁盘组不多于两个failgroup不可用。需要注意的是本节的讨论仅针对normal和high冗余的磁盘组。如果是external冗余的磁盘组有不可用磁盘,不能使用force来将其mount。CREATE DISKGROUP命令没有FORCE选项。但如果创建磁盘组时,磁盘的状态不是CANDIDATE, PROVISIONED 或 FORMER这三者之一,需要在磁盘设备名后面加上FORCE选项。举例如下:如果是百分百确认使用/dev/ASMPLAY01磁盘是安全的,可以在CREATE DISKGROUP语句中磁盘设备名后面加上FORCE选项。SQL> create diskgroup PLAY disk'/dev/ASMPLAY01' FORCE,'/dev/ASMPLAY02','/dev/ASMPLAY03';Diskgroup created.再次强调。对磁盘的重用必须是百分百确认的,任何未经确认的操作都是不允许且风险极大的,这将会破坏磁盘上的内容,同时不再属于原来的磁盘组。对ALTER DISKGROUP命令的ADD DISK操作其实遵循相同的原则,如果添加到磁盘组中的磁盘的状态不是CANDIDATE, PROVISIONED 或 FORMER这三项之一,需要在磁盘设备名后面加FORCE选项。这样的操作过程是有时候是有趣且耗时的,在一台包含168个磁盘全配置的Exadata上创建一个磁盘组,本来应该只是一个很小的操作,创建磁盘组的语句如下:create diskgroup RECOdisk 'o/*/RECO*'attribute'compatible.asm'='11.2.0.0.0','compatible.rdbms'='11.2.0.0.0','au_size'='4M','cell.smart_scan_capable'='TRUE';由于一些与本节无关的原因,Exadata的一部分磁盘的磁盘头被标识为MEMBER,另外一部分是FORMER。所以先要拼出一份所有磁盘的完整清单,再在CREATE DISKGROUP语句中指定每块磁盘,并确保在每一个MEMBER磁盘头的设备名边上加上FORCE选项,在任意一个FORMER磁盘头的设备名边上没有(不能有,否则会报错)FORCE选项。类似的创建语句如下:create diskgroup RECO disk'o/192.168.10.1/RECO_CD_00_exacel01','o/192.168.10.1/RECO_CD_01_exacel01','o/192.168.10.1/RECO_CD_02_exacel01','o/192.168.10.1/RECO_CD_03_exacel01','o/192.168.10.1/RECO_CD_04_exacel01' FORCE,'o/192.168.10.1/RECO_CD_05_exacel01','o/192.168.10.1/RECO_CD_06_exacel01','o/192.168.10.1/RECO_CD_07_exacel01','o/192.168.10.1/RECO_CD_08_exacel01','o/192.168.10.1/RECO_CD_09_exacel01','o/192.168.10.1/RECO_CD_10_exacel01','o/192.168.10.1/RECO_CD_11_exacel01' FORCE,'o/192.168.10.2/RECO_CD_00_exacel02','o/192.168.10.2/RECO_CD_01_exacel02','o/192.168.10.2/RECO_CD_02_exacel02','o/192.168.10.2/RECO_CD_03_exacel02' FORCE,'o/192.168.10.2/RECO_CD_04_exacel02' FORCE,'o/192.168.10.2/RECO_CD_05_exacel02','o/192.168.10.2/RECO_CD_06_exacel02','o/192.168.10.2/RECO_CD_07_exacel02' FORCE,'o/192.168.10.2/RECO_CD_08_exacel02','o/192.168.10.2/RECO_CD_09_exacel02','o/192.168.10.2/RECO_CD_10_exacel02','o/192.168.10.2/RECO_CD_11_exacel02','o/192.168.10.3/RECO_CD_00_exacel03','o/192.168.10.3/RECO_CD_01_exacel03','o/192.168.10.3/RECO_CD_02_exacel03' FORCE,'o/192.168.10.3/RECO_CD_03_exacel03',...'o/192.168.10.14/RECO_CD_11_exacel14'attribute'compatible.asm'='11.2.0.0.0','compatible.rdbms'='11.2.0.0.0','au_size'='4M','cell.smart_scan_capable'='TRUE';在前面的ASM的Alert log中可以看到,当磁盘故障或者因某种原因不能被ASM所访问时,ASM就会对其进行带有Force选项的drop操作。当不带有FORCE选项的ALTER DISKGROUP ... DROP DISK 命令执行时,ASM会把被DROP磁盘上的数据迁移磁盘组中可用的磁盘上去,然后将这块磁盘标识为FORMER,更新PST表,最后DROP磁盘。如果ASM不能访问这个磁盘(将被drop的),就必需使用带有Force选项drop操作。这种情况下,ASM将会从它的Partner磁盘上拷贝数据。一旦冗余级别重新恢复,就会更新PST表来说明磁盘不再是磁盘组的成员。由于ASM不能访问这个磁盘,它就不能把磁盘标识为FORMER。译者注:drop force选项磁盘头不会有任何变化,也就是说如果这块盘后面可以访问到了,它的磁盘头的状态依然是member,但是之前磁盘组的PST信息里已经没有这个磁盘的信息。这块盘后续如果要继续添加到其它磁盘组,需要在添加磁盘时指定force选项。当一个系统管理员或者ASM管理员修复了导致磁盘不可用的故障后(可能是更换了某条故障的线缆),接下来该怎么做能让磁盘恢复online状态?这个过程能否能自动呢? 答案同样也是看情况。如果是Exadata或者是Oracle Database Appliance,磁盘会被自动online。其他情况是ASM管理员需要通过alter diskgroup命令将磁盘恢复为online状态。 例如: alter diskgroup DATA online disk 'ORCL: DISK077'; 或者 alter diskgroup DATA online all;SQL> drop diskgroup PLAY force including contents;Diskgroup dropped.如果ASM侦测到磁盘组在其他位置节点上处于mount状态(比如在集群环境中),这个操作会失败。译者注:正常情况下,执行磁盘组的drop操作,磁盘组的状态只有在执行drop操作的实例上需要为mount,其他实例都必须dismount。Forcing disk group dismount如果磁盘组在使用当中,ASM不允许dismount磁盘组。但是可以使用force选项来对磁盘组进行dismount(即使有文件在磁盘组中仍然处于打开状态),举例如下:SQL> alter diskgroup PLAY dismount;alter diskgroup PLAY dismount*ERROR at line 1:ORA-15032: not all alterations performedORA-15027: active use of diskgroup "PLAY" precludes its dismount从报错中可以得到,有数据库正在使用PLAY磁盘组。SQL> select group_number, db_name, status from v$asm_client;GROUP_NUMBER DB_NAME STATUS------------ -------- ------------1 BR CONNECTED2 BR CONNECTED我们使用带Force选项的dismount命令强行对PLAY磁盘组做dismount操作:SQL> alter diskgroup PLAY dismount force;Diskgroup altered.注意对磁盘组的强行dismount操作会导致数据库的所有数据文件offline,这意味着它们在下次启动时需要进行recovery。ALTER DISKGROUP命令的UNDROP DISKS子句会取消本磁盘组中所有处于pending状态的drop磁盘的操作。但是UNDROP DISKS不能被用来恢复DROP DISKGROUP语句执行后被DROP的磁盘和带有FORCE选项drop掉的磁盘。force选项在asmcmd命令行中等同于 -f 标识和XML配置文件中的FORCE关键字。asmcmd命令行的一个增强功能也与本节的内容相关。asmcmd lsdsk命令加上-M标识能显示出对所有活动的ASM实例仅部分可见的磁盘。asmcmd相关的帮助命令如下:$ asmcmd help lsdsklsdskList Oracle ASM disks.lsdsk [-kptgMI][-G diskgroup ] [--suppressheader] [ --member|--candidate] [--discovery][--statistics][pattern]lsdsk命令的-M参数解释如下:-M -展示了对一些实例可见对另一些实例不可见的ASM磁盘,如果这些磁盘对于某个实例不可见,那么在这些实例中就会导致mount磁盘组失败。理解force选项的强大功能非常重要,在使用它时必需万分小心,如果你对它在各个操作中的含义还不甚了解,那么使用它将可能会非常危险。庄培培,沃趣科技数据库售前工程师,主要负责数据库平台架构方案设计、产品验证测试。
关于沃趣杭州沃趣科技股份有限公司创建于2012年,是专注为用户提供基于高性能、高可用、可扩展的开放数据库平台整体架构解决方案的国产厂商。沃趣的产品已广泛应用于证券、保险、医疗、广电传媒、银行、电信、能源电力、快递物流、公共事业、大型企业等,为这些行业用户持续提供行业解决方案及服务支持。研发中心位于杭州,同时在北京、上海、广州、深圳、成都、兰州、沈阳建立了分支机构,负责国内的销售和服务。我们始终坚信,数据是驱动企业创新的源动力!坚持围绕企业数据库做好一件事
——让高性能触手可及!