Archive

Archive for May, 2009

Consulta V$RMAN_STATUS lenta

May 28th, 2009 jospino 2 comments

Hola a todos,

Hoy vino la gente de BACKUP y me comentó que fallaron unos backups de archive logs, y cuando me envían el fichero de log del error, era un timeout, así que ni idea.
Pues bien, como no tengo idea de DATA PROTECTOR, y ni de lo que hace por dentro, le pedí a uno de los que administran DATA PROTECTOR que me explicara un poco la arquitectura y lo que estaba haciendo. Al final de todo deducimos que se quedaba atascado en la ejecución de RMAN.
Después el impresionante seminario con Tanel Poder (Oracle Advance Troubleshooting), del cual comentaré otro día, me dí cuenta que esto le venía bien a su método. Tanel se basa en la sesiones, porque al final ella te va a reportar el error y efectivamente así pasó. Pero fue más “sencillo” de lo normal.
Read more…

This version of HBAnyware only works with hp-lpfc version 8.0.16.40_p2

May 8th, 2009 RuBiCK 3 comments

Para actualizar el firmware de las tarjetas de fibra Emulex se usa el programa HBAnyware que mediante entorno gráfico entre otros muchos datos, podremos actualizar dicho firmware.

Nos ponemos manos a la obra para instalar HBAnyware:

#./HP_ElxApps-26-3.4a16-8.0.16.40_p2.bin
This version of HBAnyware only works with hp-lpfc version 8.0.16.40_p2

Sin llegar a hacer nada, se queja de que la versión del driver que tenemos instalado para la fibra no es el correcto así que vamos a comprobarlo:


# rpm -qa | grep hp-lpfc
hp-lpfc-8.0.16.40-11
# rpm -qi hp-lpfc-8.0.16.40-11
Name        : hp-lpfc                      Relocations: (not relocatable)
Version     : 8.0.16.40                         Vendor: Hewlett-Packard
Release     : 11                            Build Date: Mon Jan 12 16:13:48 2009
Install Date: Fri May  8 01:03:48 2009      Build Host: dolt.usa.hp.com
Group       : System Environment/Kernel     Source RPM: hp-lpfc-8.0.16.40-11.src.rpm
Size        : 2504761                          License: proprietary
Signature   : (none)
Packager    : Hewlett-Packard Company
URL         : http://www.hp.com
Summary     : HP Supported Emulex FC HBA Driver
[...]
Software Versions
Base Driver  - 8.0.16.40_p2
Ioctl Driver - 2.0.30_p2

Como podemos ver, la versión que necesita el HBAanyware y la que hay instalada es la misma:
“only works with hp-lpfc version 8.0.16.40_p2″
“Base Driver – 8.0.16.40_p2″

No obstante vamos a asegurando consultado al modulo que tenemos cargado:

# modinfo lpfc | grep version
version:        0:8.0.16.40_p2 6DB916C7EF7800FBB37F7D0

Las versiónes que indica el rpm así como el módulo que tenemos cargado coinciden.

El fichero de instalación del programa, es un script por lo que echándole un vistazo encontramos la función que chequea la compatibilidad de las versiones:


DRVVER="8.0.16.40_p2"
[...]
check_driver_version () {
        INSTALLEDDRV="`rpm -q hp-lpfc | awk 'BEGIN {FS="-"} {print $3}'`"

        if [ "$INSTALLEDDRV" != "$DRVVER" ]
        then
               echo "This version of HBAnyware only works with hp-lpfc version $DRVVER"
               exit 1
        fi
}

La comprobación la realiza con un rpm -qa y como hemos podido ver, la versión instalada 8.0.16.40_p2 es la misma que la requerida, pero sin embargo, por alguna razón que desconozco en el rpm el nombre del paquete, no aparece el “_p2″, si alguien conoce el motivo, que lo comente :)

Para poder instalar el HBAnyware y poder actualizar el firmware lo que debemos hacer tras asegurarnos que tenemos las versiones requeridas es comentar el if completo que aparece en la función que chequea las versiones !y todo listo!

Categories: Linux Tags: , ,

HP-UX 11.31: Migrar un vg con discos legacy a discos ágiles

May 7th, 2009 RuBiCK 4 comments

Como ya hablé en el post Agile view addressing podemos trabajar usando los dispositivos antiguos o caminos /dev/disk/c#t#d# o los dispositivos nuevos /dev/disk/disk# Os recomiendo que useis los dispositivos en formato agil ya que llevan por debajo la capa de multipathing y será más facil gestionar un único fichero de dispositivo que no 8 y si eso lo multiplicamos por 50 discos que la máquina tenga, os podeis hacer a la idea de la gran diferencia.

