Oracle 12c、18c ASMFD特性研究

  • 一、afd配置调整
  • 二、转移UDEV设备到AFD路径
  • 三、ASM磁盘组dd格式化测试
  • 四、拓展研究
  • 五、总结
  • 六、参考文献

在Oracle 12C以上版本,可以使用asmfd来取代udev规则下的asm磁盘设备绑定,同时他也具有过滤非法IO操作的特性。下面的环境基于RHEL 7.4,测试将UDEV存储转移到AFD磁盘路径。

一、afd配置调整

1、root用户下添加grid环境变量

[root@rac1 ~]# export ORACLE_HOME=/u01/app/12.2.0/grid
[root@rac1 ~]# export ORACLE_BASE=/tmp

2、获取当前asm磁盘组发现路径

[root@rac1 ~]# $ORACLE_HOME/bin/asmcmd dsget
parameter:/dev/asm*
profile:/dev/asm*

3、添加AFD发现路径

[root@rac1 ~]# asmcmd dsset '/dev/asm*','AFD:*'[root@rac1 ~]# $ORACLE_HOME/bin/asmcmd dsget
parameter:/dev/asm*, AFD:*
profile:/dev/asm*,AFD:*

4、查看节点信息

[root@rac1 ~]# olsnodes -a
rac1    Hub
rac2    Hub

以下需要在所有节点运行
5、停止crs

[root@rac1 ~]# crsctl stop crs

6、安装oracle afd
节点1、节点2

加载以及配置AFD

[root@rac1 yum.repos.d]# asmcmd afd_configure

备注:在7.4以上的redhat或者centos下需要升级kmod才可以启用AFD,在前面一篇文章中已有介绍
解决在RHEL/CentOS7.4以上版本无法使用AFD(Oracle ASMFD)特性
https://blog.csdn.net/kiral07/article/details/87629679
加载afd过程:

AFD-627: AFD distribution files found.
AFD-634: Removing previous AFD installation.
AFD-635: Previous AFD components successfully removed.
AFD-636: Installing requested AFD software.
AFD-637: Loading installed AFD drivers.
AFD-9321: Creating udev for AFD.
AFD-9323: Creating module dependencies - this may take some time.
AFD-9154: Loading 'oracleafd.ko' driver.
AFD-649: Verifying AFD devices.
AFD-9156: Detecting control device '/dev/oracleafd/admin'.
AFD-638: AFD installation correctness verified.
Modifying resource dependencies - this may take some time.

查询afd状态信息

[root@rac1 yum.repos.d]# asmcmd afd_state
ASMCMD-9526: The AFD state is 'LOADED' and filtering is 'ENABLED' on host 'rac1'

7、启动crs

[root@rac1 yum.repos.d]# crsctl start crs
CRS-4123: Oracle High Availability Services has been started.

8、查看当前存储设备

[root@rac1 yum.repos.d]# ll /dev/mapper/mpath*
lrwxrwxrwx 1 root root 7 Feb 15 17:18 /dev/mapper/mpathc -> ../dm-1
lrwxrwxrwx 1 root root 7 Feb 15 17:18 /dev/mapper/mpathd -> ../dm-0此处使用多路径设备mpathc、mpathd
[root@rac2 ~]# multipath -ll
mpathd (14f504e46494c45526147693538302d577037452d39596459) dm-1 OPNFILER,VIRTUAL-DISK
size=30G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 34:0:0:1 sdc             8:32  active ready running
|-+- policy='service-time 0' prio=1 status=enabled
| `- 35:0:0:1 sde             8:64  active ready running
|-+- policy='service-time 0' prio=1 status=enabled
| `- 36:0:0:1 sdg             8:96  active ready running
`-+- policy='service-time 0' prio=1 status=enabled`- 37:0:0:1 sdi             8:128 active ready running
mpathc (14f504e46494c45524f444c7844412d717a557a2d6b7a6752) dm-0 OPNFILER,VIRTUAL-DISK
size=40G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 34:0:0:0 sdb             8:16  active ready running
|-+- policy='service-time 0' prio=1 status=enabled
| `- 35:0:0:0 sdd             8:48  active ready running
|-+- policy='service-time 0' prio=1 status=enabled
| `- 36:0:0:0 sdf             8:80  active ready running
`-+- policy='service-time 0' prio=1 status=enabled`- 37:0:0:0 sdh             8:112 active ready running

