viernes, 22 de marzo de 2013

Entradas de diario para tablas (y 4)

En la entrada anterior "Entradas de diario para tablas (3)" explicaba como analizar las cabeceras de las entradas de diario. Pero otra forma en que nos ayudan las entradas de diario es la de analizar las entradas de un trabajo en su conjunto, esto fácil de entender, pero más difícil de explicar por lo que intentare hacerlo con un ejemplo.

Podemos hacer una primer análisis usando DSPJRN por pantalla, pero puede ser complicado si hay muchas entradas, lo más recomendable seria someter el volcado de las entradas de diario generadas por el trabajo a fichero, esto se explicaba en la entrada "Entradas de diario para tablas (2)", y a continuación podemos bajar el fichero a una hoja de calculo; esto es relativamente sencillo usando el complemento de "Transfer Data from System i" incluido en el "IBM System i Access for Windows", acordaros de marcar la casilla "Convert CCSID 65535" de las "Properties" de la definición, aunque siempre suele dar un error en la columna 21 (JOJID), al contener caracteres no visualizables y que podemos ignorar. Adjunto una imagen de un archivo con entradas de diario bajadas a hoja de calculo:

viernes, 15 de marzo de 2013

Entradas de diario para tablas (3)

En la entrada anterior "Entradas de diario para tablas (2)" se explicaba como podemos obtener la información del journal, ahora me centrare en analizar la información de las entradas de diario.

Como he dicho las entradas de diario nos dan información de los cambios en las tablas registradas por el diario, DSPJRN nos muestra la lista de entrada por numero de secuencia y reflejan el orden estricto en que se han ejecutado las acciones en la base de datos.
Con la opción 5 "Display entire entry" visualizaremos el contenido de la entrada. La primera vez que entramos nos muestra los datos específicos para esa entrada "Entry specific data". Si el tipo de entrada fuera, por ejemplo, R-PT (Record added) nos mostrará el buffer del registro con los datos que ha insertado en la tabla, que se muestra en la cabecera de la pantalla:
Los campos numéricos se muestran como caracteres ilegibles, podemos pulsar "F11=Display hexadecimal format" para mostrar su valor en hexadecimal.

viernes, 8 de marzo de 2013

Entradas de diario para tablas (2)

En la entrada anterior "Entradas de diario para tablas (1)" explique como tener nuestros archivos registrados por diario, para poder analizar los cambios en los datos de los archivos.

Con nuestros archivos ya registrados por diario, podemos investigar en sus entradas usando el mandato DSPJRN.

Con DSPJRN podemos visualizar las entradas que se van grabando en los receptores de diario. Estas entradas reflejan cambios en los datos (o archivos), ciclos de commit, rollback, etc.
Hay varios parámetros importante en este mandato:
  • JRN: Es el diario del cual vamos a recuperar entradas. Es recordar que, si queremos ver los cambios en tablas que están en diferentes diarios, habremos de ejecutar un DSPJRN por cada diario implicado.
  • FILE: Podemos indicar si solo queremos ver las entradas para una, o más, tablas. Si lo dejamos en blanco saldrán todas.
  • RCVRNG: Si los dejamos en blanco solo recupera entrada del receptor de diario al cual esta conectado en ese momento. Si queremos buscar en un receptor concreto hemos de especificar el nombre del receptor. Si hemos de buscar un rango de fecha/hora hay que que especificar *CURCHAIN, es un error muy habitual olvidarse de este parámetro :(
  • FROMENTLRG y TOENTLRG: Aquí introduciremos el numero de secuencia  de la entrada de diario de inicio/fin, es muy raro usar este parámetro ya que habitualmente desconocemos (de entrada) este número.
  • FROMTIME y TOTIME: Aquí introduciremos la fecha/hora de inicio y fin del rango donde buscaremos, cuando más acotemos menos tardara la búsqueda. Hay que calcularlo bien ya que no podemos paginar más atrás  del inicio que pongamos y tendremos que volver a repetir la búsqueda.
  • JRNCDE y ENTTYP: Si buscamos algún tipo especifico, o código, de entrada de diario, los introducimos aquí, a la practica solo se suele usar en ENTTYP. Por defecto es *ALL, que ya nos va bien.
  • JOB: Introducirlo aquí si sabemos el nombre del trabajo, o mejor su JobID, del cual queremos ver las entradas de diario que ha generado su ejecución. De esta forma acotamos la búsqueda y podemos analizar el comportamiento de un trabajo en base a los cambios en la base de datos.
  • CCIDLRG: Si conocemos el numero de secuencia del ciclo de commit, podemos introducirlo. De esta forma solo se mostraran las entradas de diario que se han generado bajo ese ciclo de commit, esta opción es mu potente ya que si los programas utilizan la lógica con ciclos de commit es fácil, para un programador ver 
  • OUTPUT: Para visualizar la información por pantalla, a archivo de spool o  volcar las entradas a un archivo (ver al final de este articulo).

viernes, 1 de marzo de 2013

Entradas de diario para tablas (1)

Las entradas de diario, de los archivos registrados por diario, nos pueden ser de mucha utilidad para analizar los cambios de los archivos y/o de sus datos.

La primera condición es que la tabla este registrada por diario, esto ya lo explique en la entrada Arrancar registro por diario automáticamente.

Es importante arrancar el registro por diario de un archivo, mandato STRJRNPF, con los parámetros:

  • IMAGES(*BOTH): Que guarda la imagen anterior y posterior al cambio del registro (aunque ocupa más espacio en disco); podemos usar el valor *AFTER pero no veremos el valor que tenían los datos antes de grabarse en el registro, aunque ahorremos espacio en disco.
  • OMTJRNE(*OPNCLO): Que omite guardar en el diario una entrada cada vez que hacemos un open y/o close de una tabla, básicamente para ahorrar tiempo y espacio en disco.
El tener tablas registradas por diario tiene implicaciones en el sistema, como el incremento del tiempo de ejecución de los trabajos (debe insertar entradas en el receptor de diario) y del uso de disco (los receptores ocupan espacio); por lo que antes deberemos analizar previamente dicho impacto, y en como gestionaremos los receptores de diario.
Como ayuda podemos consultar el en IBM i Information Center y también estas dos entradas de mi blog:
Con nuestros archivos ya registrados por diario, podemos investigar en sus entradas usando el mandato DSPJRN.

Continua (2)...