¿Que ocurre si tenemos un vg lleno de discos antiguos y queremos migrarlo a discos en formato agil? Lo que tendremos que hacer únicamente es extender el vg con los discos en formato agil y reducir de dicho vg los pvs y pvlinks, así uno por uno.

Número de discos/paths de un vg usando discos en formato legacy:

#vgdisplay -v vgtest |grep -i “pv name”| wc -l
330

Una vez hayamos realizado esta ardua tarea, tendremos un vg con muchos menos discos dentro de él además de tenerlos balanceados con la política que estimemos oportuna.

Número de discos de un vg usando discos en formato agil:

#vgdisplay -v vgtest |grep -i “pv name”| wc -l
42

Y ahora vamos a hacer lo mismo, pero de manera automática, HP-UX provee una herramienta para realizar la migración del vg en caliente mediante un script ubicado en /usr/contrib/bin/vgfsf al cual tan solo tenemos que indicarle si queremos añadir los discos ágiles, eliminar los legacy o hacer ambas acciones combinadas:

/usr/contrib/bin/# ./vgdsf -c
USAGE: vgdsf {-a | -d | -c} vg_name
  -a - Add persistent DSFs to the volume group
  -d - Delete legacy DSFs from the volume group
  -c - Convert legacy DSFs to persistent DSFs (-a and -d)
       in the volume group

Vamos a ver un ejemplo:

/usr/contrib/bin/# ./vgdsf -c vgtest
Converting legacy DSFs to persistent DSFs in VG vgtest
Too many links. Removing link /dev/dsk/c8t1d2
Removed link /dev/dsk/c8t1d2
Persistent DSF /dev/disk/disk268 added to VG vgtest
Too many links. Removing link /dev/dsk/c8t1d3
Removed link /dev/dsk/c8t1d3
[...]

Tras realizar esta operación, tendremos un vg mucho más limpio y sin realizar ningún tipo de esfuerzo. Espero que os sirva de ayuda.

Categories: HP-UX Tags: ,

Extraer información de un log extremadamente grande. Usa Notepad.exe y VBS!

¿Como puedo extraer información de un log demasiado grande para excel sin ninguna herramienta?

En muchas ocasiones, la respuesta sería, utiliza logparser! o… cargalo en una base de datos y luego ejecutas una query y sacas lo que necesites!!

¿y si no puedo?

Un administrador en una emergencia hay muchas veces que no tiene nada a mano en el host donde es necesario, y cualquier movimiento de un log de bastantes MB puede resultar bastante incomodo, sobre todo si hay lentitud en la red, reglas en los firewalls etc.

‘ExtractLines.vbs By Roberto Clemente Bustamante. Digilux Admins Team
dim objfile
dim objsource
dim objdestination
dim strline

CONST RDER =”ex040221.log” ‘NOMBRE FICHERO PARA LEER
CONST WTER =”resultados.txt” ‘NOMBRE FICHERO PARA ESCRIBIR
CONST SCODE =”SMTP” ‘CADENA DE TEXTO A EXTRAER

‘Option Compare Text

set objfile = createobject(“scripting.filesystemobject”)

set objsource = objfile.opentextfile(RDER,1)
set objdestination = objfile.opentextfile(WTER,2)

do until objsource.atendofstream

strline = trim (objsource.readline())

if (instr (1, strline , SCODE)) then

objdestination.writeline (strline)

end if

loop

set objsource = nothing
set objdestination = nothing
set objfile = nothing

Este es uno de mis scripts mas sencillos y útiles. Voy a explicaros los diferentes usos que yo personalmente le doy.

1.- Ejemplo de “Lector y escritor” :

Cuando estudias programación, el algoritmo del lector y el escritor te lo explican de forma teórica y se vé en algún ejemplo. Básicamente el script hace esto, lee de un origen, y escribe en un destino. Para reutilizar código, lo he utilizado cientos de veces. Un programador, además de programar, debe saber reciclar código, y este script lo he abierto centenares de veces como el típico ejemplo de lector y escritor

2.- Parser, extractor, reductor… :
Otro uso es, que como arriba están declaradas las constantes (fichero de entrada, fichero de salida y SCODE (Search code o código de busqueda) en menos de 2 minutos podemos preparar un script que hará el trabajo tedioso por nosotros. Por ejemplo, supongamos que hay un fichero con mas de 66000 lineas (mas que suficiente para “reventar” lo que te acepta el Excel y por lo tanto no poder utilizarlo) Pues bien, abrir el notepad con este archivo, según en qué servidor es tarea de alto riesgo, quiero decir, si estamos muy justitos, no podemos cargarlo en memoria si no queremos comprometer según qué máquina…

Pues bíen, ponemos el script, parametrizamos lo que queramos extraer, por ejemplo “error” o “warning” o la ip de ese host que sospechamos que puede no tener demasiadas buenas intenciones en el SCODE. El fichero de entrada de log y el nombre del fichero de salida. Comprobamos que al menos tengamos tanto espacio libre como ocupa el fichero original, ejecutamos, esperamos unos minutos y et voila! tenemos el fichero de resultados.

3.- Adaptalo a tus necesidades: Las posibilidades de adaptación de este script son fantásticas, por ejemplo, cambiando la condicional del strline y el orden de los bucles podemos reutilizarlo para extraer los comentarios de un fichero de configuración tipo main.cf (como los de postfix) que están repletos de comentarios y mas comentarios y no se sabe donde está la config y donde el comentario … :-)

