jueves, 15 de octubre de 2009

Cambios en variable de sistema QLMTDEVSSN (V6R1)

La nueva versión del i5/OS V6R1, incluye un muy esperado nuevo valor para la variable del sistema QLMTDEVSSN (Limit device session).

Hasta la versión V5R4 podíamos tener los siguientes valores:
0=Do not limit = El usuario puede abrir tantas sesiones interactivas como quiera.
1=Limit = El usuario solo puede abrir una sesion interactiva.

Con la V6R1 se modifican los valores de esta variable como sigue:
0=Do not limit = El usuario puede abrir tantas sesiones interactivas como quiera.
1-9=Maximum device sessions = Este valor nos indica cuantas sesiones podrá abrir como máximo un usuario 1,2,.. y hasta 9 sesiones interactivas concurrentes.

Para ver que valor tiene el sistema: 
DSPSYSVAL SYSVAL(QLMTDEVSSN)

Por defecto es preferible, sobretodo en los sistemas de Producción, que este valor de sistema este a 1, así todos los usuarios, que en el parámetro LMTDEVSSN de su perfil de usuario tengan el valor *SYSVAL, solo podrán abrir una sesión interactiva por defecto. A los Operadores y/o Administradores podemos darles más sesiones cambiando este valor en su perfil de usuario.

Pero puede ser interesante tener el valor de sistema a 2 o 3 en los sistemas de Desarrollo, para que al crear un nuevo programador, y sin tener que cambiar su perfil de usuario, ya pueda tener más de una sesión interactiva, cosa muy solicitada y recomendable para poder realizar pruebas, del código que están creando y probando, mas cómodamente.

lunes, 21 de septiembre de 2009

Auditar uso de comandos

Hay ciertos mandatos que nos puede interesar que los usuarios no utilicen, pero en cambio hemos de permitir el uso de otros.
Al crear un usuario y definir que clase de usuario es (USRCLS), de alguna forma ya estamos limitando que mandatos podrá usar y cuales no. Con las autorizaciones especiales (SPCAUT) del perfil de usuario, podemos limitar aun más el acceso a los mandados críticos.
Pero ademas podemos auditar la utilización de un mandato, sin limitar su uso, por ejemplo el mandato CLRPFM.

¿Como podemos hacerlo? Simplemente cambiando el valor de auditoria del objeto QSYS/CLRPFM de tipo *CMD.

Para ver el valor actual de auditoria de un objeto, hemos de utilizar el mandato:

DSPOBJD OBJ(QSYS/CLRPFM) OBJTYPE(*CMD) DETAIL(*FULL)

Pulsando una vez la AvPág, podremos observar que tiene el valor "Object auditing value" igual a *NONE. Para cambiarlo y empezar a auditar su uso, ejecutaremos el mandato:

CHGOBJAUD OBJ(QSYS/CLRPFM) OBJTYPE(*CMD) OBJAUD(*ALL)

Esto hará que cada vez que se utilice el mandato CLRPFM, se grabara una entrada en el diario de auditoria del sistema (QSYS/QAUDJRN).

Posteriormente podemos obtener un listado del uso del mandato ejecutando:

CPYAUDJRNE ENTTYP(CD) OUTFILE(MYLIB/CMD_USE)

Esto volcara las entradas de uso de cualquier objeto, que se este auditando, a un fichero. Después con SQL podremos seleccionarlas:

SELECT CDTSTP, CDJOB, CDUSER, CDNBR, CDPGMLIB, CDPGM, CDCMDS FROM
MYLIB/CMD_USECD WHERE CDCMDS LIKE '%CLRPFM%'

Nota: El mandato CPYAUDJRNE añade los caracteres CD al nombre del fichero de salida.

Ahora ya podemos ver cuando, quien y desde que programa se ha utilizado el mandato CLRPFM. Si el programa es el QCMD, nos indicara que se ha ejecutado desde la linea de mandatos.

Este tipo de auditoria nos puede también servir para investigar algún problema en nuestros programas o aplicaciones, ver quien usa ciertos objetos, o simplemente llevar un registro del uso de ciertos objetos importantes.

CHGOBJAUD OBJ(MYLIB/MYOBJECT) OBJTYPE(*CMD) OBJAUD(*ALL)

Hay que tener en cuenta que estas entradas del diario de auditoria ocupan espacio en disco y habrá que tener un procedimiento de salvado y borrado de los receptores de diario para evitar comernos el espacio en disco si auditamos demasiados objetos.
También el rendimiento del sistema puede verse afectado, ligeramente, si auditamos muchos objetos muy usados.

Una vez analizado sería conveniente desactivar la auditoria de uso, a no ser que queramos llevar un registro.

CHGOBJAUD OBJ(MYLIB/MYOBJECT) OBJTYPE(*CMD) OBJAUD(*CHANGE)

Podemos usar el valor *CHANGE que habitualmente es el valor por omisión del valor de sistema QCRTOBJAUD, o *NONE para no auditar nada en absoluto ese objecto (solo es recomendable en unos pocos casos).

Mas información:

sábado, 5 de septiembre de 2009

Conexion automatica al AS400

