miércoles, 26 de noviembre de 2014

Obtener el espacio libre y usado de grupos de discos Oracle ASM

Space used/free in ASM Disk Groups taking mirroring into account

He pasado mucho tiempo buscando como obtener el porcentaje espacio libre y
usado en los grupos de discos de ASM para poder definir alarmas cuando
el porcentaje del espacio usado llegue a un valor definido.


Muchos, si no es que todos, no toman en cuenta la redundancia de los grupos
de discos.


Es por eso que, al documentarme, consegui el objetivo.


Las siguientes son las consideraciones tomadas en cuenta para la escritura de la consulta:


Columnas de v$asm_diskgroup 11g R2


TYPE
Tipo de redundancia en el grupo de discos:
EXTERNA (EXTERN)
DOBLE (NORMAL)
TRIPLE (HIGH)


TOTAL_MB
Capacidad total del grupo de discos (en megabytes).


FREE_MB
Capacidad del grupo de discos sin utilizar (en megabytes).


REQUIRED_MIRROR_FREE_MB
Cantidad de espacio que se requiere para soportar la redundancia
del grupo de discos en caso de que uno o más discos fallen.
El total de espacio mostrado toma en cuenta el espejeo. Es decir, para
doble redundancia es igual al tamaño de un disco dentro del grupo de discos.
Si la redundancia es triple, este valor es igual a la suma del tamaño
de dos discos dentro del grupo de discos.
Este espacio no puede ser utilizado de forma "directa" para archivos y
de cierta manera se puede decir que es espacio reservado para garantizar
la redundancia de los datos. Por lo tanto, no es considerado como espacio
disponible para archivos.


USABLE_FILE_MB
Cantidad de espacio libre que puede ser utilizado libremente tomando en cuenta
la redundancia. Es decir, el espacio que está disponible para almacenar
archivos de base de datos, entre otros.
La columna USABLE_FILE_MB nos indica el total de espacio libre real que tenemos sin
importar el tipo de redundancia. Es decir, si nos muestra 100mb, entonces, sólo disponemos
de ese espacio libre REAL dentro del grupo de discos.


Tomando en cuenta los puntos anteriores, podemos decir que el espacio total real para
almacenar archivos es (TOTAL_MB-REQUIRED_MIRROR_FREE_MB)/TYPE.
Donde TYPE puede tener valores de 1,2,3 dependiendo de la redundancia configurada.


El espacio libre total en el grupo de discos es igual a USABLE_FILE_MB


El espacio utilizado dentro del grupo de discos es igual a ((TOTAL_MB-REQUIRED_MIRROR_FREE_MB)/TYPE)-USABLE_FILE_MB


Por lo anterior, la consulta para conocer el espacio libre, usado y los respectivos porcentajes es:


select
name
,total_mb
,free_mb
,round(free_mb*100/total_mb) free_pct
,used_mb
,round(used_mb*100/total_mb) used_pct
from (
select
NAME
,round((total_mb-required_mirror_free_mb)/(decode(type,'HIGH',3,'NORMAL',2,1))) total_mb
,(usable_file_mb) free_mb
,round(((total_mb-required_mirror_free_mb)/(decode(type,'HIGH',3,'NORMAL',2,1)))-usable_file_mb) used_mb
from v$asm_diskgroup
)
;




Ejemplo de salida:

NAME     TOTAL_MB    FREE_MB   FREE_PCT    USED_MB   USED_PCT
-------- ---------- ---------- ---------- ---------- ----------
DATA        2211840     389785         18    1822055         82
RECO        2939040    1113790         38    1825250         62
REDO         127187      94028         74      33159         26



Puedes ejecutar la consulta en ambientes de pruebas.



Referencias: https://docs.oracle.com/cd/B28359_01/server.111/b28320/dynviews_1023.htm#REFRN30171

Probado en Oracle 11g

viernes, 14 de noviembre de 2014

Crear una Base de Datos Oracle 11g de forma manual usando sqlplus

Create an Oracle Database 11g manually using SQL*Plus

Este es un ejemplo de como crear una base de datos Oracle 11g, usando la herramienta sqlplus. Para aquellos que nos nos gustan las interfaces graficas. :P

###Crear esquema de directorios

$mkdir -p /oradata01/ORCL/DATAFILE
$mkdir -p /oradata01/ORCL/TEMPFILE
$mkdir -p /oradata01/ORCL/CONTROLFILE
$mkdir -p /oradata01/ORCL/ONLINELOG

###Configurar variables de ambiente
$export ORACLE_SID=ORCL
$export ORACLE_BASE=/u01/app/oracle
$export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.3/dbhome_1