9、添加afd发现路径

切换到grid用户
[root@rac2 ~]# su - grid使用afd_dsset添加存储路径
[grid@rac2:/home/grid]$asmcmd afd_dsset '/dev/mapper/mpath*'[grid@rac2:/home/grid]$asmcmd afd_dsget
AFD discovery string: /dev/mapper/mpath*此时未添加afd label所以为空
[grid@rac2:/home/grid]$asmcmd afd_lsdsk
There are no labelled devices.

至此从步骤5,在rac所有节点已运行所有命令

二、转移UDEV设备到AFD路径

1、查看当前ocr以及voting files磁盘组

  [root@rac1 ~]# ocrcheck -config
Oracle Cluster Registry configuration is :Device/File Name         :       +CRS
[root@rac1 ~]# crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------1. ONLINE   4e20265767f54f49bf12bd72f367217f (/dev/asm_crs) [CRS]
Located 1 voting disk(s).

2、查看crs磁盘组对应的udev存储路径

[root@rac1 ~]# su - grid[grid@rac1:/home/grid]$asmcmd lsdsk -G crs
Path
/dev/asm_crs

3、停止rac集群

[root@rac1 ~]# crsctl stop cluster -all

4、转移udev设备到afd

使用label添加asmcrs磁盘组,将udev规则下的磁盘路径转移到afd
[grid@rac1:/home/grid]$asmcmd afd_label asmcrs /dev/mapper/mpathc --migrate       crs磁盘组已加载完毕
[grid@rac1:/home/grid]$asmcmd afd_lsdsk
--------------------------------------------------------------------------------
Label                     Filtering   Path
================================================================================
ASMCRS                      ENABLED   /dev/mapper/mpathc备注:由于当前磁盘组已被asm使用,必须使用migrate才可以进行转移。添加另外一块data磁盘组
[grid@rac1:/home/grid]$asmcmd afd_label asmdata /dev/mapper/mpathd --migrate    查看afd磁盘组,已加载完毕
[grid@rac1:/home/grid]$asmcmd afd_lsdsk
--------------------------------------------------------------------------------
Label                     Filtering   Path
================================================================================
ASMCRS                      ENABLED   /dev/mapper/mpathc
ASMDATA                     ENABLED   /dev/mapper/mpathd

5、在其余节点扫描afd设备

[grid@rac2:/home/grid]$asmcmd afd_scan[grid@rac2:/home/grid]$asmcmd afd_lsdsk
--------------------------------------------------------------------------------
Label                     Filtering   Path
================================================================================
ASMCRS                      ENABLED   /dev/mapper/mpathc
ASMDATA                     ENABLED   /dev/mapper/mpathd

6、启动rac集群

[root@rac1 ~]# crsctl start cluster -all

7、在asm实例下查询asm磁盘信息
原udev asm存储路径信息还能查看到

[root@rac1 ~]# asmcmd lsdsk
Path
AFD:ASMCRS
AFD:ASMDATASQL> col name for a10
SQL> col label for a10
SQL> col path for a15
SQL> select NAME,LABEL,PATH from V$ASM_DISK;NAME       LABEL      PATH
---------- ---------- ---------------ASMDATA    /dev/asm_data ---->之前udev asm路径ASMCRS     /dev/asm_crs  ---->之前udev asm路径
CRS_0000   ASMCRS     AFD:ASMCRS
DATA_0000  ASMDATA    AFD:ASMDATA

8、修改发现路径

[grid@rac1:/home/grid]$asmcmd dsget
parameter:/dev/asm*, AFD:*
profile:/dev/asm*,AFD:*只保留afd路径
[grid@rac1:/home/grid]$asmcmd dsset 'AFD:*'
[grid@rac1:/home/grid]$asmcmd dsget
parameter:AFD:*
profile:AFD:*再次查询udev路径下的设备已没有
SQL> select NAME,LABEL,PATH from V$ASM_DISK;NAME       LABEL      PATH
---------- ---------- ---------------
CRS_0000   ASMCRS     AFD:ASMCRS
DATA_0000  ASMDATA    AFD:ASMDATA