¿Como realizar una conexión automática desde un servidor Windows, o un cliente de red, al AS400?

A veces necesitamos para lanzar un cmd, o bat, en un pc en que la conexión al AS400 ya este establecida; para hacerlo automáticamente debemos tener instalado el producto iSeries Access y entonces podremos utilizar el comando c:\Program Files\ibm\Client Access\cwblogon.exe.

Básicamente se trata de cargar en un buffer de windows el usuario y la contraseña que utilizamos para conectar a el AS400 y así cuando los requiera la conexión windows la suministrara sin ninguna intervención.
Sintaxis
Para iniciar la sesión en un servidor:
CWBLOGON sistema /u ID_usuario /p contraseña

Para borrar un ID de usuario específico:
CWBLOGON sistema /u ID_usuario /c

Para borrar todos los ID de usuario de un servidor:
CWBLOGON sistema /c

Para borrar todos los ID de usuario de la antememoria:
CWBLOGON /c

Parámetros
sistema designa el nombre del servidor para el que debe almacenarse la información de ID de usuario y contraseña
/u ID_usuario designa el ID de usuario del servidor que debe almacenarse en la antememoria de iSeries Access para Windows
/p contraseña designa la contraseña del servidor asociada al ID de usuario proporcionado
/c borra la información de ID de usuario y contraseña de la antememoria de iSeries Access para Windows

Para más información:
http://www.redbooks.ibm.com/pubs/html/as400/v4r5/ic2924/info/rzaiimst.pdf

sábado, 15 de agosto de 2009

Como saber si el AS400 necesita mas RAM

¿Como podemos saber cuando un sistema AS400 necesita mas memoria RAM?

Nota: En AS400 no se denomina Memoria RAM sino Memoria Principal (Main storage), y el disco Memoria Auxiliar (Auxiliary storage) que puede estar dividido en ASP (Auxiliary storage pool) a modo similar del concepto de volúmenes.

El concepto de uso de la memoria, y la CPU, en el AS400 es muy diferente a la de los sistemas Windows y esa es la base de muchos errores de concepto, cuando provienen de personas que no tienen mucha idea de como funciona un AS400 y, además llegando a conclusiones totalmente equivocadas.

Con el mandato DSPSYSSTS puedes ver la cantidad de memoria (pool size) que esta "usando" el sistema, en los diferentes pool de memoria definidos en el sistema (ver Memoria para subsistema), pulsa F21=Select assistance level y selecciona 3=Advanced para acceder a toda la información en la misma pantalla.
El i5/OS, el nuevo nombre del sistema operativo del AS400, siempre consume siempre TODA la memoria disponible.

Normalmente yo me fijo, básicamente, en cuantas paginas en estado Inelegible (Wait-Inel, Act-Inel) aparecen en el DSPSYSSTS.

¿Que nos indica este parámetro Inel? pues básicamente que cuando el s.o. ha necesitado cargar una pagina de memoria de disco a memoria RAM (ya que estaba paginada), no ha podido, porque toda la memoria RAM estaba ocupada por trabajos que están activos y usando la CPU, esto explicado de manera simple y para que se entienda, ya que intervienen otros factores, como por ejemplo el TIMESLICE y el PURGE.

Además habría que analizar las causas de la paginación, ya que podría tener una "fácil" solución que no implique comprar mas RAM, sino solamente algo de "tunning" del tamaño de los pool de memoria y/o en el numero de hebras (threads) activos en cada momento.

Puedes leerte las siguientes entradas de mi blog www.as400howto.com, para ver si te aclaro un poco más el tema:

También tienes un link a un documento de IBM que puede servirte de ayuda:

sábado, 1 de agosto de 2009

Recuperar configuracion dispositivos

¿Como recuperar la configuración de dispositivos, controladores y lineas configuradas en nuestro AS400?. Para ello ejecutar el siguiente mandato:

RTVCFGSRC CFGD(*ALL) CFGTYPE(*ALL) SRCFILE(QGPL/QCLSRC) SRCMBR(SYSTEM_CFG)

Podemos utilizar la información recuperada como backup histórico o para, incluso, duplicar la configuración en otros AS400.

Un ejemplo de como buscar dos impresoras con la misma dirección IP:
  1. RTVCFGSRC CFGD(PRT*) CFGTYPE(*DEVD) SRCFILE(QGPL/QCLSRC) SRCMBR(PRINTERS)
  2. Esto crea el miembro fuente QGPL/QCLSRC.PRINTERS.
  3. Doy por supuesto que todas las impresoras se denominan PRT*, sino habrás de hacerlo por cada una, o por grupos, en ese caso acuérdate de utilizar la opción MBROPT(*ADD) para que no sobrescriba el miembro.
  4. Después editar el fuente:
  5. STRSEU SRCFILE(QGPL/QCLSRC) SRCMBR(PRINTERS)
  6. Utilizar la opción de búsqueda de string del SEU, para encontrar la dirección IP
  7. Utilizar la tecla F14 (o el comando F) + Direccion_IP y pulsar F16 para buscarla.
  8. Si aparece mas de una vez es que esta duplicada.