Cómo saber cuáles son los triggers definidos en su sistema AS400
Obtenga información sobre todos los programas triggers definidos en el sistema y a qué tablas (archivos físicos de datos) de AS400 están asociados y aprenda distintas formas de lograrlo.
Uno de los tópicos relacionados con la gestión de base de datos en DB2 UDB en AS400, es la posibilidad de definir "triggers" (también lllamados desencadenantes o activadores).
Los triggers se definen sobre archivos físicos de datos (objetos *FILE PF-DTA) o tablas SQL, y en AS400 existen dos tipos posibles a definir: triggers "externos" (o también llamados "del sistema") y triggers SQL (ya desde la versión V5R1)
Un trigger Externo puede ser un programa definido por el usuario en cualquier lenguaje en AS400, incluyendo el lenguaje de Control CL/400, a diferencia de un trigger SQL que sólo especifica en el "cuerpo" del mismo, una o más sentencias SQL. Las acciones indicadas se ejecutan cuando ese trigger se "activa" o se "dispara".
Los triggers (SQL o externos) se activan antes o después de que ocurra una operación de Insert, Update o Delete sobre la TABLA donde el trigger está definido. El DB2 invoca al trigger que se “dispara” automáticamente realizando una acción determinada, sin tener en cuenta qué aplicación o qué interfase se utilizó para modificar esa tabla.
Descubriendo dónde están definidos los triggers en el sistema
Teniendo en cuenta que un trigger se activa automáticamente al realizar una acción determinada sobre la tabla donde está asociado, y que podría realizar acciones no deseadas en el sistema, es muy importante conocer cuáles son los triggers definidos en TODO el sistema, verificar sobre qué tablas están definidos y controlar de esta forma que no se estén realizando acciones inapropiadas dentro del sistema.
El sistema operativo provee algunos mecanismos que permiten obtener esta información:
Usando el comando PRTTRGPGM
El OS/400 incluye un comando que permite "rastrear" los triggers que están definidos en su sistema AS400.
El comando PRTTRGPGM (Imprimir programas desencadenantes) genera un archivo en spool (con nombre QPSECTRG) de todos los programas triggers (tanto Externos como SQL) para los archivos físicos de datos (tablas) existentes en una biblioteca determinada, y posibilita luego su ejecución periódica para obtener un informe de sólo los nuevos programas triggers que se generaron o de aquéllos que sufrieron algún cambio:
Si se ejecuta el comando especificado arriba, generará un archivo de spool con los programas triggers que estén asociados a todas las tablas que se encuentren en la biblioteca TEKDB2, solicitando que muestre el informe completo (parámetro CHGRPTONLY - Sólo informe de cambios = *NO).
Si se ejecuta posteriormente el comando pero sólo para generar un informe de cambios, contendrá los programas desencadenantes que aparecen ahora en la biblioteca especificada y que no estaban en ella cuando se ejecutó con anterioridad el mandato PRTTRGPGM para la biblioteca. Si el mandato PRTTRGPGM no se ejecutó con anterioridad para la biblioteca, no habrá 'Informe de cambios".
Para obtener un informe completo de TODOS los triggers dentro del sistema, ejecutar el comando PRTTRGPGM LIB(*ALL).
Es importante tener en cuenta que para ejecutar el comando PRTTRGPGM es necesario poseer las autorizaciones especiales *ALLOBJ o *AUDIT.
Existe un archivo con nombre QSECTRGOLD en la biblioteca QUSRSYS que contiene información de la última vez que se ejecutó el mandato PRTTRGPGM para una biblioteca. Dentro de este archivo existe un miembro con el mismo nombre que la biblioteca especificada, para cada biblioteca especificada con anterioridad en el mandato.
Además, el archivo del sistema QAFDTRG en la biblioteca QSYS cuyo nombre de formato es QWHFDTRG, es el archivo modelo para el archivo QSECTRGOLD.
Como alternativa a lo planteado anteriormente, para obtener una lista de todos los archivos físicos en el sistema que tienen triggers asociados, se puede utilizar el archivo del sistema QAFDTRG en el comando CPYF:
Por ejemplo, ejecutando el comando::
CPYF FROMFILE(QADBXTRIGB) TOFILE(TEKPRU/ARCHTRIGG) CRTFILE(*YES)
Luego, identificando los campos que contiene el nombre del trigger y la tabla a la cual está asociado, con QUERY/400 se puede crear una consulta seleccionando los campos de interés y obtener una salida de lectura más fácil para la identificación de los programas triggers.
La tabla SYSTRIGGER
Existen algunas tablas del catálogo del sistema que registran y almacenan información relacionada con triggers. Las tablas comienzan con SYS y se encuentran en la biblioteca QSYS2. Particularmente, la tabla SYSTRIGGER contiene una fila por cada trigger que exista en una biblioteca y registra información de triggers externos como SQL.
Teniendo ésto en cuenta y como otra propuesta alternativa a las ya planteadas para obtener información sobre triggers, puede realizarse una consulta SQL sobre la tabla SYSTRIGGER de la siguiente forma:
- Por ejemplo, si se desea obtener todos los nombres de programas triggers en la biblioteca TEKDB2:
SELECT DISTINCT TRIGGER_PROGRAM_NAME FROM QSYS2/SYSTRIGGER
WHERE TRIGGER_PROGRAM_LIBRARY = 'TEKDB2'
- Para encontrar todos los programas triggers y además las tablas en donde están definidos, en la biblioteca TEKPRUTRG:
SELECT DISTINCT TRIGGER_PROGRAM_NAME, TRIGGER_PROGRAM_LIBRARY FROM QSYS2/SYSTRIGGER
WHERE EVENT_OBJECT_SCHEMA = 'TEKPRUTRG'
Visualizando triggers con DSPFD
Además de las opciones de ejecución vistas anteriormente, también es posible visualizar información de triggers ejecutando el comando DSPFD (Display File Description) sobre un archivo físico de datos determinado, y conocer si posee programas triggers asociados al mismo:
En el comando DSPFD es encesario especificar en el parámetro TYPE el valor *TRG o *ALL para obtener la información solicitada.
Ejemplo:
DSPFD FILE(TEKDBM8/ARTICULOS) TYPE(*TRG)
Desde iSeries Navigator: visualizando triggers en una tabla determinada
Mediante el iSeries Navigator, es posible visualizar de manera fácil los triggers definidos sobre una tabla determinada. Para ello: Abrir iSeries Navigator → Mis conexiones → Conexión a su Sistema AS400 → Base de Datos → Esquema y sobre el esquema seleccionado (biblioteca) elegir Desencadenantes. Se observará la información de los triggers asociados a esa tabla, como muestra la siguiente imagen:
Para tener en cuenta ...
- Es posible además, definir triggers sobre vistas SQL. Es recomendable la lectura del tip "Triggers Instead of - Triggers sobre vistas" publicado también en Teknodatips.
- Considerar que una tabla puede tener asociados 300 triggers.
|
- Especialista AS400 - Supervisor editorial Teknodatips |
Copyright 2012 - Teknoda S.A.
IMPORTANTE: “Notas técnicas de AS/400 - IBM i" se envía con frecuencia variable y sin cargo como servicio a nuestros clientes IBM i - AS/400. Contiene notas/tutoriales/artículos técnicos desarrollados en forma totalmente objetiva e independiente. NS iTech - Teknoda es una organización de servicios de tecnología informática y NO comercializa hardware, software ni otros productos. |