martes, 28 de agosto de 2012

Parámetro INITRANS y evento "enq: TX - row lock contention"

El parámetro de configuración INITRANS se gestiona de forma automática desde hace algunas versiones Oracle, pero, en sistemas con concurrencias dispares a lo largo del tiempo quizás conviene
dejarlo en un valor fijo grande para evitar formateos de bloques con valores bajos de ese parámetro y consecuentes problemas de adquisición de bloqueos (enq: TX - row lock contention).

Para analizar uno o varioas bloques:

alter system dump datafile <file_id> block <Block_id>;
alter system dump datafile <file_id> block min <Block_id min> block max <Block id max>;

Buscamos en el udump ... el fichero de traza generado y la cadena "itc", que indicaría el número de ITL reservados realmente para el bloque analizado.

Si vemos que es insuficiente para nuestra tasa de concurrencia, cambiaríamos el INITRANS de los objetos afectados (suponiendo una concurrencia máxima de 80 sesiones):

ALTER [TABLE|INDEX] ... INITRANS 80;


lunes, 6 de agosto de 2012

Script - Migración Export Import mediante tuberías y scp

Script útil para migraciones entre distintas versiones Oracle y/o cargas de datos, basado en export/import tradicional, mediante tuberías tipo pipe y scp.

La ventaja de este script es que no utiliza espacio para los ficheros de export (va todo a través de la tuberías pipe) y que se lanza desde el servidor destino de la copia, sólo requiere acceso "scp" sin password (authorized_keys).


SID=$1
IP=$2
USRSSH=$3
SID2=$4

ssh $USRSSH@$IP ". \$HOME/.profile;. \$HOME/.bash_profile;rm /tmp/tmp_exports_$SID;mknod /tmp/tmp_exports_$SID p;sleep 5;export ORACLE_SID=$SID;exp userid=\'sys/sys AS SYSDBA\' file=/tmp/tmp_exports_$SID rows=y full=y consistent=y log=/tmp/tmp_exports_$SID.log" &
rm /tmp/tmp_exports_$SID2
mknod /tmp/tmp_exports_$SID2 p
ssh $USRSSH@$IP ". \$HOME/.profile;. \$HOME/.bash_profile;cat /tmp/tmp_exports_$SID" > /tmp/tmp_exports_$SID2 &
export ORACLE_SID=$SID2
imp userid=\'sys/sys AS SYSDBA\' file=/tmp/tmp_exports_$SID2 full=y ignore=y

-- Ejemplo:

./export_import_full.sh SID_ORIG 192.168.0.1 oracle SID_DEST

Se irá generando un export full de la instancia SID_ORIG ubicada en el servidor 192.168.0.1, al que se accede con el usuario "oracle" (usuario de instalación oracle con .profile o .bash_profile con las variables de entorno Oracle configuradas).
Este export se irá importando a través del paso por 2 tuberias pipe (ficheros tmp_exports_$SID y tmp_exports_$SID2) sobre la instancia SID_DEST ubicada en el servidor desde el que estemos lanzando el script y al que estamos conectado con el usuario de instalación oracle con las variables de entorno Oracle configuradas.