4.- ¿Que mas quieres? : En realidad, el script es bastante de perogrullo, y simplemente hay que tener algo de originalidad en su uso, pero os garantizo de que mi biblioteca particular es uno de esos pilares que siempre sabes que tienes a mano para casi cualquier cosa!!

Nota:

Por cierto, hice un copiar y pegar directamente desde esta página porque no tenia mi biblioteca a mano, y si os falla, es por las comillas, simples y dobles, que cuando las pega en el notepad las cambia por otras…. Recordad modificarlo, todo en el script que aparece con dobles comillas son dobles comillas (de las de mayusculas + 2) y todas las comillas simples, son comillas simples (de las de la derecha del 0)

Categories: Windows, scripting Tags: , , ,

Como ejecutar un script VBS bajo otras credenciales con runas.

Una de las cosas que siempre eché en falta en VBS fué que cuando seleccionaba un script, si le pulsaba al botón derecho buscando “ejecutar como” o “run as”, al tratarse de un fichero VBS no lo mostraba. ¿Queria esto decir que no podia ejecutar el script bajo unas credenciales diferentes?.

El caso es que no, en realidad el problema es que un script no es un ejecutable. En el caso de VBScript, en realidad lo que ocurre cuando hacemos doble click sobre el mismo, al estar la extension .vbs asociada al interprete (cscript o wscript) se llama al ejecutable y al usuario nos hace “transparente” la operacion, ya sabeis, los chicos de MS procuran siempre hacertelo cómodo,  aún cuando lo que consiguen es añadir una capa más a entender si quieres estar al tanto de qué está ocurriendo…

Bueno, la respuesta es sencilla ahora, ¿como ejecutamos un script bajo otras credenciales? Si abrimos una consola de comandos, podemos usar una sentencia de este tipo:

runas /profile /user:DOMINIO\USUARIO “cscript.exe c:\scripts\test.vbs”

esto funcionará, pero… hay otro problema, ¿que ocurre si hay espacios en la ruta? es decir, en el caso anterior, funciona porque no hay espacios en c:\scripts\test.vbs, pero y si fuera c:\mis scripts\test.vbs ? La respuesta es que fallaria.

Ahora explicaré algo sobre los carácteres de escape… bajo comando, debes escapar las comillas con \” , de esta forma, no lo considera el final del entrecomillado, es decir, para que el espacio sea considerado, puedes poner:

runas /profile /user:DOMINIO\USUARIO “cscript.exe \”c:\mis scripts\test.vbs”\”

De esta forma, considera un bloque la ruta al script, y otro bloque el comando cscript y la ruta como argumento.

Ahora que ya está explicado, voy a aprovechar para explicar como saber el dominio del usuario que está ejecutando el script con vbs. Lo primero, voy a explicar que es el RootDSE. A partir de LDAP 3.0 , rootdse es la raiz del arbol de directorio en un servidor de directorio LDAP, es decir, rootdse no es parte de ningun espacio de nombres, solo hace referencia a la raiz. En un directorio activo, por tanto, coincide en la mayoria de los casos con el nombre del directorio. Por ejemplo, si yo tengo un dominio miempresa.local , su DN (Distinguished Name) sería dc=miempresa,dc=local . Pues bién, esto coincide con el defaultNamingContext (atributo de rootDSE).

Explicado esto, este script nos dará el dato que necesitamos:

Set objRootDSE = GetObject(“LDAP://RootDSE“)
strDNSDomain = objRootDSE.Get(“defaultNamingContext”)

strdnsdomain = replace(strdnsdomain,”DC=”,”")
strdnsdomain = replace(strdnsdomain,”,”,”.”)

msgbox strdnsdomain

Ya sabeis, cualquier duda que surja, dejarla en comentarios y lo vemos!

Saludos,

Nota:

Por cierto, hice un copiar y pegar directamente desde la página porque no tenia mi biblioteca a mano, y si os falla, es por las comillas, simples y dobles, que cuando las pega en el notepad las cambia por otras…. Recordad modificarlo, todo en el script que aparece con dobles comillas son dobles comillas (de las de mayusculas + 2) y todas las comillas simples, son comillas simples (de las de la derecha del 0)