Basics
- Start ASM - The old way:
1. oraenv # ora SID = +ASM1 (if second nodes +ASM2 )
2sqlplus / as sysasm
3startup
- Start ASM - The new method:
1srvctl start asm -n ora-node1-hostname
- Check ASM volumes
1srvctl status asm
2asmcmd lsdsk
3asmcmd lsdsk -G DATA
4srvctl status diskgroup -g DATA
- Check clients connected to ASM volume
1# List clients
2asmcmd lsct
3
4DB_Name Status Software_Version Compatible_version Instance_Name Disk_Group
5+ASM CONNECTED 19.0.0.0.0 19.0.0.0.0 +ASM DATA
6+ASM CONNECTED 19.0.0.0.0 19.0.0.0.0 +ASM FRA
7MANA CONNECTED 12.2.0.1.0 12.2.0.0.0 MANA DATA
8MANA CONNECTED 12.2.0.1.0 12.2.0.0.0 MANA FRA
9MREPORT CONNECTED 12.2.0.1.0 12.2.0.0.0 MREPORT DATA
10MREPORT CONNECTED 12.2.0.1.0 12.2.0.0.0 MREPORT FRA
11
12# Files Open
13asmcmd lsof
14
15DB_Name Instance_Name Path
16MANA MANA +DATA/MANA/DATAFILE/blob.268.1045299983
17MANA MANA +DATA/MANA/DATAFILE/data.270.1045299981
18MANA MANA +DATA/MANA/DATAFILE/indx.269.1045299983
19MANA MANA +DATA/MANA/control01.ctl
20MANA MANA +DATA/MANA/redo01a.log
21MANA MANA +DATA/MANA/redo02a.log
22MANA MANA +DATA/MANA/redo03a.log
23MANA MANA +DATA/MANA/redo04a.log
24MANA MANA +DATA/MANA/sysaux01.dbf
25[...]
- Connect to ASM prompt
1. oraenv # ora SID = +ASM
2asmcmd
ASMlib
- ASMlib - provide oracleasm command:
1# list
2oracleasm listdisks
3DATA2
4FRA1
5
6# check
7oracleasm status
8Checking if ASM is loaded: yes
9Checking if /dev/oracleasm is mounted: yes
10
11# check one ASM volume
12oracleasm querydisk -d DATA2
13Disk "DATA2" is a valid ASM disk on device [8,49]
14
15# scan
16oracleasm scandisks
17Reloading disk partitions: done
18Cleaning any stale ASM disks...
19Scanning system for ASM disks...
20Instantiating disk "DATA3"
21
22# Create, delete, rename
23oracleasm createdisk DATA3 /dev/sdf1
24oracleasm deletedisk
25oracleasm renamedisk
- custom script to list disks handle for ASM (not relevant anymore):
1cat asmliblist.sh
2#!/bin/bash
3for asmlibdisk in `ls /dev/oracleasm/disks/*`
4 do
5 echo "ASMLIB disk name: $asmlibdisk"
6 asmdisk=`kfed read $asmlibdisk | grep dskname | tr -s ' '| cut -f2 -d' '`
7 echo "ASM disk name: $asmdisk"
8 majorminor=`ls -l $asmlibdisk | tr -s ' ' | cut -f5,6 -d' '`
9 device=`ls -l /dev | tr -s ' ' | grep -w "$majorminor" | cut -f10 -d' '`
10 echo "Device path: /dev/$device"
11 done
Disks Group
Disk Group : all disks in teh same DG should have same size. Different type of DG, external means that LUN replication is on storage side. When a disk is added to DG wait for rebalancing before continuing operations.
- Connect to ASM instance
1# Find your ASM instance
2ps -ef | grep asm_pmon
3oracle 22338 1 0 2019 ? 00:13:57 asm_pmon_+ASM1
4
5su - oracle
6. oraenv +ASM1
7sqlplus / as sysasm
- Add/Remove disk to DG
1-- Take in udev rule the names oracleasm/dataX
2alter diskgroup DATA add disk '/dev/oracleasm/data3' NAME DATA_0003, '/dev/oracleasm/data4' NAME DATA_0004, '/dev/oracleasm/data5' NAME DATA_0005;
3
4-- Follow up the rebalance
5select * from v$asm_operation;
6
7-- Follow up the rebalance 2
8set lines 200 pages 2000
9select count(1) as COUNT from v$asm_operation;
10
11-- Drop disk
12ALTER DISKGROUP FRA DROP DISK FRA_0003 ;
13ALTER DISKGROUP DATA DROP DISK DATA_0002 ;
14
15-- Add several disks
16alter diskgroup FRA add disk '/dev/oracleasm/fra3' NAME FRA_0003, '/dev/oracleasm/fra2' NAME FRA_0002;
with GUI use
asmca
Check DG
1. oraenv +ASM1
2asmcmd lsdg
3
4# Check if a disks was already added to DG in the past
5od -c /dev/sdi | more
- See all disks:
1set lines 200 pages 2000
2col path for a40
3select group_number, disk_number, name, path from v$asm_disk order by 1,2;
1GROUP_NUMBER DISK_NUMBER NAME PATH
2------------ ----------- ------------------------------ ----------------------------------------
3 1 0 DATA_0000 /dev/oracleasm/data1
4 1 1 DATA_0001 /dev/oracleasm/data2
5 1 2 DATA_0003 /dev/oracleasm/data3
6 1 3 DATA_0004 /dev/oracleasm/data4
7 1 4 DATA_0005 /dev/oracleasm/data5
8 1 5 DATA_0006 /dev/oracleasm/data6
9 1 6 DATA_0007 /dev/oracleasm/data7
10 1 7 DATA_0008 /dev/oracleasm/data8
11 1 8 DATA_0009 /dev/oracleasm/data9
12 1 9 DATA_0010 /dev/oracleasm/data10
13 1 10 DATA_0011 /dev/oracleasm/data11
14 2 0 FRA_0000 /dev/oracleasm/fra1
- Check the spaces usage on Disks:
1set lines 200 pages 2000
2col path for a60
3select d.group_number, d.disk_number, g.name, d.name, d.header_status, d.mount_status, d.total_mb/1024 total_gb, d.free_mb/1024 free_gb, d.path
4from v$asm_disk d, v$asm_diskgroup g
5where d.group_number = g.group_number
6order by 1,2
7/
1GROUP_NUMBER DISK_NUMBER NAME NAME HEADER_STATU MOUNT_S TOTAL_GB FREE_GB PATH
2------------ ----------- -------------------------------- ------- ---------- ---------- ----------------------
3 1 0 DATA DATA_0000 MEMBER CACHED 19.9960938 19.3125 /dev/oracleasm/data1
4 1 1 DATA DATA_0001 FORMER CACHED 19.9960938 19.34375 /dev/oracleasm/data2
5 1 2 DATA DATA_0003 MEMBER CACHED 19.9960938 19.3476563 /dev/oracleasm/data3
6 1 3 DATA DATA_0004 MEMBER CACHED 19.9960938 19.34375 /dev/oracleasm/data4
7 1 4 DATA DATA_0005 MEMBER CACHED 19.9960938 19.34375 /dev/oracleasm/data5
8 1 5 DATA DATA_0006 MEMBER CACHED 19.9960938 19.3476563 /dev/oracleasm/data6
9 1 6 DATA DATA_0007 MEMBER CACHED 19.9960938 19.3515625 /dev/oracleasm/data7
10 1 7 DATA DATA_0008 MEMBER CACHED 19.9960938 19.3554688 /dev/oracleasm/data8
11 1 8 DATA DATA_0009 MEMBER CACHED 19.9960938 19.3515625 /dev/oracleasm/data9
12 1 9 DATA DATA_0010 MEMBER CACHED 19.9960938 19.34375 /dev/oracleasm/data10
13 1 10 DATA DATA_0011 MEMBER CACHED 19.9960938 19.34375 /dev/oracleasm/data11
14 2 0 FRA FRA_0000 MEMBER CACHED 19.9960938 13.8984375 /dev/oracleasm/fra1
- Check general space on ASM volume:
1SET LINES 350
2COL NAME FORMAT A30
3SELECT NAME, TYPE, ROUND(TOTAL_MB/1024) TOTAL_GB,ROUND(FREE_MB/1024) "FREE_GB" FROM V$ASM_DISKGROUP
4/
1NAME TYPE TOTAL_GB FREE_GB
2------------------------------ ------ ---------- ----------
3DATA EXTERN 220 213
4FRA EXTERN 20 14
- Check the content of ASM:
1col gname form a10
2col dbname form a10
3col file_type form a14
4SELECT
5 gname,
6 dbname,
7 file_type,
8 round(SUM(space)/1024/1024) mb,
9 round(SUM(space)/1024/1024/1024) gb,
10 COUNT(*) "#FILES"
11FROM
12 (
13 SELECT
14 gname,
15 regexp_substr(full_alias_path, '[[:alnum:]_]*',1,4) dbname,
16 file_type,
17 space,
18 aname,
19 system_created,
20 alias_directory
21 FROM
22 (
23 SELECT
24 concat('+'||gname, sys_connect_by_path(aname, '/')) full_alias_path,
25 system_created,
26 alias_directory,
27 file_type,
28 space,
29 level,
30 gname,
31 aname
32 FROM
33 (
34 SELECT
35 b.name gname,
36 a.parent_index pindex,
37 a.name aname,
38 a.reference_index rindex ,
39 a.system_created,
40 a.alias_directory,
41 c.type file_type,
42 c.space
43 FROM
44 v$asm_alias a,
45 v$asm_diskgroup b,
46 v$asm_file c
47 WHERE
48 a.group_number = b.group_number
49 AND a.group_number = c.group_number(+)
50 AND a.file_number = c.file_number(+)
51 AND a.file_incarnation = c.incarnation(+) ) START WITH (mod(pindex, power(2, 24))) = 0
52 AND rindex IN
53 (
54 SELECT
55 a.reference_index
56 FROM
57 v$asm_alias a,
58 v$asm_diskgroup b
59 WHERE
60 a.group_number = b.group_number
61 AND (
62 mod(a.parent_index, power(2, 24))) = 0
63 and a.name like '&&db_name'
64 ) CONNECT BY prior rindex = pindex )
65 WHERE
66 NOT file_type IS NULL
67 and system_created = 'Y' )
68WHERE
69 dbname like '&db_name'
70GROUP BY
71 gname,
72 dbname,
73 file_type
74ORDER BY
75 gname,
76 dbname,
77 file_type
78/
1GNAME DBNAME FILE_TYPE MB GB #FILES
2---------- ---------- -------------- ---------- ---------- ----------
3DATA HCBS CONTROLFILE 32 0 1
4DATA HCBS DATAFILE 290692 284 22
5DATA HCBS ONLINELOG 24640 24 8
6DATA HCBS PARAMETERFILE 4 0 1
7DATA HCBS PASSWORD 0 0 1
8DATA HCBS TEMPFILE 6996 7 2
9FRA HCBS AUTOBACKUP 7252 7 259
10FRA HCBS CONTROLFILE 32 0 1
11FRA HCBS ONLINELOG 1632 2 8
Udev rules
In Linux disks name can change after reboot depending the order and numbers of disks. Udev rules allow to give a nickname to a WWID.
- Standard case:
1#Get the disk's UUID
2/lib/udev/scsi_id -g -u /dev/sdh
336000d310004142000000000000000f21
4
5# Config udev rules
6vi /etc/udev/rules.d/99-oracleasm.rules
7KERNEL==โsd?1โณ, ENV{ID_SERIAL}==โ36005076380838362ac00000000000017โณ, SYMLINK+=โoracleasm/data1โณ, OWNER=โoracleโ, GROUP=โoinstallโ, MODE=โ0660โณ
8
9# Reload
10/sbin/udevadm control --reload-rules
11/sbin/udevadm trigger
- Multipath case:
1# Blacklist ASM inside /etc/multipath.conf following https://access.redhat.com/solutions/29537
2
3blacklist {
4 wwid "*"
5 devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
6 devnode "ofsctl"
7 devnode "^asm/*"
8}
1# Get multipath aliases:
2dmsetup ls --target multipath
3
4orafraemc1 (249:7)
5oralogemc1 (249:8)
6oradataemc2 (249:9)
7oradataemc1 (249:10)
8
9udevadm info --query=all --name=/dev/mapper/orafraemc1
10
11udevadm info --query=all --name=/dev/mapper/orafraemc1 | grep DM_UUID
12E: DM_UUID=mpath-36006016053674d003493045f3896897f
13
14
15# With the Alias
16ENV{DM_NAME}=="orafraemc1", OWNER:="oracle", GROUP:="oinstall", MODE:="660"
17ENV{DM_NAME}=="oralogemc1", OWNER:="oracle", GROUP:="oinstall", MODE:="660"
18ENV{DM_NAME}=="oradataemc1", OWNER:="oracle", GROUP:="oinstall", MODE:="660"
19
20# Second way
21ACTION=="add|change", ENV{DM_NAME}=="orafraemc1", OWNER="grid", GROUP="asmadmin", MODE="0660"
22
23# With the UUID :
24ACTION=="add|change", ENV{DM_UUID}=="mpath-[DM_UUID]", SYMLINK+="udev-asmdisk1", GROUP="oinstall", OWNER="grid", MODE="0660"
25
26# Reload udev rules
27/sbin/udevadm control โreload-rules
28/sbin/udevadm trigger
- Check with
ls -l
on the udev path will show on what it point:
1# Wrong config:
2ll /dev/oracleasm/disks/*
3lrwxrwxrwx 1 root root 9 Jan 6 10:15 /dev/oracleasm/disks/DATAEMC1 -> ../../sdu
4lrwxrwxrwx 1 root root 9 Jan 6 10:15 /dev/oracleasm/disks/DATAEMC2 -> ../../sdt
5lrwxrwxrwx 1 root root 9 Jan 6 10:15 /dev/oracleasm/disks/FRAEMC1 -> ../../sdn
6lrwxrwxrwx 1 root root 9 Jan 6 10:15 /dev/oracleasm/disks/LOGEMC1 -> ../../sdr
7
8#Good Config:
9lrwxrwxrwx 1 root root 11 Mar 11 19:19 /dev/oracleasm/disks/NEWORADATA1 -> ../../dm-16
10lrwxrwxrwx 1 root root 11 Mar 11 19:19 /dev/oracleasm/disks/NEWORADATA2 -> ../../dm-17
AFD Disk Label
The Oracle ASMFD simplifies the configuration and management of disk devices by eliminating the need to rebind disk devices used with Oracle ASM each time the system is restarted.
The Oracle ASM Filter Driver rejects any I/O requests that are invalid. This action eliminates accidental overwrites of Oracle ASM disks that would cause corruption in the disks and files within the disk group. For example, the Oracle ASM Filter Driver filters out all non-Oracle I/Os which could cause accidental overwrites.
- Check if ASMlib is enable:
1su - oracle
2asmcmd afd_state
3ASMCMD-9526: The AFD state is 'LOADED' and filtering is 'ENABLED' on host 'host'
- Checks labels on OS:
1lsblk -o name,mountpoint,label,size,uuid
2
3ls -l /dev/disk/by-label
4lrwxrwxrwx. 1 root root 10 Sep 22 17:53 RAC1 -> ../../sdh1
5lrwxrwxrwx. 1 root root 10 Sep 22 17:53 \x05 -> ../../sdi1
- List AFD label:
1# Check one disk
2asmcmd afd_lslbl /dev/sdq1
3--------------------------------------------------------------------------------
4Label Duplicate Path
5================================================================================
6RAC2 /dev/sdq1
7
8# Check all
9asmcmd afd_lsdsk
10--------------------------------------------------------------------------------
11Label Filtering Path
12================================================================================
13RAC2 ENABLED /dev/sdq1
- Label a disk:
1$ORACLE_HOME/bin/asmcmd afd_label 'RAC2' '/dev/sdv1'
- Add a disk to AFD:
1alter diskgroup data add disk 'AFD:DATA2';
- Remove a disk:
1$ORACLE_HOME/bin/asmcmd afd_unlabel 'RAC1'
2$ORACLE_HOME/bin/asmcmd afd_unlabel '/dev/sdv1'
- ASM config:
1# List AFD
2su - oracle
3. oraenv #+ASM1
4$ORACLE_HOME/bin/asmcmd dsget
5parameter:AFD:*, /dev/oracleasm/*
6profile:AFD:*,/dev/oracleasm/*
7
8# Change it
9asmcmd dsset 'AFD:*'
Comments