9、移除UDEV规则文件

[root@rac1 ~]# ll -hrt /etc/udev/rules.d/
total 12K
-rw-r--r-- 1 root root 297 Nov  3 17:04 99-oracle-asmdevices.rules.old
-rw-r--r-- 1 root root 224 Feb 15 17:13 53-afd.rules
-rw-r--r-- 1 root root 957 Feb 18 08:55 70-persistent-ipoib.rules99-oracle-asmdevices.rules重命名之后已无法发现磁盘
[root@rac1 ~]# ll /dev/asm*
ls: cannot access /dev/asm*: No such file or directory使用afd特性的磁盘组未受影响
[grid@rac2:/home/grid]$asmcmd afd_lsdsk
--------------------------------------------------------------------------------
Label                     Filtering   Path
================================================================================
ASMCRS                      ENABLED   /dev/mapper/mpathc
ASMDATA                     ENABLED   /dev/mapper/mpathd

到此为止已完成afd的配置与加载

三、ASM磁盘组dd格式化测试

Oracle的afd特性可以过滤掉”非规范“的io操作,只要不是用于oracle的io操作都会被过滤掉,下面使用dd格式化asm整个磁盘组做测试

1、增加一个磁盘组”asmtest“用来做dd格式化实验

[root@rac1 ~]# asmcmd afd_label asmtest /dev/mapper/mpathe
[root@rac1 ~]# asmcmd afd_lsdsk
--------------------------------------------------------------------------------
Label                     Filtering   Path
================================================================================
ASMCRS                      ENABLED   /dev/mapper/mpathc
ASMDATA                     ENABLED   /dev/mapper/mpathd
ASMTEST                     ENABLED   /dev/mapper/mpathe[root@rac1 ~]# su - grid[grid@rac1:/home/grid]$sqlplus / as sysasm创建asmtest磁盘组
SQL> create diskgroup asmtest external redundancy disk 'AFD:asmtest';Diskgroup created.

2、创建测试表空间asmtest以及测试表

SQL>  create tablespace asmtest datafile '+asmtest' size 100m;
SQL>  create table afd (id number) tablespace asmtest;SQL>  insert into afd values (1);1 row created.SQL> commit;Commit complete.SQL> select * from afd; ID
----------1

3、dd格式化
格式化整个磁盘组”asmtest“ —>/dev/mapper/mpathe

[root@rac1 ~]# dd if=/dev/zero of=/dev/mapper/mpathe
dd: writing to dev/mapper/mpathe No space left on device
2097153+0 records in
2097152+0 records out
1073741824 bytes (1.1 GB) copied, 70.6 s, 15.2 MB/s

4、再次做创建表空间操作

SQL>  create tablespace asmtest2 datafile '+asmtest' size 100m;
SQL>  create table afd2 (id number) tablespace asmtest2;SQL>  insert into afd2 values (2);1 row created.SQL> commit;Commit complete.SQL> select * from afd; ID
----------2
SQL>  ALTER system checkpoint;System altered.checkpoint之后也没有报错

5、禁用afd Filter

[root@rac1 ~]# asmcmd afd_filter -d
备注(-d是disable、-e是enable)
[root@rac1 ~]# asmcmd afd_lsdsk
--------------------------------------------------------------------------------
Label                     Filtering   Path
================================================================================
ASMCRS                     DISABLED   /dev/mapper/mpathc
ASMDATA                    DISABLED   /dev/mapper/mpathd
ASMTEST                    DISABLED   /dev/mapper/mpathe

6、再次做dd格式化

[root@rac1 ~]# dd if=/dev/zero of=/dev/mapper/mpathe
dd: writing to dev/mapper/mpathe No space left on device
2097153+0 records in
2097152+0 records out
1073741824 bytes (1.1 GB) copied, 89.2804 s, 12.0 MB/s

7、在数据库中测试

