12 febrero 2013

Introducción a ASM




ASM es un manejador de volúmenes y solución de almacenamiento de Oracle para manejar archivos de la Base de Datos Oracle.
ASM en 11gR2 se instala con el ORACLE_HOME del  Grid Infrastructure y antes de que se instale la primera Base de Datos, esta a su vez tiene un ORACLE_HOME distinto.

ASM utiliza grupos de discos para almacenar los archivos; Estos grupos de discos son una colección de discos que ASM los maneja como una unidad. Los discos pueden ser:
·         Un disco duro completo o una partición del disco duro 
·         Un disco o una partición de un array de discos
·         Volúmenes lógicos
·         NFS (Network File System)

Cada disco está dividido en unidades de alojamiento (AU), esta unidad es fundamentalmente como se alojan los datos en el disco, un extent de archivo son una o varias AUs y un archivo en ASM consiste de uno o varios extents. El AU se determina con el parámetro AU_SIZE y los valores pueden ser 1, 2, 4, 8, 16, 32, o 64 MB.

Los archivos que se almacenan en ASM si no se está utilizando ACFS (ASM Cluster  Filesystem), es decir, entornos con una sola instancia sin RAC, son: 
·         Control files
·         Data files, data files temporales, y copias de los data files
·         SPFILEs
·         Online redo logs, archive logs, y Flashback logs
·         Ficheros de respaldos de RMAN
·         Change tracking bitmaps
·         Juegos de datos Data Pump.

ASM también te permite manejar el espejeo (Mirroring) de los discos en tres maneras
·         Normal.-Espejeo de dos vías
·         High.-Espejeo de tres vías
·         External.-No usa espejeo de ASM, si no tu configuración RAID que usaste para la redundancia.

ASM te permite dos tipos de repartir los datos entre los discos (Disk Striping), que se le llaman:
·         Fine-Grained Striping.- Este reduce el estado latente para ciertos tipos de archivos repartiendo la carga más ampliamente entre los discos. Todas las unidades del “stripe” son de 128kb sin importar el tamaño de la AU.
·         Coarse-Grained Striping.- Este provee un balance de cargas para los grupos de discos. Todas las unidades del stripe son igual al tamaño del AU.

Instancia de Automated Storage Management (ASM)

ASM utiliza una instancia para manejar los grupos de discos, esta es una instancia común y corriente, esta realiza mucho menores tareas que una instancia que utilizarías en producción y por ende su memoria es mucho menor (en 11.2.0.3 se recomienda que sea MEMORY_TARGET=1536m).

Grupo de Discos ASM
Oracle recomienda dos grupos de discos (diskgroups) por instancia no RAC o por nodo RAC, para proveer balance de utilización, rendimiento y gestión.

Database Work Area: Aquí es donde los ficheros activos de la base de datos (datafiles, control files, online redo logs y ficheros change tracking usados en la salvaguarda incremental) son almacenados.
Esta localización está indicada en  DB_CREATE_FILE_DEST.

·         Grupo de Discos para desarrollo 1 (0.5 Tb, por ejemplo)
·         Grupo de discos para desarrollo 2 (3.5 Tb, por ejemplo)


Figura 1: Arquitectura de ASM  en la máquina de desarrollo.

Respaldos de la instancia ASM.
No aplicable, dado que ASM no tiene ficheros que aplicar
Despliegue típico de ASM
Un despliegue típico podría venir como sigue:
Administrador del ASM
o    Usuario: asm
o    Grupos: oinstall, asmdba(OSDBA), asmadmin(OSASM)
Administrador  del base de datos
o    Usuario: oracle
o    Grupos: oinstall, asmdba(OSDBA of ASM), dba(OSDBA)

Conclusión

En Oracle Grid Infrastructure 11g Release 2, ASM simplifica, automatiza y reduce los costes y gastos generales, proporcionando una solución unificada e integrada para todas sus necesidades de gestión de archivos que elimina la necesidad de una tercera parte del volumen gerentes, sistemas de archivos y plataformas de clúster.

20 noviembre 2012

