在Oracle中,创建ASM磁盘的N种方法(udev、asmlib、faking)

0    578    1

Tags:

👉 本文共约15947个字,系统预计阅读时间或需60分钟。

前言

无论是安装单机版的asm还是rac都离不开ASM磁盘组的创建,创建ASM磁盘组的关键是创建好需要的asm磁盘,发现很多网友安装grid软件和grid实例,都在磁盘的创建这里有很大的问题,本人又是喜欢总结的人,那么今天我就总结了下各种创建asm磁盘的方法,以备大家查阅。

创建asm磁盘的各种方法

方法一:Faking 方式(只能用于Restart环境,测试环境推荐)

该方法不需要添加额外的磁盘,直接在已有的磁盘上来创建,本人推荐的方法之一。

root用户下执行

查看结果:

其它命令

添加loop设备个数:
第一种办法:修改 /etc/modprobe.conf 文件添加参数:options loop max_loop=20 可以通过 modprobe -v loop 命令立即加载该模块,或重启
第二种办法(通用):mknod -m 0660 /dev/loopX b 7 X

方法二:直接修改/etc/sysconfig/rawdevices配置raw(rhel6之后不支持)

采用下面的方式来增加磁盘,即直接修改/etc/sysconfig/rawdevices (root帐户)

Redhat平台对raw设备的配置在redhat 5之后有了变化。在redhat 5之前,直接配置/etc/sysconfig/rawdevices件,通过/etc/init.d/rawdevices来管理raw设备的启动和关 闭。在Redhat 5之后,原来的raw设备接口已经取消了,redhat 5中通过udev规则进行配置。 要配置,需要编辑/etc/udev/rules.d/60-raw.rules这个文件。

[root@oradb ~]# vi /etc/sysconfig/rawdevices

[root@oradb ~]# cat /etc/sysconfig/rawdevices --查看增加的内容为raw6,raw7

/dev/raw/raw2 /dev/sdb6

/dev/raw/raw3 /dev/sdb7

chown oracle:dba /dev/raw/raw[6-7] --修改属主,否则创建磁盘组时提示权限不够

[root@rhel5 ~]# chown oracle:dba /dev/raw/raw6

[root@rhel5 ~]# chown oracle:dba /dev/raw/raw7

[root@rhel5 ~]# ll /dev/raw/

total 0

crw-rw---- 1 oracle dba 162, 1 Dec 30 14:47 raw1

crw-rw---- 1 oracle dba 162, 2 Dec 30 14:47 raw2

crw-rw---- 1 oracle dba 162, 3 Dec 30 14:36 raw3

crw-rw---- 1 oracle dba 162, 4 Dec 30 14:36 raw4

crw-rw---- 1 oracle dba 162, 5 Dec 30 14:36 raw5

crw------- 1 oracle dba 162, 6 Dec 30 14:36 raw6

crw------- 1 oracle dba 162, 7 Dec 30 14:36 raw7

[root@rhel5 ~]#

重启裸设备服务

[root@rhel5 ~]# /sbin/service rawdevices restart

Assigning devices:

/dev/raw/raw6 --> /dev/sdb6

/dev/raw/raw6: bound to major 8, minor 22

/dev/raw/raw7 --> /dev/sdb7

/dev/raw/raw7: bound to major 8, minor 23

done

[root@rhel5 ~]#

将下面的内容增加到/etc/rc.local文件(root帐户),重新启动主机,使得属主变为oracle

chown oracle:dba /dev/raw/raw6

chown oracle:dba /dev/raw/raw7

chmod 660 /dev/raw/raw6

chmod 660 /dev/raw/raw7

SQL> select instance_name,status from v$instance;

INSTANCE_NAME STATUS

---------------- ------------

+ASM STARTED

SQL> set line 999

SQL> select name,state,free_mb,required_mirror_free_mb,usable_file_mb from v$asm_diskgroup;

NAME STATE FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB

----------------- ----------- ---------- ----------------------- --------------

DATA MOUNTED 941 0 941

DG1 MOUNTED 1862 0 931

SQL> create diskgroup DG1 normal redundancy disk '/dev/raw/raw6','/dev/raw/raw7'; --创建磁盘组DG1

SQL> select * from v$fixed_table where name like '%ASM%'; --查看和asm相关的视图

SQL> select name,allocation_unit_size,state,type,

2 free_mb,required_mirror_free_mb req_mi_fr_mb,usable_file_mb

3 from v$asm_diskgroup;

NAME ALLOCATION_UNIT_SIZE STATE TYPE FREE_MB REQ_MI_FR_MB USABLE_FILE_MB

--------------- -------------------- ----------- ------ ---------- ------------ --------------

DG1 1048576 MOUNTED NORMAL 296 0 148

SQL> create diskgroup DG2 normal redundancy disk '/dev/raw/raw3','/dev/raw/raw4'; --创建磁盘组DG2

SQL> select name,state,free_mb,required_mirror_free_mb,usable_file_mb --查看磁盘组的状态及信息

