Oracle 12c 的ASM磁盘擦洗特性

个人简介:石云华,Exadata中国用户组联合创始人,2019年被ORACLE官方授予ACE称号。毕业后一直从事Oracle数据库第三方运维服务工作,拥有十余年电信运营商、保险、税务、电力行业核心系统数据库运维经验。现就职于北京海天起点技术服务股份有限公司,oracle数据库专家组成员,Exadata部门负责人。个人著作有《Exadata实施运维指南》,另外一本《Oracle Exadata性能优化》即将面世。

ASM磁盘擦洗是GI集群软件12c引入的一个新特性,当ASM磁盘组处于NormalHigh冗余模式时,可检查ASM磁盘组的逻辑数据损坏并自动地修复它们,该特性通过主动地读取数据内容来提升数据的高可用性。

ASM磁盘擦洗特性可以选择在如下几种方式下工作。

  • 数据文件层面。可以单独指定ASM磁盘组中的文件进行磁盘擦洗操作,具体示例如下。

  • 磁盘层面。可以单独指定ASM磁盘组中的某块磁盘进行磁盘擦洗操作,具体示例如下。

  • 磁盘组层面。可以单独指定对整个ASM磁盘组进行磁盘擦洗操作,具体示例如下。

ASM磁盘擦洗操作有如下选项。

  • repair选项。此选项自动修复磁盘上的坏块;如果不使用repair关键字,则只会识别出磁盘上的坏块,而不会修复它们。
  • power选项。如果在磁盘擦洗操作时指定了power参数,则可以同时指定磁盘擦洗的级别,分别为:lowautohighmax
  • wait选项。如果指定了wai选项,则磁盘擦洗操作完成之后,才会返回命令的执行结果;如果没有指定wait选项,则立即返回命令的执行结果,真正的ASM磁盘擦洗操作放后台执行。
  • force选项。如果指定了force选项,则即使系统的IO负载非常高或者在系统级别已经禁用了ASM磁盘擦洗,也会处理该命令。

Exadata的存储软件已经包含了自动磁盘擦洗和修复特性,那么Oracle 12C中的ASM磁盘擦洗和修复特性在Exadata环境中是否就无用武这地呢?当然不是,因为Oracle 12C中的ASM磁盘擦洗和修复特性能够实现逻辑坏块的检测和修复,而Exadata存储软件中的自动磁盘擦洗和修复特性无法实现这一功能。下面通过示例进行验证,具体见代码清单7.1

代码清单7.1 ASM磁盘擦洗和修复特性实现逻辑坏块的检测和修复(1)

新建一张名为test的测试表,并向测试表中插入1000条数据,同时获取这1000条数据的分布情况,可以看出这些数据分布在11号数据文件的131135这两个数据块内。

代码清单7.1 ASM磁盘擦洗和修复特性实现逻辑坏块的检测和修复(2)

利用BBED工具定位到11号数据文件的131数据块,人为地破坏该数据块,使之产生一个逻辑坏块。

代码清单7.1 ASM磁盘擦洗和修复特性实现逻辑坏块的检测和修复(3)

利用RMAN工具检测整个数据库的逻辑坏块,从命令输出可以看出,11号数据文件已经存在逻辑坏块。

代码清单7.1 ASM磁盘擦洗和修复特性实现逻辑坏块的检测和修复(4)

查询v$database_block_corruption视图,可以看到数据库中坏块的详细信息,这也记录了11号数据文件的131数据块存在逻辑坏块,也即前面测试目的而人为制造的逻辑坏块。查询test测试表的内容,发现只存在999条记录,而之前插入了1000条记录。

代码清单7.1 ASM磁盘擦洗和修复特性实现逻辑坏块的检测和修复(5)

在计算节点通过dcli工具对所有的存储节点立即发起磁盘擦洗操作,等待十几个小时后磁盘擦洗操作完成,但查看Exadata存储软件的日志内容,发现坏块的个数为0,也即没有发现坏块,这是因为Exadata存储软件的磁盘擦洗特性只会进行物理坏块的检测工作,而不会进行逻辑坏块的检测工作。

代码清单7.1 ASM磁盘擦洗和修复特性实现逻辑坏块的检测和修复(6)

ASM实例层面,调用GI集群软件12c引入的ASM磁盘擦洗新特性,仅仅针对+DG_DATA磁盘组中的test.305.978993619数据文件进行磁盘擦洗操作,如果检测到逻辑坏块会进行修复。

调用GI集群软件12c引入的ASM磁盘擦洗新特性对数据文件进行磁盘擦洗操作后,该进程生成的日志文件如下所示。

从磁盘擦洗进程生成的日志文件可以看出,该数据文件的131号数据块是一个逻辑坏块,坏块的原因是the amount of space used is not equal to block size,同时也进行了坏块的修复工作,但修复工作未成功,因为No good mirror side for block 131 (305.978993619)it cannot be repaired

注意:当GI集群软件为12.1.0.2版本时,不建议对整个磁盘组进行ASM磁盘擦洗操作,因为12.1.0.2版本的GI集群软件存在Bug 25961368,会将磁盘组中的在线日志文件或归档日志文件当成加密的数据文件,导致进行磁盘擦洗操作的进程产生巨大的日志文件,最终撑爆数据库所在的文件系统。详细内容可参考MOS文档《Bug 25961368 : SCRUB OF REDOLOGS OR ARCHIVE LOGS REPORTED AS ENCRYPTED BLOCKS》。

未经允许不得转载:Oracle一体机用户组 » Oracle 12c 的ASM磁盘擦洗特性

相关推荐