Oracle Automatic Storage Management (ASM)
Version 12.1

General Information
Library Note Morgan's Library Page Header
ACE Director Alum Daniel Morgan, founder of Morgan's Library, is scheduling complimentary technical Workshops on Database Security for the first 30 Oracle Database customers located anywhere in North America, EMEA, LATAM, or APAC that send an email to asra_us@oracle.com. Request a Workshop for your organization today.
Purpose ASM is Oracle's Logical Volume Manager making possible enhanced performance, load balancing, redundancy, and other features managed by an Oracle instance (not database) installed as part of Oracle Clusterware.
Operating System Oracle Enterprise Linux 6.2 or above
Dependencies
AWR_PDB_ASM_BAD_DISK GV_$ASM_CLIENT V_$ASM_ACFS_SEC_REALM_GROUP
AWR_PDB_ASM_DISKGROUP GV_$ASM_DBCLONE_INFO V_$ASM_ACFS_SEC_REALM_USER
AWR_PDB_ASM_DISKGROUP_STAT GV_$ASM_DISK V_$ASM_ACFS_SEC_RULE
AWR_ROOT_ASM_BAD_DISK GV_$ASM_DISKGROUP V_$ASM_ACFS_SEC_RULESET
AWR_ROOT_ASM_DISKGROUP GV_$ASM_DISKGROUP_SPARSE V_$ASM_ACFS_SEC_RULESET_RULE
AWR_ROOT_ASM_DISKGROUP_STAT GV_$ASM_DISKGROUP_STAT V_$ASM_ALIAS
CDB_HIST_ASM_BAD_DISK GV_$ASM_DISK_IOSTAT V_$ASM_ATTRIBUTE
CDB_HIST_ASM_DISKGROUP GV_$ASM_DISK_IOSTAT_SPARSE V_$ASM_AUDIT_CLEANUP_JOBS
CDB_HIST_ASM_DISKGROUP_STAT GV_$ASM_DISK_SPARSE V_$ASM_AUDIT_CLEAN_EVENTS
DBA_HIST_ASM_BAD_DISK GV_$ASM_DISK_SPARSE_STAT V_$ASM_AUDIT_CONFIG_PARAMS
DBA_HIST_ASM_DISKGROUP GV_$ASM_DISK_STAT V_$ASM_AUDIT_LAST_ARCH_TS
DBA_HIST_ASM_DISKGROUP_STAT GV_$ASM_ESTIMATE V_$ASM_CLIENT
DBMS_FEATURE_ASM GV_$ASM_FILE V_$ASM_DBCLONE_INFO
DBMS_FEATURE_FLEX_ASM GV_$ASM_FILEGROUP V_$ASM_DISK
GV_$ASM_ACFSREPL GV_$ASM_FILEGROUP_FILE V_$ASM_DISKGROUP
GV_$ASM_ACFSREPLTAG GV_$ASM_FILEGROUP_PROPERTY V_$ASM_DISKGROUP_SPARSE
GV_$ASM_ACFSSNAPSHOTS GV_$ASM_FILESYSTEM V_$ASM_DISKGROUP_STAT
GV_$ASM_ACFSTAG GV_$ASM_OPERATION V_$ASM_DISK_IOSTAT
GV_$ASM_ACFSVOLUMES GV_$ASM_QUOTAGROUP V_$ASM_DISK_IOSTAT_SPARSE
GV_$ASM_ACFS_ENCRYPTION_INFO GV_$ASM_TEMPLATE V_$ASM_DISK_SPARSE
GV_$ASM_ACFS_SECURITY_INFO GV_$ASM_USER V_$ASM_DISK_SPARSE_STAT
GV_$ASM_ACFS_SEC_ADMIN GV_$ASM_USERGROUP V_$ASM_DISK_STAT
GV_$ASM_ACFS_SEC_CMDRULE GV_$ASM_USERGROUP_MEMBER V_$ASM_ESTIMATE
GV_$ASM_ACFS_SEC_REALM GV_$ASM_VOLUME V_$ASM_FILE
GV_$ASM_ACFS_SEC_REALM_FILTER GV_$ASM_VOLUME_STAT V_$ASM_FILEGROUP
GV_$ASM_ACFS_SEC_REALM_GROUP V_$ASM_ACFSREPL V_$ASM_FILEGROUP_FILE
GV_$ASM_ACFS_SEC_REALM_USER V_$ASM_ACFSREPLTAG V_$ASM_FILEGROUP_PROPERTY
GV_$ASM_ACFS_SEC_RULE V_$ASM_ACFSSNAPSHOTS V_$ASM_FILESYSTEM
GV_$ASM_ACFS_SEC_RULESET V_$ASM_ACFSTAG V_$ASM_OPERATION
GV_$ASM_ACFS_SEC_RULESET_RULE V_$ASM_ACFSVOLUMES V_$ASM_QUOTAGROUP
GV_$ASM_ALIAS V_$ASM_ACFS_ENCRYPTION_INFO V_$ASM_TEMPLATE
GV_$ASM_ATTRIBUTE V_$ASM_ACFS_SECURITY_INFO V_$ASM_USER
GV_$ASM_AUDIT_CLEANUP_JOBS V_$ASM_ACFS_SEC_ADMIN V_$ASM_USERGROUP
GV_$ASM_AUDIT_CLEAN_EVENTS V_$ASM_ACFS_SEC_CMDRULE V_$ASM_USERGROUP_MEMBER
GV_$ASM_AUDIT_CONFIG_PARAMS V_$ASM_ACFS_SEC_REALM V_$ASM_VOLUME
GV_$ASM_AUDIT_LAST_ARCH_TS V_$ASM_ACFS_SEC_REALM_FILTER V_$ASM_VOLUME_STAT
 