Tip: Como saber el nombre de tu base de datos si eres un usuario mindundi


Si tu JP (Ese ser diabólico), te pregunta un día como se llama esa base de datos donde se estás trabajando. Tú no eres más que un usuario “mindundi” y solo tienes un SQLPLUS y ni tienes derechos de lectura sobre los directorios del sistema operativo, que harías, pobre mortal?
SQL> conn usuario/usuario;
Connected.
SQL> select name from v$database;
select name from v$database
                 *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> show parameter db_name
ORA-00942: table or view does not exist

SQL> select sys_context('userenv','db_name') from dual;

SYS_CONTEXT('USERENV','DB_NAME')
--------------------------------------------------------------------
ora11g

SQL> select ora_database_name from dual;

ORA_DATABASE_NAME
--------------------------------------------------------------------
ORA11G.REGRESS.RDBMS.DEV.US.ORACLE.COM

SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------
ORA11g.REGRESS.RDBMS.DEV.US.ORACLE.COM

18 noviembre 2012

Tip: Migrar los objetos PL/SQL de un esquema a otro


En este pequeño tip de hoy trataremos la forma de migrar a un esquema únicamente la lógica de negocio de otro esquema, por ejemplo de nuestro entorno de desarrollo a producción.
Si lo único que queremos es la lógica de negocio que alberga un esquema, un buen truco es ejecutar el siguiente código.

  •  Desde nuestro SQLPLUS:

Ejecutamos el siguiente script:

spool unload_store.sql

select 'dbms_metadata.....(' ||owner||'.'||object_name||');'
from all_objects where owner = 'USERSCHEMA'
and object_type in ('PACKAGE','PACKAGE BODY','PROCEDURE','FUNKTION');

spool off;

y luego ejecutamos el resultado del primero invocando  el fichero generado.
@unload_store

22 octubre 2012

TIP: ¿Que pasa si quiero trabajar con Import/export y el usuario SYS?





En más de una ocasión hemos querido volcar los datos de auditoría de una base de datos a otra  y más concretamente las tablas:
  • AUD$
  •  FGA_LOG$

Supongamos que tenemos una instalación de Oracle 10g R2 en concreto 10.2.0.1, (sí, las hay) y no disponemos de  DBMS_AUDIT_MGMT (nota de Oracle Support 731908.1) para purgar y gestionar la información de auditoría. 



Este paquete solo es para Audit Vault 10.2.0.3 y el uso fuera de este utilitario no esta soportada, sin embargo , desde la versión 11gr2 está disponible de forma libre, aunque fue liberada para la versión 11gr1 específicamente en el patchset 11.1.0.7, además está disponible para la versión 10.2.0.3 en el parche 6989148 , también disponible en la versión 10.2.0.4 en el parche 6996030.
 

¿Cómo hacerlo?

Estas tablas son propiedad de SYS, el usuario más poderoso dentro de una base de datos Oracle (vamos es como Hulk en Avengers) Recordemos que estas tablas no se pueden practicar particiones (mientras siga la tabla en el tablespace system.) y puede que queramos que desaparezcan del tablespace, porque su crecimiento desmesurado puede poner en riesgo el rendimiento de nuestro sistema.

La forma de utilizar a nuestro Hulk (usuario SYS) a la hora de importar los datos es usarlo de la siguiente manera:

 $>imp \"sys/Menele#32 as sysdba\"  tables=fga_log$ file=/oracle/home/table.dmp ignore=Y buffer=1000000 

$>imp \"sys/Menele#32 as sysdba\"  tables=aud$ file=/oracle/home/table.dmp ignore=Y buffer=1000000
 
La opción Ignore=Y, permite que no se recree la table y se importen solo los datos.
Para solo purgar datos podemos utilizar la siguiente estrategia:

 SQL> connect / as sysdba
Connected.
SQL> truncate table fga_log$;
Table truncated.
 
Puedes borrar determinados registros usando la columna  TIMESTAMP# (date) como sigue:


 SQL> delete from fga_log$ where timestamp# < sysdate-14;