2 from v$asm_diskgroup;

NAME STATE FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB

--------------- ----------- ---------- ----------------------- --------------

DG1 MOUNTED 296 0 148

DG2 MOUNTED 296 0 148

SQL> select disk_number,total_mb,free_mb from v$asm_disk;

DISK_NUMBER TOTAL_MB FREE_MB

----------- ---------- ----------

1 199 148

0 199 148

1 199 148

0 199 148

重新启动Linux 主机后

SQL> startup --重新启动ASM实例,收到了磁盘组insufficient信息

ASM instance started

ORA-15032: not all alterations performed

ORA-15063: ASM discovered an insufficient number of disks for diskgroup "DG2"

ORA-15063: ASM discovered an insufficient number of disks for diskgroup "DG1"

SQL> ho ls -hlt /dev/raw # LINUX主机重新启动之后属主性质已发生变化

total 0

crw------- 1 root root 162, 4 Nov 10 20:28 raw4

crw------- 1 root root 162, 3 Nov 10 20:28 raw3

crw------- 1 root root 162, 2 Nov 10 20:28 raw2

crw------- 1 root root 162, 1 Nov 10 20:28 raw1

原因:原始设备在引导时会重新映射。默认情况下,在引导时原始设备的拥有者将更改为root 用户

将下面的内容增加到/etc/rc.local文件(root帐户),重新启动主机,使得属主变为oracle,则不再出现类似的提示

chown oracle:dba /dev/raw/raw1

chown oracle:dba /dev/raw/raw2

chown oracle:dba /dev/raw/raw3

chown oracle:dba /dev/raw/raw4

chmod 660 /dev/raw/raw1

chmod 660 /dev/raw/raw2

chmod 660 /dev/raw/raw3

chmod 660 /dev/raw/raw4

SQL> drop diskgroup dg1; --将刚才创建的两个磁盘组删除

SQL> drop diskgroup dg2;

使用root帐户清除/etc/udev/rules.d/60-raw.rules /etc/sysconfig/rawdevices 以及/etc/rc.local刚刚增加的记录

便于下面使用asmlib来创建asm磁盘

方法三:Udev方式(生产推荐使用)

又可以分为2种方式,采用uuid来绑定或采用raw来绑定,采用uuid需要添加多块磁盘,而采用raw方式不需要添加多个磁盘。

udev下的方法一:uuid方式

RedHat 5 UDEV SCSI Rules配置

1 获取需要绑定为ASM Disk的磁盘uuid

2 新建/etc/udev/rules.d/99-oracle-asmdevices.rules,增加以下内容

3 重启服务:

[root@rac1 ~]# start_udev

Starting udev: [ OK ]

RedHat 6 UDEV SCSI Rules

1 编辑/etc/scsi_id.config文件,如果该文件不存在,则创建该文件,添加如下行:

备注:在我的测试中,此步骤可以省略

2 获取需要绑定为ASM Disk的磁盘uuid,比如我们要使用/dev/sdc作为ASM磁盘,那么:

3 新建/etc/udev/rules.d/99-oracle-asmdevices.rules,增加以下内容

4 重启服务:

[root@rac1 ~]# start_udev

Starting udev: [ OK ]

配置 udev 绑定的 scsi_id

注意以下两点:

首先切换到root用户下:

  1. 不同的操作系统,scsi_id 命令的位置不同。

[root@rhel5 ~]# cat /etc/issue

Red Hat Enterprise Linux Server release 5.5 (Tikanga)

Kernel \r on an \m

[root@rhel5 ~]# which scsi_id

/sbin/scsi_id

[root@rhel5 ~]#

  1. 编辑 /etc/scsi_id.config 文件,如果该文件不存在,则创建该文件并添加如下行:

[root@localhost ~]# vi /etc/scsi_id.config

options=--whitelisted --replace-whitespace

[root@localhost ~]#

5.3. 如果是使用 VMware 虚拟机,直接输入 scsi_id 命令可能无法获取 id,需修改 VMware 文件参数,这一步如果在添加磁盘的时候做过这一步的话就可以跳过了,直接获取uuid即可

[root@localhost ~]# scsi_id --whitelisted --replace-whitespace --device=/dev/sdb

[root@localhost ~]# scsi_id --whitelisted --replace-whitespace --device=/dev/sdc

D:\VMs\Oracle Database 11gR2\Oracle Database 11gR2.vmx

使用文本编辑器编辑该文件,在尾部新增一行参数:

disk.EnableUUID="TRUE"

保存文件,重新启动虚拟机。这里注意修改文件的时候一定要在关机的状态下修改,或者 scsi_id -g -u /dev/sdc 来获得uuid,-g -u参数在rhel6以后已经不用了

[root@localhost share]# scsi_id --whitelisted --replace-whitespace --device=/dev/sdb

36000c29fbe57659626ee89b4fba07616

[root@localhost share]# scsi_id --whitelisted --replace-whitespace --device=/dev/sdc