O/S Configuration as root
Install Oracle Validated configuration rpm rpm -Uhv oracle-validated-<version>-<release>.rpm

-- review /etc/sysconfig/oracle-validated/results/orakernel.log
Create Grid Groups and the Grid Binaries Owner /usr/sbin/groupadd -g 501 ginstall
/usr/sbin/groupadd -g 502 gdba
/usr/sbin/groupadd -g 503 goper
/usr/sbin/useradd -u 500 -m -g ginstall -G gdba,goper grid
id grid

-- set the password to oracle1 (I used ora123 for PTC)
passwd grid
 
 
Create Installation Directory Tree mkdir -p /app/grid
chown -R grid:gdba /app/grid
chmod -R 775 /app/grid

mkdir /stage
chown -R grid:gdba /stage
Alter kernel parameters if any do not match the values at right fs.aio-max-nr = 3145728
fs.file-max = 6815744
kernel.core_uses_pid=1
kernel.msgmni=2878
kernel.msgmax=8192
kernel.msgmnb=65536
kernel.sem = 250 32000 100 142
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.shmmni = 4096
kernel.sysrq=1
net.core.rmem_default =262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route=0
net.ipv4.ip_forward = 0
net.ipv4.ip_local_port_range = 9000 65500
net.ipv4.tcp_syncookies=1
tcp.ipv4.tcp_wmem = 262144 262144 262144
tcp.ipv4.tcp_rmem = 4194304 4194304 4194304

-- activate changes

/sbin/sysctl -p
Modify Default Profile -- if Bourne, Korn or Bash shell. Check the install docs if C shell
cat >> /etc/profile <<EOF
if [ $USER = "grid" ]; then
  ulimit -u 16384 -n 65536
  umask 022
fi

if [ $USER = "oracle" ]; then
  ulimit -u 16384 -n 65536
  umask 022
fi
EOF
Set Shell Limits -- modify limits.conf
cat >> /etc/security/limits.conf <<EOF
oracle hard core unlimited
oracle hard memlock 50000000
oracle hard nofile 131072
oracle hard nproc 131072
oracle soft core unlimited
oracle soft memlock 50000000
oracle soft nofile 131072
oracle soft nproc 131072
EOF

-- modify /etc/pam.d/ login
session required pam_limits.so
Modify .bashrc # cd /home/grid

