ASM

ASM Oracle

ASM Basics

  • The smallest unit of storage written to disk is called an “allocation unit” (AU) and is usually 1MB (4MB recommended for Exadata)
  • Very simply, ASM is organized around storing files
  • Files are divided into pieces called “extents”
  • Extent sizes are typically equal to 1 AU, except in 11.1 and 11.2 where it will use variable extent sizes that can be 1, 8, 64 AUs  or   1, 4, 16 AUs respectively
  • File extent locations are maintained by ASM using file extent maps.
  • ASM maintains file metadata in headers on the disks rather than in a data dictionary
  • The file extent maps are cached in the RDBMS shared pool; these are consulted when an RDBMS process does I/O
  • ASM is very crash resilient since it uses instance / crash recovery similar to a normal RDBMS (similar to using undo and redo logging)

ASM Diskgroups 

Creating Diskgroup:

CREATE DISKGROUP disk_group_1 NORMAL

REDUNDANCY

FAILGROUP failure_group_1 DISK

‘/devices/diska1’ NAME diska1,

‘/devices/diska2’ NAME diska2,

FAILGROUP failure_group_2 DISK

‘/devices/diskb1’ NAME diskb1,

‘/devices/diskb2’ NAME diskb2;
NOTE :  The above disk group given as NORMAL redundancy, that means it contain 2 Fail groups (i.e., 2 sets of each data is maintained) also similarly for HIGH redundancy each data is made into thrice(1 original and 2 duplicates) so it makes 3 fail groups in Disk group
Drop disk groups

DROP DISKGROUP DATA INCLUDING CONTENTS;

Add disks

ALTER DISKGROUP DATA ADD DISK ‘/dev/sda3’;

Drop a disk

ALTER DISKGROUP DATA DROP DISK DATA_0001;

Resize all disks in a disk group

ALTER DISKGROUP DATA RESIZE ALL SIZE 100G;

UNDROP DISKS clause of the ALTER DISKGROUP

ALTER DISKGROUP DATA UNDROP DISKS;

Rebalance diskgroup

ALTER DISKGROUP DATA REBALANCE POWER 5;

Check Diskgroup

ALTER DISKGROUP DATA CHECK;

ALTER DISKGROUP DATA CHECK NOREPAIR;

Diskgroup Metadata Backup

md_backup -b asm_backup.mdb.txt -g data,fra

ASM Specific Init.ora Parameters

*.cluster_database=true

*.asm_diskstring=’/dev/sd*1′

*.instance_type=asm

*.shared_pool_size=100M

*.large_pool_size=80M

*.db_cache_size=60M

*.asm_diskgroups=’DATA’,’FRA’

Initialize ASM for non-RAC

./localconfig add

Manually start CSSD (non-RAC)

/etc/init.d/init.cssd start

Manually stop CSSD ( non-RAC)

/etc/init.d/init.cssd stop

Resetting CSS to new Oracle Home

localconfig reset /apps/oracle/product/11.1.0/ASM

ASM Dictionary Views

v$asm_alias  —list all aliases in all currently mounted diskgroups

v$asm_client —list all the databases currently accessing the diskgroups

v$asm_disk —-lists all the disks discovered by the ASM instance.

v$asm_diskgroup —Lists all the diskgroups discovered by the ASM instance.

v$asm_file —Lists all files that belong to diskgroups mounted by the ASM instance.

v$asm_operation —Reports information about current active operations. Rebalance activity is reported in this view.

v$asm_template —Lists all the templates currently mounted by the ASM instance.

v$asm_diskgroup_stat —same as v$asm_diskgroup but does discover new disgroups. Use this view instead of v$asm_diskgroup.

v$asm_disk_stat —same as v$asm_disk but does not discover new disks. Use this view instead of v$asm_disk.

srvctl commands

ADD

srvctl add asm -n rac3 -i +ASM3 -o /opt/oracle/app/product/10.2.0/asm

ENABLE

srvctl enable asm -n rac3 -i +ASM3

DISABLE

srvctl disable asm -n rac3 -i +ASM3

START

srvctl start asm -n rac3

STOP

srvctl stop asm -n rac3

CONFIG

srvctl config asm -n rac1

REMOVE

srvctl remove asm -n rac1

STATUS

srvctl status asm

srvctl status asm -n rac1

MODIFY