SQL> insert into afd values (3);1 row created.SQL> commit;Commit complete.SQL> alter system checkpoint;
alter system checkpoint
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 21718
Session ID: 35 Serial number: 63358数据库已崩溃

数据库重启之后已无法启动

[oracle@rac1:/home/oracle]$sqlplus / as sysdbaSQL*Plus: Release 12.2.0.1.0 Production on Mon Feb 18 14:55:41 2019Copyright © 1982, 2016, Oracle.  All rights reserved.Connected to an idle instance.SQL> startup
ORA-39510: CRS error performing start on instance 'orcl1' on 'orcl'
CRS-2672: Attempting to start 'ora.AFDTEST.dg' on 'rac1'
CRS-2672: Attempting to start 'ora.AFDTEST.dg' on 'rac2'
CRS-2674: Start of 'ora.AFDTEST.dg' on 'rac1' failed
CRS-2674: Start of 'ora.AFDTEST.dg' on 'rac2' failed
CRS-0215: Could not start resource 'ora.orcl.db 1 1'.
clsr_start_resource:260 status:215
clsrapi_start_db:start_asmdbs status:215

四、拓展研究

在配置完afd之后,在dev路径下会有lable过后的磁盘

[root@rac1 ~]# ll /dev/oracleafd/disks/
total 8
-rwxrwx--- 1 grid oinstall 19 Feb 18 13:40 ASMCRS
-rwxrwx--- 1 grid oinstall 19 Feb 18 13:40 ASMDATA查看此设备内容发现对应为多路径设备
[root@rac1 ~]# cat /dev/oracleafd/disks/ASMCRS
/dev/mapper/mpathc
[root@rac1 ~]# cat /dev/oracleafd/disks/ASMDATA
/dev/mapper/mpathd

udev规则下会有afd的规则文件

[grid@rac1:/home/grid]$ll -hrt /etc/udev/rules.d/
total 12K
-rw-r--r-- 1 root root 297 Nov  3 17:04 99-oracle-asmdevices.rules.old
-rw-r--r-- 1 root root 224 Feb 15 17:13 53-afd.rules
-rw-r--r-- 1 root root 957 Feb 18 08:55 70-persistent-ipoib.rules
[grid@rac1:/home/grid]$cat /etc/udev/rules.d/53-afd.rules
#
# AFD devices
KERNEL=="oracleafd/.*", OWNER="grid", GROUP="asmadmin", MODE="0775"
KERNEL=="oracleafd/*", OWNER="grid", GROUP="asmadmin", MODE="0775"
KERNEL=="oracleafd/disks/*", OWNER="grid", GROUP="asmadmin", MODE="0664"

五、总结

Oracle的afd特性可以将”危险“IO操作进行重定向,具体原理不得而知,其本质还是通过系统内核使用udev规则加载磁盘设备。

六、参考文献

https://www.oracle.com/technetwork/cn/articles/database/asmfd-2398572-zhs.html

https://docs.oracle.com/en/database/oracle/oracle-database/18/ostmg/administer-filter-driver.html#GUID-7B046A8B-06ED-48D6-81B0-3A29F45BA372

