Automatic
Storage Management (ASM) in the Oracle 10g database
"Non-violence
is the greatest force at the disposal of mankind. It is mightier than the mightiest weapon
of destruction devised by the ingenuity of man."
Gandhi
|
Automatic
Storage Management (ASM) in the Oracle 10g database
ASM provides a
vertical integration of the file system and the volume manager that is
specifically built for Oracle database files. Its key features and benefits are:
-
Stripes files
rather than logical volumes
-
Online disk
reconfiguration and dynamic rebalancing
-
Adjustable
rebalancing speed
-
Provides redundancy
on a file basis
-
Supports only
Oracle database files
-
Custer-aware
-
Automatically
installed
ASM instance do not
have a data dictionary and it is restricted to few SQL commands and Dynamic
Performance view. The following are some example of SQL commands.
Commands:
SQL>
STARTUP/SHUTDOWN
SQL>
ALTER DISKGROUP MOUNT/DISMOUNT
SQL>
ALTER DISKGROUP ONLINE/OFFLINE DISK
SQL>
ALTER DISKGROUP REBALANCE
SQL>
ALTER DISKGROUP CHECK
"
Views:
V$ASM_TEMPLATE
V$ASM_DISKGROUP
V$ASM_CLIENT
V$ASM_FILE
V$ASM_ALIAS
V$ASM_DISK
V$ASM_OPERATION
"
The following are
examples of creating and deleting disk groups.
Creating a
diskgroup:
SQL>
CREATE DISKGROUP dgora1 NORMAL REDUNDANCY
FAILGROUP controller1 DISK
"/dev/rdsk/c0t0d0s2" NAME mydisk SIZE 200G FORCE,
"/dev/rdsk/c0t1d0s2",
"/dev/rdsk/c0t2d0s2"
FAILGROUP controller2 DISK
"/dev/rdsk/c1t0d0s2",
"/dev/rdsk/c1t1d0s2",
"/dev/rdsk/c1t2d0s2";
Dropping a
diskgroup:
SQL>
DROP DISKGROUP dgora1 INCLUDING CONTENTS;
The following are
examples of how to add disks to an existing disk group.
SQL>
ALTER DISKGROUP dgora1
ADD FAILGROUP controller1
"/dev/rdsk/c0t3d0s2" NAME a5;
To remove a disk:
SQL>
ALTER DISKGROUP dgora1 DROP DISK a5;
To undo the removed
disk do the following SQL statement. This only works if the status of drop is
pending or the drop function was not completed yet.
SQL>
ALTER DISKGROUP dgora1 UNDROP DISKS;
Hands_On
# 1:
Assuming you
started your ASM instance.
$
ORACLE_SID=+ASM; export ORACLE_SID
$
sqlplus /nolog
SQL>
CONNECT / AS SYSDBA
SQL>
STARTUP
Display a list of
your diskgroups.
SQL>
SELECT name FROM v$asm_diskgroup;
Display a list of
associated ASM disks.
SQL>
COL name FORMAT a20
SQL>
COL failgroup FORMAT a20
SQL>
SELECT name, failgroup, bytes_read, bytes_written
FROM v$asm_disk
/
Display a list of
associated ASM files.
SQL>
SELECT group_number, file_number, bytes, type, striped
FROM v$asm_file
/
Open another
session with different instance:
$
ORACLE_SID=school; export ORACLE_SID
$
$ sqlplus /nolog
SQL>
CONNECT / AS SYSDBA
Display a list of
all your datafiles.
SQL>
COL file_name FORMAT a40
SQL>
SELECT file_name, tablespace_name
FROM dba_data_files
/
Create a tablespace
that is stored in the ASM disk group dgora1.
SQL>
CREATE TABLESPACE mytablespace2
DATAFILE "+dgora1" SIZE 100m
/
Display a list of
all your datafiles. What do see?
SQL>
COL file_name FORMAT a40
SQL>
SELECT file_name, tablespace_name
FROM dba_data_files
/
Now, you should
have one more line.
Go back on your ASM
instance and display a list of associated ASM files.
SQL>
SELECT group_number, file_number, bytes, type, striped
FROM v$asm_file
/
The result should
be different than before. You added one more datafile to it.
Add one addition
disk to your system.
SQL>
HOST dd if=/dev/zero of=/u02/oradata/school/diska abs=1024k count=200
SQL>
SELECT name, failgroup, bytes_read, bytes_written
FROM v$asm_disk
/
SQL>
ALTER DISKGROUP dgora1
ADD DISK "/u02/oradata/school/diska"
/
Execute the
following query until you get "no rows selected."
SQL>
SELECT operation, est_minutes
FROM v$asm_operation
/
Again, display a
list of associated ASM disks.
SQL>
SELECT name, failgroup, bytes_read, bytes_written
FROM v$asm_disk
/
Now, you should see
one more disk was added to disk group.
|