srvctl modify asm -o -n rac1

ASMLIB commands ( as root)

/etc/init.d/oracleasm start

/etc/init.d/oracleasm stop

/etc/init.d/oracleasm restart

/etc/init.d/oracleasm configure

/etc/init.d/oracleasm status

/etc/init.d/oracleasm enable

/etc/init.d/oracleasm disable

/etc/init.d/oracleasm listdisks

/etc/init.d/oracleasm deletedisk

/etc/init.d/oracleasm scandisks

/etc/init.d/oracleasm querydisk /dev/sdb1

/etc/init.d/oracleasm createdisk /dev/sdb1 VOL1

/etc/init.d/oracleasm renamedisk /dev/sdb1 VOL1

asmcmd Commands

cd —–changes the current directory to  the specified directory

du —–Displays the total disk space occupied by ASM files in the specified

ASM directory and all its subdirectories, recursively.

find —–Lists the paths of all occurrences of the specified name ( with wildcards) under the specified directory.

ls +data/testdb —-Lists the contents of an ASM  director, the attributes of the specified file, or the names and attributes of all disk groups.

lsct —–Lists information about current ASM clients.

lsdg —-Lists all disk groups and their attributes

mkalias —-Creates an alias for a system generated filename.

mkdir —–Creates ASM directories.

pwd ——–Displays the path of the current ASM directory.

rm        ——-Deletes the specified ASM Files or directories.

rm -f  

rmalias ———Deletes the specified alias, retaining the file that the alias points to

lsdsk ———-Lists disks visible to ASM.

md_backup ——Creates a backup of all of the mounted disk groups.

md_restore ——Restores disk groups from a backup.

remap —-repairs a range of physical blocks on a disk.

cp ——copies files into and out of ASM.

SYSASM Role (Starting in Oracle Database 11g)

SQL> Grant sysasm to sys; —sysdba deprecated sqlplus / as sysasm

ASM Rolling Upgrades START

alter system start rolling migration to 11.2.0.2;

DISABLE

alter system stop rolling migration;

Database INIT parameters for ASM.

*.control_files=’+DATA/orcl/controlfile/control1.ctl’,’+FRA/orcl/controlfile/control2.ctl’

*.db_create_file_dest=’+DATA’

*.db_create_online_log_dest_1=’+DATA’

*.db_recovery_file_dest=’+DATA’

*.log_archive_dest_1=’LOCATION=+DATA’

*.log_file_name_convert=’+DATA/VISKDR’,’+DATA/VISK’ ##added for DG

Removing disks from an ASM disk group

SQL> select group_number,name from v$asm_disk  order by group_number,name;
GROUP_NUMBER   NAME
———— ——————————
1 ASM_ORADATA31_0000
1 ASM_ORADATA31_0001
1 ASM_ORADATA31_0002
1 ASM_ORADATA31_0003
1 ASM_ORADATA31_0004
1 ASM_ORADATA31_0005
2 ASM_ORADATA32_0000
2 ASM_ORADATA32_0001
2 ASM_ORADATA32_0002
2 ASM_ORADATA32_0003
2 ASM_ORADATA32_0004
2 ASM_ORADATA32_0005

12 rows selected.

SQL> ALTER DISKGROUP ASM_ORADATA31 DROP DISK ASM_ORADATA31_0005;
Diskgroup altered.

SQL> ALTER DISKGROUP ASM_ORADATA32 DROP DISK ASM_ORADATA32_0005;
Diskgroup altered.

SQL> select est_minutes from V$ASM_OPERATION;

EST_MINUTES
———–
6

MIGRATE to ASM using RMAN

run

{

backup as copy database format ‘+DATA’;

switch database to copy;

#For each logfile

sql “alter database rename ‘/data/oracle/VISK/redo1a.rdo’ to ‘+DATA’ “;

alter database open resetlogs;

#For each tempfile

sql “alter tablespace TEMP add tempfile” ;

}

Restore Database to ASM using SET NEWNAME 

run

{

allocate channel d1 type disk;

#For each datafile

set newname for datafile 1 to ‘+DATA’;

restore database;

switch datafile all;

release channel d1;

}

Refer more Master Note for Automatic Storage Management (ASM) (Doc ID 1187723.1)
Information Center: Install and Configure Oracle Automatic Storage Management (Doc ID 1522675.2)