Oracle 12c、18c ASMFD特性研究相关推荐

  1. 从生命周期的角度谈谈 Oracle 12c, 18c, 19c 和 20c

    转载: 原文链接:从生命周期的角度谈谈 Oracle 12c, 18c, 19c 和 20c 看到的博客链接:从生命周期的角度谈谈 Oracle 12c, 18c, 19c 和 20c 之前的博客我们 ...

  2. oracle 12c dg新特性,oracle 12c:新特性-网格(Grid)基础架构的增强

    oracle 12c:新特性-网格(Grid)基础架构的增强,传统标准集群和Flex集群. Flex 集群 Oracle 12c 在集群安装时支持两类配置:传统标准集群和Flex集群.在一个传统标准集 ...

  3. 五月数据库技术通讯丨Oracle 12c因新特性引发异常Library Cache Lock等待

    每月关注:35页数据库技术干货,汇总一个月数据库行业热点事件.新的产品特性,包括重要数据库产品发布.警报.更新.新版本.补丁等. 亲爱的读者朋友: 为了及时共享行业案例,通知共性问题,达成共享和提前预 ...

  4. oracle12c口令文件,学习笔记:Oracle 12C ASM 新特性 共享密码文件

    天萃荷净 测试试验ORACLE 12C ASM 新特性 共享密码文件的详细过程 在ORACLE 12C之前大家都知道密码文件是存放在?/dbs或者?/database中,如果要修改修改sysdba权限 ...

  5. 专家视角 | 小荷的 Oracle Database 18c 新特性快速一瞥

    作者介绍:何剑敏  大疆创新 互联网事业部 运维部数据库技术团队负责人,曾供职于中国联通,卓望数码,IBM 和 ORACLE ACS 华南团队.多年从事一线的数据库运维工作,有丰富项目经验.维护经验和 ...

  6. oracle asm密码是什么,ORACLE 12C ASM 新特性:共享密码文件

    在ORACLE 12C之前大家都知道密码文件是存放在?/dbs或者?/database中,如果要修改修改sysdba权限的用户密码时候,会去修改密码文件,而在rac数据库的sys密码文件是存在各个节点 ...

  7. oracle 12c dg新特性,Oracle 12c DG新特性---一键switchover

    1 说明 在12c中,这个新特性的出现有大大减少了switchover和failover的复杂性.只需要一个命令即可进行角色的切换操作.而在之前的数据库版本中,往往需要多个命令才可以完成角色的切换.注 ...

  8. oracle每个租户指定字符集,理解 Oracle 多租户体系中(12c,18c,19c)创建用户作用域范围...

    本篇探讨以下几个问题:你可提前猜测下面6个场景语句中,哪几个可以成功创建用户? 1. 在CDB级别中创建公共用户,不带 container 子句的效果: 2. 在CDB级别中创建公共用户,带 cont ...

  9. Oracle 12.2 新特性--PDB和CDB的字符集可以不一样

    Oracle 12.2 新特性--PDB和CDB的字符集可以不一样 在 12.1 中, PDB 的字符集与 root 容器必须保持一致,这样无形中造成了 PDB 迁移或者克隆的限制性.从 12.2 开 ...

最新文章

  1. 百度计算广告学沙龙学习笔记 - 内容匹配广告
  2. Spark-shell提示找不到路径
  3. 为or、in平反——or、in到底能不能利用索引?
  4. setnx和expire合成一条指令_Python 为什么只需一条语句“a,b=b,a”,就能直接交换两个变量?...
  5. CVE-2017-7529Nginx越界读取缓存漏洞POC
  6. python练习题-day2
  7. Hyper-v副本容量规划器
  8. 2023年南昌大学电子信息考研考情与难度、参考书及上岸前辈经验
  9. 一文读懂运放偏置电流和输入失调电流
  10. qt设置文本背景透明_QT透明显示文字
  11. Android WebView播放视频flash(判断是否安装flash插件)
  12. 2019unity游戏开发需要学什么?
  13. 吃鸡神器iPhone苹果7Plus手机基础使用教程
  14. 医门凿眼----痹症勾沉
  15. BI神器Power Query(20)-- PQ自适应目录
  16. 金乡计算机老师培训,致敬!金乡优秀教师公布,有教过你的老师吗?
  17. 什么是机器视觉技术 ?
  18. 别再叫我 SQL Boy 了!
  19. sublime text 3安装-add to explorer context menu意思
  20. zcurd上了开源中国头条

热门文章

  1. HTML5中关于解决video标签禁止右键和下载视频的办法
  2. 购物商城,规格选择,无货的规格置灰计算方法
  3. Lora超全知识归纳,对于lora和lorawan的详细介绍
  4. 《2012年中国移动信息化成果汇编》慧点科技篇
  5. 信息化助力企业合同风险的法律与财务联防联控
  6. (每日一练c++)CC28 买卖股票的最好时机 iii
  7. web前端学习笔记——锚点跳转
  8. LevelDB 源码剖析(八)Compaction模块:Minor Compaction、Major Compaction、文件选取、执行流程、垃圾回收
  9. 深入理解 HBase Compaction 机制
  10. Win7下无损分区和分区调整