vi .bashrc

-- append the following:
umask 022

GRID_HOSTNAME=?.mlib.org
GRID_HOME=/app/grid
LD_LIBRARY_PATH=$GRID_HOME/lib:$LD_LIBRARY_PATH
TMP=/tmp
TEMP=/tmp
TMPDIR=/tmp
PATH=$GRID_HOME/bin:$PATH
export GRID_HOSTNAME GRID_HOME  LD_LIBRARY_PATH
export TMP TEMP TMPDIR
export PATH

alias gr='cd $GRID_HOME'
alias asm='asmclb'

-- close all open terminal windows and open new ones

$ set


-- validate the environment
 
Notes -- unzip the installation files and verify owned by grid:ginstall or chown -R grid:ginstall grid
 
 
Clusterware Installation as root
Preparation  
Step 1: Accept the defaults and click [Next]  
Step 2: Accept the defaults and click [Next]  
Step 3: Accept the defaults and click [Next]  
Step 4: Accept the defaults and click [Next]  
Step 5: Accept the defaults and click [Next]  
Step 4: 6ccept the defaults and click [Next]  
Step 7: Accept the defaults and click [Next]  
Step 8: Accept the defaults and click [Next]  
Step 9: Accept the defaults and click [Next]  
Step 10: Accept the defaults and click [Next]  
Step 11: Accept the defaults and click [Next]  
Step 12: Accept the defaults and click [Next]  
Step 13: Accept the defaults and click [Next]  
Step 14: Accept the defaults and click [Next]  
Step 15: Accept the defaults and click [Next]  
Step 16: Accept the defaults and click [Next]  
Step 17: Accept the defaults and click [Next]  
Step 18: Accept the defaults and click [Next]  
Step 19: Watch patiently while the progress bar completes its journey to 100%  
Step 20: Declare success and click [Close]  
Use grid tools to validate installation $ crsctl check crs

$ srvctl status asm

$ ./cluvfy.sh stage –post crsinst -n node1 –verbose > server_post_crsinst.txt
 
ASMCMD Commands
   
 
   
 
   
 
 
CREATE DISKGROUP
Names a group of disks and specifies the Oracle Database to manage it as a logical unit (LUN). Files are spread across all available disks in the group to balance I/O with automatic storage rebalancing whenever the storage configuration changes. CREATE DISKGROUP <diskgroup_name> <HIGH | NORMAL | LOW> REDUNDANCY
[<QUORUM | REGULAR>] [FAILGROUP <failgroup_name>]
DISK <search_string> [NAME <disk_name>] [SIZE <size_clause>] [<FORCE | NOFORCE>]
[ATTRIBUTE <'attribute'=attribute_value>];

Attribute Description
ACCESS_CONTROL.ENABLED TRUE or FALSE
ACCESS_CONTROL.UMASK a umask, for example 022 the defaul is 066
COMPATIBLE.RDBMS The minimum compatible database version for example 11.2
   
   
 
   
 
 
ALTER DISKGROUP
ADD ALTER DISKGROUP <disk_group_name> ADD <path_name, path_name, ...>;
[root@mlibp1n1 mapper]# ls -la /dev/oracleasm/disks/POD2_PRD_DG1*
brw-rw---- 1 oracle dba 253, 34 Dec 12 23:10 /dev/oracleasm/disks/POD2_PRD_DG1_01
brw-rw---- 1 oracle dba 253, 61 Dec 12 23:10 /dev/oracleasm/disks/POD2_PRD_DG1_02
brw-rw---- 1 oracle dba 253, 59 Dec 12 23:10 /dev/oracleasm/disks/POD2_PRD_DG1_03
brw-rw---- 1 oracle dba 253, 57 Dec 12 23:10 /dev/oracleasm/disks/POD2_PRD_DG1_04
brw-rw---- 1 oracle dba 253, 54 Dec 12 23:10 /dev/oracleasm/disks/POD2_PRD_DG1_05
brw-rw---- 1 oracle dba 253, 52 Dec 12 23:10 /dev/oracleasm/disks/POD2_PRD_DG1_06
brw-rw---- 1 oracle dba 253, 65 Jan 29 03:52 /dev/oracleasm/disks/POD2_PRD_DG1_07
brw-rw---- 1 oracle dba 253, 64 Jan 29 03:52 /dev/oracleasm/disks/POD2_PRD_DG1_08


