# Automatic Storage Management

ASM (del inglés Automatic Storage Management) es una funcionalidad proporcionada por Oracle en su sistema de gestión de bases de datos a partir de la versión 10g y pretende simplificar las tareas de administración de los archivos relacionados con las bases de datos Oracle permitiendo al DBA referirse a grupos de discos manejados por ASM y no a discos individuales. Es una extensión de OMF (Oracle managed files) que también incluye mirroring y striping para proporcionar un almacenamiento seguro y equilibrado.

## Descripción

La completa funcionalidad de ASM es controlada por una instancia ASM, la cual debe estar presente y ejecutándose para que cualquier base de datos configurada para utilizar ASM pueda utilizarse: ASM no es un requerimiento obligatorio para instalar una base de datos ORACLE sino que es una funcionalidad opcional.
ASM no utiliza el sistema de archivos del SO sino que utiliza particiones RAW (no gestionadas por el SO) que brindan beneficios en operaciones I/O (rapidez). La administración de dichas particiones y los archivos que en ellas se encuentren es una tarea exclusiva de ASM, evitando la necesidad de administrar manualmente archivos de bases de datos y la complejidad de equilibrar datos a través de discos y controladores. Para cumplir con su función ASM utiliza grupos de discos (diskgroups) conformados a su vez por varios discos físicos controlados como una sola unidad, ASM administra también los nombres de archivos y locaciones dentro de las particiones pero es posible definir alias y estructuras de directorios para facilidad de referencia. ASM proporciona también plantillas por defecto para cada tipo de archivo que controlan el nivel de redundancia y granularidad pero es posible definir plantillas propias.

## Ventajas y funcionalidad

ASM proporciona varias ventajas y funcionalidades:
* Administra grupos de discos automáticamente.
* Administra redundancia dentro de cada grupo de discos.
* Provee balanceo casi óptimo de operaciones I/O sin intervención manual.
* Permite la administración de objetos de bases de datos sin especificar puntos de montaje o nombres de archivo.
* Soporta archivos grandes.
* Proporciona mirroring y striping a nivel de archivo.
* La administración y configuración de ASM puede hacerse con sentencias SQL, facilitando la comprensión de estas tareas.

## Inicialización de parámetros

La inicialización de parámetros que son de especial interés para una instancia ASM son:
* INSTANCE_TYPE: acepta dos posibles valores, ASM o RDBMS dependiendo del tipo de instancia. Si no se específica, el valor por defecto es RDBMS.
* DB_UNIQUE_NAME: específica un nombre global único para toda la base de datos. El nombre por defecto +ASM se debe cambiar si se pretende correr múltiples instancias.
* ASM_POWER_LIMIT: El máximo poder para operaciones de re-balanceo en una instancia ASM. Los valores válidos se encuentran en el rango de 1 a 11, siendo 1 el valor por defecto. Entre más alto el límite mayores recursos son asignados resultando en operaciones de re-balanceo más rápidas. Este valor también es usado por defecto cuando el parámetro POWER se omite en una operación de re-balanceo.
* ASM_DISKGROUPS:lista de los grupos de disco que deberían ser montados durante el inicio de una instancia ASM o por la sentencia ALTER DISKGROUP ALL MOUNT. Los cambios en la configuración de ASM se ven reflejados automáticamente en este parámetro.
* ASM_DISKSTRING: específica un valor que puede ser usado para limitar los discos considerados en el descubrimiento. Cambiar el valor por defecto puede mejorar la velocidad de montaje de un grupo de discos y la velocidad para añadir un disco a un grupo de discos. Cambiar este parámetro a un valor que prevenga el descubrimiento de discos ya montados puede resultar en un error. El valor por defecto es NULL permitiendo que todos los discos apropiados sean considerados.

## Creación de instancia ASM

La siguiente descripción es válida para sistemas Oracle 10g, 11g en Windows y no es válida para sistemas Oracle 11gR2: En una consola DOS de windows el usuario debe ubicarse dentro del directorio HOME de oracle en el subdirectorio database Crear un archivo llamado init+ASM.ora dentro de la carpeta anterior conteniendo el siguiente parámetro:
Establecer ORACLE_SID:
Crear servicio dedicado a la instancia ASM:
Conectar a sqlplus como sysdba:
Dentro de sqlplus crear la instancia e iniciarla por primera vez:
La instancia se ha creado con éxito y está lista para asignación de grupos de discos
También es posible realizar esta operación usando el asistente de configuración de bases de datos de Oracle, seleccionando la opción Crear instancia ASM
Con la llegada de la versión 11gR2 este asistente ya no contiene la opción de crear una instancia ASM y es necesaria la instalación de Oracle Grid infrastructure y tener presente el servicio de Cluster (CSS) para trabajar con ASM.

## Iniciar y parar una instancia ASM

Las instancias ASM se pueden inicializar y parar de manera similar a la forma en que se hace para una instancia de base de datos normal. Las opciones para el comando STARTUP son:
       FORCE: realiza un SHUTDOWN ABORT antes de reiniciar la instancia ASM.
       MOUNT: inicia la instancia ASM y monta los grupos de disco especificados en el parámetro ASM_DISKGROUPS.
       NOMOUNT: inicia la instancia ASM sin montar ningún grupo de discos.
       OPEN: está no es una opción válida para una instancia ASM.
Las opciones para el comando SHUTDOWN son:
       NORMAL: la instancia ASM espera que todas las instancias ASM conectadas y las sesiones SQL terminen y luego se para.
       IMMEDIATE: la instancia ASM espera que cualquier transacción SQL se complete y luego se para. No espera que las sesiones terminen.
       TRANSACTIONAL: trabaja igual que IMMEDIATE.
       ABORT: la instancia ASM para instantáneamente.

## Recomendaciones para el almacenamiento usando ASM

Oracle proporciona algunas recomendaciones al trabajar con ASM, se mencionan solo algunas:
* Configurar 2 grupos de discos (diskgroups), uno para los datos y otro para el área de recuperación rápida (en inglés, Fast recovery area)
* Un mínimo de 4 discos de igual tamaño y desempeño es recomendado para cada grupo de discos.
* Se debe asegurar que todos los discos dentro de un grupo de discos ASM tengan características de disponibilidad y desempeño similares ya que en arreglos de discos distintos, el desempeño de las operaciones I/O está limitado por el disco de menor velocidad.
* La distribución de datos dentro de un grupo de discos está basada en capacidad. Se debe asegurar que los discos tengan la misma capacidad para mantener el balance.

## Conceptos

* Instancia ASM: Instancia de base de datos Oracle que se encarga de administrar la funcionalidad de ASM, no es una instancia completa sino solo las estructuras de memoria, esto la vuelve liviana y pequeña.
* Discos de grupos ASM (ASM diskgroups): Unidades que maneja ASM y con las que interactúa el usuario, cada diskgroup está conformado por varios discos (llamados discos ASM) administrados como una sola unidad.
* Plantillas: Conjunto de parámetros agrupados bajo un nombre que pueden ser aplicados a los archivos dentro de un diskgroup.
* Alias: ASM permite crear nombres amigables al usuario para los archivos dentro de un diskgroup, en vez de utilizar los nombres asignados por ASM.