36000c29384cde894e087e5f0fcaa80f4

[root@localhost share]# scsi_id --whitelisted --replace-whitespace --device=/dev/sdd

36000c29022aee23728231ed9b1f9743d

[root@localhost share]# scsi_id --whitelisted --replace-whitespace --device=/dev/sde

36000c2938f431664218d1d2632ff1352

创建并配置 udev rules 文件

[root@localhost ~]# vi /etc/udev/rules.d/99-oracle-asmdevices.rules

KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29fe0fc917d7e9982742a28ce7c", NAME="asm-diskb", OWNER="grid",GROUP="asmadmin", MODE="0660"

KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c293ffc0900fd932348de4b6baf8", NAME="asm-diskc", OWNER="grid",GROUP="asmadmin", MODE="0660"

根据步骤 5 获取的 ID 修改 RESULT 值

这里需要注意,一个KERNEL就是一行,不能换行的,我之前就是犯了这个错误的

添加4块硬盘:

KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29346c1344ffb26f0e5603d519e", NAME="asm-diskb", OWNER="grid",GROUP="asmadmin", MODE="0660"

KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29d08ee059a345571054517cd03", NAME="asm-diskc", OWNER="grid",GROUP="asmadmin", MODE="0660"

KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c295037a910bfb765af8f400aa07", NAME="asm-diskd", OWNER="grid",GROUP="asmadmin", MODE="0660"

KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c2982bda048f642acd3c429ec983", NAME="asm-diske", OWNER="grid",GROUP="asmadmin", MODE="0660"

注意:这里的GROUP="asmadmin", 最好修改成 GROUP="asmdba",不然最后可能用dbca创建数据库实例的时候找不见磁盘组。

udevadm进行测试

用udevadm进行测试,注意udevadm命令不接受/dev/sdc这样的挂载设备名,必须是使用/sys/block/sdc这样的原始设备名。

在显示中,有类似如下输出,表示测试正确,/dev/sdc设备在udev启动以后将会绑定为/dev/asm-disk1:

添加完成后,重启 udev,不同 Linux 发行版本重启方式不一样。

该步骤慢一点,大约可能需要30秒左右吧,等等等等。。。。。。

[root@localhost ~]# start_udev

Starting udev: [ OK ]

[root@localhost ~]#

查看绑定的 asm,如果此时还是看不到 asm disk,请重启操作系统后再查看。

[root@localhost ~]# ll /dev/asm*

brw-rw---- 1 grid asmadmin 8, 17 Oct 17 14:26 /dev/asm-diskb

brw-rw---- 1 grid asmadmin 8, 33 Oct 17 14:26 /dev/asm-diskc

udev下的方法二:raw方式

a.配置裸设备映射,修改/etc/udev/rules.d/60-raw.rules文件

使用root帐户修改/etc/udev/rules.d/60-raw.rules 按如下方式添加磁盘

[root@oradb ~]# cat /etc/udev/rules.d/60-raw.rules --查看添加的内容

ACTION=="add", KERNEL=="/dev/sdb8", RUN+="/bin/raw /dev/raw/raw8 %N"

ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="24", RUN+="/bin/raw /dev/raw/raw8 %M %m"

ACTION=="add", KERNEL=="/dev/sdb9", RUN+="/bin/raw /dev/raw/raw9 %N"

ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="25", RUN+="/bin/raw /dev/raw/raw9 %M %m"

ACTION=="add", KERNEL=="raw8", OWNER="grid", GROUP="asmadmin", MODE="0660"

ACTION=="add", KERNEL=="raw9", OWNER="grid", GROUP="asmadmin", MODE="0660"

[root@oradb ~]# start_udev #重启udev服务

Starting udev: [ OK ]

[root@rhel5 ~]# raw -qa

/dev/raw/raw1: bound to major 7, minor 1

/dev/raw/raw2: bound to major 7, minor 2

/dev/raw/raw3: bound to major 7, minor 3

/dev/raw/raw4: bound to major 7, minor 4

/dev/raw/raw5: bound to major 7, minor 5

/dev/raw/raw6: bound to major 8, minor 22

/dev/raw/raw7: bound to major 8, minor 23

/dev/raw/raw8: bound to major 8, minor 24

/dev/raw/raw9: bound to major 8, minor 25

[root@rhel5 ~]# ll /dev/raw*

crw------- 1 root root 162, 0 Dec 30 14:36 /dev/rawctl

/dev/raw:

total 0

crw------- 1 oracle dba 162, 1 Dec 30 15:29 raw1

crw------- 1 oracle dba 162, 2 Dec 30 15:29 raw2

crw------- 1 oracle dba 162, 3 Dec 30 14:36 raw3

crw------- 1 oracle dba 162, 4 Dec 30 14:36 raw4

crw------- 1 oracle dba 162, 5 Dec 30 14:36 raw5

crw------- 1 oracle dba 162, 6 Dec 30 15:29 raw6

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复