赞
踩
使用AFD(Oracle ASM Filter Driver)来配置共享磁盘
1、AFD特性
* ASM FILTER DRIVER 可以最大限度的限制磁盘的用户权限,即便是root用户,也无法删除AFD磁盘
* 在ASM 12.1之后支持,在12.2中,ASMFD在系统已经安装了ASMLIB的情况下无法使用安装AFD,也不支持扩展分区表;从19c以后的版本,AFD开始支持扩展分区
* 这就是ASMFD相比ASMLIB和udev的新特性,消除了在系统每次被重启后Oracle ASM需要重新绑定磁盘,简化了对磁盘的管理等
* AFD的功能强大,可以省略掉对路径绑定,规则文件授权等,可以直接使用afd完成磁盘的绑定和设置即可
* 在安装完成后,管理磁盘,磁盘识别,绑定与添加也非常方便
* 在没有使用multipath、udev等方法绑定磁盘的情况下,也可以直接使用AFD绑定磁盘即可
2、AFD 配置
要使用AFD来配置共享磁盘,必须以root用户设置环境变量,设置环境变量 $ORACLE_HOME 为Grid Home目录,设置环境变量$ORACLE_BASE为临时目录
# export ORACLE_HOME=/u01/app/19/grid
# export ORACLE_BASE=/tmp
# asmcmd afd_label DATA_1 /dev/sdd --init -- 初始化磁盘
# asmcmd afd_lslbl /dev/sdd -- 查看已经初始化的磁盘
已安装的GRID软件重新配置AFD
# $ORACLE_HOME/bin/asmcmd dsget -- 查看AFD磁盘路径
# asmcmd dsset '/dev/sd*','AFD:*' -- 配置AFD磁盘路径
AFD常用操作
是否支持扩展分区表的测试,查看当前系统内核版本是否支持
# afdroot install
# acfsdriverstate -orahome $ORACLE_HOME supported
# uname -a
# cat /etc/redhat-release
不支持需要升级kmod版本
# rpm -qa|grep kmod
# yum install kmod
# rpm -qa|grep kmod
升级后查看afd驱动是否支持
# acfsdriverstate -orahome $ORACLE_HOME supported
3、添加磁盘 (这里采用多路径)
查询磁盘 wwid
# /usr/lib/udev/scsi_id -g -u -d /dev/sde
添加新磁盘的 wwid\别名
# vi /etc/multipath.conf
multipath {
wwid 47355521712ffff2a076d28ee91234520
alias DATA_3
}
# systemctl reload multipathd.service
# multipath -ll
修改磁盘权限
# vi /etc/rc.local
chown grid:asmadmin /dev/mapper/asmssd*
chmod 660 /dev/mapper/data*
4、查看已有的afd标签
# su - grid
$ asmcmd afd_lsdsk
$ sqlplus / as sysasm
set lines 200 pages 20
col name for a25
col path for a35
col label for a15
col failgroup for a15
select GROUP_NUMBER,GROUP_NUMBER,name,path,label,os_mb,failgroup from v$asm_disk order by 1,7;
5、给需要添加的磁盘打标签,单个节点打标签就可以
例(其他磁盘打标签重复如下步骤即可):
# export ORACLE_HOME=/u01/app/19/grid
# export ORACLE_BZZHE=/tmp
# asmcmd afd_label ASM_ARCH /dev/mapper/ASM_arch_1
# asmcmd afd_label ASM_OCR /dev/mapper/ASM_ocr_1
# asmcmd afd_label ASM_FRA /dev/mapper/ASM_fra_1
# asmcmd afd_label ASM_DATA_3 /dev/mapper/ASM_data_3
其他节点刷新afd磁盘标签信息即可
$ asmcmd afd_refresh
$ asmcmd afd_lsdsk
给磁盘组中添加新磁盘
alter diskgroup DATA add disk 'AFD:DATA_3','AFD:DATA_4','AFD:DATA_5','AFD:DATA_6' rebalance power 8;
创建新磁盘组 external 模式
create diskgroup DATA_2 EXTERNAL REDUNDANCY DISK 'AFD:DATA_5','AFD:DATA_6';
6、删除磁盘、磁盘组
检查磁盘组占用情况
select * from dba_data_files;
select * from dba_temp_files;
select * from v$logfile;
解除磁盘的占用后才能删除磁盘组
sqlplus / as sysasm
alter diskgroup DATA dismount;
查看磁盘组状态
select GROUP_NUMBER,NAME,BLOCK_SIZE,STATE,TYPE,VOTING_FILES from v$asm_diskgroup;
删除DATA磁盘组
drop diskgroup DATA force including contents;
检查当前磁盘组
select GROUP_NUMBER,NAME,BLOCK_SIZE,STATE,TYPE,VOTING_FILES from v$asm_diskgroup;
取消afd标签(若使用的是UDEV或multipath方式,也需将对应资源释放,修改器相应的配置文件,删除相关磁盘的配置等)
查看当前的标签:
$ asmcmd afd_lsdsk
清除标签,只需在一个节点删除,其他节点刷新即可:
$ asmcmd afd_unlabel DATA_1
$ asmcmd afd_refresh
删除磁盘
alter diskgroup DATA drop disk 'DATA_1' rebalance power 5; -- 磁盘重平衡进程数 默认值1.
注意:如果是对OCR磁盘的删除变更等操作需要特别小心,不能出错,出错会导致集群异常。
$ crsctl query css votedisk
查看rebalance过程是否完成
select * from V$ASM_OPERATION;
select name,path,total_mb,free_mb from v$asm_disk;
7、AFD是否支持扩展分区表的测试
官方文档12.2中的AFD不支持扩展分区表,也就是说,当我使用AFD做共享存储的磁盘管理时,如果使用了分区表,用户无法对分区表进行添加分区等操作,本人并未在12.2做过测试,是否支持不得而知,如有兴趣可以按照如下测试方法做测试验证。
我们在19.3上面做测试,测试步骤如下:
在已经配置好采用AFD管理的RAC集群数据库上面创建分区表,并创建相关约束与索引,如下:
我们创建一个以时间为分区标准的分区表,该分区表创建了一个截至到2024年1月1日之前的分区,没有开启启动扩展,也就是说,当用户插入一个创建时间位于2024-01-01之后的日期后,则会报错,此时需要扩展一个新的分区来满足插入操作
create table zzh_part_tb
(
ID NUMBER(20) not null,
NAME VARCHAR2(1000),
create_time DATE
)
PARTITION BY RANGE (CREATE_TIME)
(partition P_1 values less than(to_date('2024-01-01', 'yyyy-mm-dd')));
alter table zzh_part_tb add constraint zzh_part_tb_pk primary key (ID) using INDEX;
create index zzh_part_tb_create_time on zzh_part_tb (create_time);
检查创建结果
select table_name,partition_name from user_tab_partitions where table_name = upper('zzh_part_tb');
TABLE_NAME PARTITION_NAME
--------------- ------------------------------------------------------------------
zzh_part_tb P_1
插入一条符合分区条件的数据
insert into zzh_part_tb values (1,'ZZH',to_date('2023-01-08','yyyy-mm-dd'));
select * from zzh_part_tb;
ID NAME CREATE_TIME
---------- -------------------- ------------------
1 ZZH 08-JAN-19
commit;
插入一条不符合分区条件的数据插入失败
insert into zzh_part_tb values (2,'ZZH',to_date('2024-01-08','yyyy-mm-dd'));
ORA—14400: inserted partition key does not map to any partition
扩展分区
alter table zzh_part_tb add partition P_2 values less than(to_date('2025-01-01', 'yyyy-mm-dd'));
查看表分区信息
select table_name,partition_name from user_tab_partitions where table_name = upper('zzh_part_tb');
TABLE_NAME PARTITION_NAME
--------------- --------------------------------------------------
zzh_part_tb P_1
zzh_part_tb P_2
重新插入2024-01-08的数据
insert into zzh_part_tb values (2,'ZZH',to_date('2024-01-08','yyyy-mm-dd'));
select * from zzh_part_tb;
ID NAME CREATE_TIME
---------- -------------------------------- ------------------
1 ZZH 08-JAN-19
2 ZZH 08-JAN-20
查看新分区中的数据
select * from zzh_part_tb partition(P_2);
ID NAME CREATE_TIME
---------- -------------------------------- ------------------
说明19.3版本ASM磁盘采用AFD方式管理的情况下支持增加或者扩展分区表。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。