A second  validation method is:
Login as oracle and source the ASM environment using oraenv
Login to sqlplus as sysasm and run the query to check the status of the newly added disks.


conn / as sysasm

SQL> SELECT name, path, header_status
   2 FROM v$asm_disk
   3 WHERE header_status = 'PROVISIONED';

NAME                           PATH                           HEADER_STATUS
------------------------------ ------------------------------ -----------------
                               ORCL:POD2_PRD_DG1_08           PROVISIONED
                               ORCL:POD2_PRD_DG1_07           PROVISIONED

A third  validation method is:

/usr/sbin/oracleasm-discover 'ORCL:*'

Output:

Discovered disk: ORCL:POD2_PRD_DG1_07 [268429957 blocks (137436137984 bytes), maxio 512]
Discovered disk: ORCL:POD2_PRD_DG1_08 [268429957 blocks (137436137984 bytes), maxio 512]


If RAC ensure that you can see disk on all nodes. you may have to run the following as root

/usr/sbin/oracleasm scandisks /dev/mapper/ pod2-prd-dg1-07p1
/usr/sbin/oracleasm scandisks /dev/mapper/ pod2-prd-dg1-08p1


Now add the disks to diskgroup

SQL> select name, total_mb, free_mb from v$asm_diskgroup;

NAME                             TOTAL_MB    FREE_MB
------------------------------ ---------- ----------
DG1                                786414      47918
DG2                                327640     136228
DG3                                 65504      24260
DG4                                262112     256888

SQL> ALTER DISKGROUP DG1 ADD DISK 'ORCL:POD2_PRD_DG1_07','ORCL:POD2_PRD_DG1_08';
Diskgroup altered.

SQL> SELECT name, total_mb, free_mb FROM v$asm_diskgroup;

NAME                             TOTAL_MB    FREE_MB
------------------------------ ---------- ----------
DG1                               1048552     310050
DG2                                327640     136228
DG3                                 65504      24260
DG4                                262112     256888
Add Template ALTER DISKGROUP data
ADD TEMPLATE datafile_hot ATTRIBUTE (HOT MIRRORHOT);

ALTER DISKGROUP archives
ADD TEMPLATE datafile_cold ATTRIBUTE (COLD MIRRORCOLD);

ALTER DISKGROUP data
MODIFY FILE '+data/orcl/datafile/users.259.679156903'
ATTRIBUTE (HOT MIRRORHOT);
 
DROP DISKGROUP
Dropping a DiskGroup  
 
 
CREATE TEMPLATE
Create a DiskGroup Template  
 
 
ALTER TEMPLATE
Alter a DiskGroup Template  
 
 
DROP TEMPLATE
Dropping a DiskGroup Template ALTER DISKGROUP <diskgroup_name> DROP TEMPLATE <template_name>;
ALTER DISKGROUP archives DROP TEMPLATE datafile_cole;
 
TOOLS
Clusterware Log Files

Note that there are no files in the rs directory
 
Start ASM  
Stop ASM  
Status ASM  
ASM Processes  
Review ASM Alert Log  
Tail ASM Alert Log  
Create ASM PFILE from Memory  
Review ASM PFILE from Memory  
ASM Disk Groups  
ASM Trace Files  

Related Topics
AMDU
Built-in Functions
Built-in Packages
Get CRS Home
KFED
RAC
Rename Disk Group
What's New In 21c
What's New In 23c

Morgan's Library Page Footer
This site is maintained by Dan Morgan. Last Updated: This site is protected by copyright and trademark laws under U.S. and International law. © 1998-2023 Daniel A. Morgan All Rights Reserved
  DBSecWorx