###Crear archivo de parametros
$echo "
*.db_name='ORCL'
*.memory_target=10G
*.processes = 150
*.audit_file_dest='${ORACLE_BASE}/admin/orcl/adump'
*.audit_trail ='none'
*.db_block_size=8192
*.db_domain=''
*.db_recovery_file_dest='${ORACLE_BASE}/flash_recovery_area'
*.db_recovery_file_dest_size=2G
*.diagnostic_dest='${ORACLE_BASE}'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
*.open_cursors=300
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
*.control_files='/oradata01/ORCL/CONTROLFILE/control01.ctl'
*.control_files='/oradata01/ORCL/CONTROLFILE/control02.ctl'
*.compatible ='11.2.0'
" > /tmp/initORCL.ora


###Conectarnos a sqlplus como sysdba
$sqlplus /nolog
SQL>conn /as sysdba

/*
Iniciar instancia ORCL
*/
SQL>startup nomount pfile=/tmp/initORCL.ora;

/*
Crear la base de datos ORCL
*/
SQL>CREATE DATABASE ORCL
USER SYS IDENTIFIED BY ORACLE
USER SYSTEM IDENTIFIED BY ORACLE
DATAFILE '/oradata01/ORCL/DATAFILE/system_d1.dbf' SIZE 325M REUSE AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED
SYSAUX DATAFILE '/oradata01/ORCL/DATAFILE/sysaux_d1.dbf' SIZE 120M REUSE AUTOEXTEND ON NEXT 5M MAXSIZE 8192M
DEFAULT TABLESPACE USERS DATAFILE '/oradata01/ORCL/DATAFILE/users01.dbf' SIZE 50M REUSE AUTOEXTEND ON MAXSIZE 16g
DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/oradata01/ORCL/TEMPFILE/temp_01.dbf' SIZE 40M REUSE AUTOEXTEND ON NEXT 1m MAXSIZE UNLIMITED
UNDO TABLESPACE "UNDOTBS1" DATAFILE
'/oradata01/ORCL/DATAFILE/undotbs_d1.dbf' SIZE 200M AUTOEXTEND ON NEXT 4M MAXSIZE 8G,
'/oradata01/ORCL/DATAFILE/undotbs_d2.dbf' SIZE 200M AUTOEXTEND ON NEXT 4M MAXSIZE 8G
CHARACTER SET WE8MSWIN1252
NATIONAL CHARACTER SET AL16UTF16
LOGFILE
('/oradata01/ORCL/ONLINELOG/redo_g01_m01.rdo') size 50m,
('/oradata01/ORCL/ONLINELOG/redo_g02_m01.rdo') size 50m,
('/oradata01/ORCL/ONLINELOG/redo_g03_m01.rdo') size 50m
EXTENT MANAGEMENT LOCAL
MAXLOGFILES 32
MAXLOGMEMBERS 4
MAXLOGHISTORY 9999
MAXDATAFILES 2500
MAXINSTANCES 1;

/*
Ejecutar para crear las vistas de Diccionario de Datos
*/
--Crea las vistas del diccionario de datos
SQL>@?/rdbms/admin/catalog.sql
--Ejecuta scripts para utilizar PL/SQL
SQL>@?/rdbms/admin/catproc.sql
--Crea vistas para monitorear bloqueos en base de datos
SQL>@?/rdbms/admin/catblock.sql

SQL>conn system/ORACLE
--Permite deshabilitar comandos de usuario
SQL>@?/sqlplus/admin/pupbld.sql

/*
Para instalar JVM
*/
SQL>conn / as sysdba
SQL>@?/javavm/install/initjvm.sql
SQL>@?/xdk/admin/initxml.sql
SQL>@?/xdk/admin/xmlja.sql
SQL>@?/rdbms/admin/catjava.sql
SQL>@?/rdbms/admin/catexf.sql

/*
Para instalar XDB, muy importante para poder habilitar el envio de correos desde la base de datos
*/
SQL>create tablespace XDB datafile '/oradata01/ORCL/DATAFILE/xdb_d1.dbf' size 50m autoextend on next 1m maxsize 8G
extent management local uniform size 1m segment space management auto;

SQL>create user XDB identified by XDB
default tablespace XDB quota unlimited on XDB
temporary tablespace TEMP;

SQL>@?/rdbms/admin/catqm.sql XDB XDB TEMP NO

/*
Compilacion de objetos de base de datos
*/
SQL>@?/rdbms/admin/utlrp.sql
SQL>@?/rdbms/admin/utlrp.sql
SQL>@?/rdbms/admin/utlrp.sql

/*
Creacion de SPFile, bajamos y subimos la instancia ORCL
*/
SQL>create spfile from memory;
SQL>shutdown immediate;
SQL>startup;