{"id":4008,"date":"2024-01-02T18:30:00","date_gmt":"2024-01-02T17:30:00","guid":{"rendered":"https:\/\/www.skillup.cloud\/?p=4008"},"modified":"2024-02-11T16:21:28","modified_gmt":"2024-02-11T15:21:28","slug":"table-function-display_journal-swiss-army-knife-strumento-versatile-per-molte-situazioni","status":"publish","type":"post","link":"https:\/\/www.skillup.cloud\/it\/table-function-display_journal-swiss-army-knife-strumento-versatile-per-molte-situazioni\/","title":{"rendered":"Table Function DISPLAY_JOURNAL &#8211; Swiss Army Knife (strumento versatile per molte situazioni)"},"content":{"rendered":"\n<h2 class=\"wp-block-heading has-medium-font-size\">Table Functions: DISPLAY_JOURNAL &#8211; un vero Swiss Army Knife<\/h2>\n\n\n\n<p>Le funzioni di tabella di IBM iSeries sono come coltellini svizzeri per i dati. Possono essere utilizzate per una variet\u00e0 di attivit\u00e0, come la manipolazione dei dati, l&#8217;interrogazione dei dati e la creazione di report. Sono particolarmente utili per eseguire operazioni complesse che sarebbero altrimenti difficili o impossibili da eseguire con SQL standard.<\/p>\n\n\n\n<p>La funzione di tabella SQL <strong>DISPLAY_JOURNAL<\/strong> su IBM iSeries, in particolare, \u00e8 uno strumento potente per l&#8217;analisi e la gestione di transazioni e eventi di sistema.<\/p>\n\n\n\n<p>Essa permette agli utenti di visualizzare e interrogare i dati registrati nei journal di sistema, che sono log dettagliati di tutte le operazioni eseguite.<\/p>\n\n\n\n<p>Questa funzione \u00e8 particolarmente utile in ambienti complessi e multiutente, dove \u00e8 fondamentale tracciare le modifiche ai dati e monitorare l&#8217;attivit\u00e0 del sistema.<\/p>\n\n\n\n<p>vedi anche:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"text-decoration: underline\"> <a href=\"https:\/\/www.skillup.cloud\/table-function-in-ibm-iseries-come-ti-incapsulo-il-sistema-rendendolo-facilmente-accessibile-con-sql\/\" target=\"_blank\" rel=\"noreferrer noopener\">Table Function in IBM iSeries: come ti incapsulo il sistema rendendolo facilmente accessibile con SQL<\/a> <\/span><\/li>\n\n\n\n<li><span style=\"text-decoration: underline\"> <a href=\"https:\/\/www.skillup.cloud\/le-tabelle-definite-dallutente-udtf-in-ibm-iseries-un-approccio-innovativo-per-la-gestione-dei-dati\/\" target=\"_blank\" rel=\"noreferrer noopener\">Le Tabelle Definite dall&#8217;Utente (UDTF) in IBM iSeries: Un Approccio Innovativo per la Gestione dei Dati<\/a> <\/span><\/li>\n\n\n\n<li><span style=\"text-decoration: underline\"> <a href=\"https:\/\/www.skillup.cloud\/table-function-su-iseries-esempi-di-come-incapsulare-le-logiche-di-business\/\" target=\"_blank\" rel=\"noreferrer noopener\">Table Function su iSeries &#8211; esempi di come incapsulare le logiche di business<\/a> <\/span><\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Esempi reali e significativi <strong>dove <\/strong>DISPLAY_JOURNAL  pu\u00f2 essere di grande aiuto<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Auditing e Compliance<\/strong>: In ambienti regolamentati, dove \u00e8 necessario mantenere un registro dettagliato delle attivit\u00e0 per conformit\u00e0 normativa, <strong>DISPLAY_JOURNAL<\/strong> pu\u00f2 essere utilizzato per raccogliere informazioni su chi ha eseguito quali operazioni e quando. Questo \u00e8 fondamentale per l&#8217;audit interno o esterno, la revisione dei controlli interni, e per soddisfare i requisiti normativi.<br><\/li>\n\n\n\n<li><strong>Analisi di Sicurezza<\/strong>: Per identificare potenziali violazioni della sicurezza o attivit\u00e0 sospette, come l&#8217;accesso non autorizzato a dati sensibili o la modifica di record critici. <strong>DISPLAY_JOURNAL<\/strong> pu\u00f2 aiutare a rintracciare l&#8217;origine di tali attivit\u00e0, fornendo dettagli sugli utenti coinvolti, l&#8217;orario delle operazioni e la natura delle modifiche.<br><\/li>\n\n\n\n<li><strong>Risoluzione dei Problemi e Debugging<\/strong>: In caso di errori o problemi nei dati, <strong>DISPLAY_JOURNAL<\/strong> permette di tracciare indietro le operazioni fino a trovare la causa dell&#8217;errore. Ad esempio, se un record \u00e8 stato erroneamente modificato o eliminato, puoi utilizzare il journal per capire cosa \u00e8 successo e chi \u00e8 stato coinvolto.<br><\/li>\n\n\n\n<li><strong>Analisi del Carico di Lavoro e Ottimizzazione delle Prestazioni<\/strong>: Analizzando le transazioni e le operazioni registrate, \u00e8 possibile ottenere informazioni sul carico di lavoro sul sistema. Questo pu\u00f2 aiutare a identificare i colli di bottiglia, i periodi di picco di attivit\u00e0 e le aree che potrebbero beneficiare di ottimizzazione o aggiornamento delle risorse.<br><\/li>\n\n\n\n<li><strong>Ripristino di Dati<\/strong>: In situazioni dove i dati sono stati accidentalmente modificati o eliminati, <strong>DISPLAY_JOURNAL<\/strong> pu\u00f2 fornire informazioni essenziali per il ripristino. Ad esempio, se un record \u00e8 stato cancellato, \u00e8 possibile utilizzare i dati del journal per ricostruirlo.<br><\/li>\n\n\n\n<li><strong>Monitoraggio delle Modifiche in Tempo Reale<\/strong>: In un ambiente multiutente, dove le modifiche ai dati avvengono frequentemente, <strong>DISPLAY_JOURNAL<\/strong> pu\u00f2 essere utilizzato per monitorare le modifiche in tempo reale o quasi reale, permettendo una risposta rapida a eventuali problemi o modifiche non autorizzate.<br><\/li>\n\n\n\n<li><strong>Statistiche e Analisi delle Tendenze<\/strong>: Analizzando i dati del journal su periodi pi\u00f9 lunghi, \u00e8 possibile identificare tendenze e pattern nel comportamento degli utenti o nell&#8217;uso del sistema. Questo pu\u00f2 essere utile per la pianificazione delle risorse, per migliorare l&#8217;usabilit\u00e0 del sistema o per guidare decisioni di business.<\/li>\n<\/ol>\n\n\n\n<p>In ognuno di questi scenari, l&#8217;abilit\u00e0 di <strong>DISPLAY_JOURNAL<\/strong> di fornire una visione dettagliata e cronologica delle operazioni di sistema \u00e8 di inestimabile valore.<\/p>\n\n\n\n<p>Tuttavia, \u00e8 importante notare che l&#8217;analisi del journal richiede una comprensione tecnica adeguata e, in alcuni casi, pu\u00f2 richiedere l&#8217;elaborazione e l&#8217;interpretazione di grandi quantit\u00e0 di dati.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Descrizione tecnica della Table Function DISPLAY_JOURNAL<\/strong><\/p>\n\n\n\n<p><strong>Nota: questa \u00e8 una descrizione generica e i parametri e le colonne effettive possono variare in base alla configurazione del sistema e alla versione del software.<\/strong><\/p>\n\n\n\n<p><strong>Inoltre, il livello di dettaglio delle informazioni disponibili pu\u00f2 dipendere dalle impostazioni di journaling del sistema e dalle autorizzazioni dell&#8217;utente che esegue la query.<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Parametri<\/strong><\/p>\n\n\n\n<p>La funzione DISPLAY_JOURNAL() ha due parametri obbligatori e un parametro opzionale:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>LIBRARY &#8211; Il nome della libreria che contiene il journal.<br><\/li>\n\n\n\n<li>JOURNAL &#8211; Il nome del journal.<br><\/li>\n\n\n\n<li>OPTIONS &#8211; Un&#8217;opzione che indica quali colonne del journal devono essere restituite.<br><\/li>\n<\/ul>\n\n\n\n<p>I valori possibili per l&#8217;opzione OPTIONS sono i seguenti:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>&#8216;ALL&#8217; &#8211; Restituisce tutte le colonne del journal.<br><\/li>\n\n\n\n<li>&#8216;RCD&#8217; &#8211; Restituisce solo le colonne JOURNAL_DATE, JOURNAL_TIME, JOURNAL_TYPE, JOURNAL_OBJECT, JOURNAL_USER e JOURNAL_PROGRAM.<br><\/li>\n\n\n\n<li>&#8216;TIMESTAMP&#8217; &#8211; Restituisce tutte le colonne del journal, inclusa la colonna JOURNAL_TIMESTAMP.<\/li>\n<\/ul>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Informazioni restituite<\/strong><\/p>\n\n\n\n<p>DISPLAY_JOURNAL, nella sua forma di funzione di tabella su IBM iSeries, permette di interrogare i dati di un journal in un formato tabellare.<\/p>\n\n\n\n<p>Quando viene eseguito:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>SELECT * FROM TABLE(DISPLAY_JOURNAL('MYLIB', 'MYJRN', 'ALL')) AS JOURNAL_DATA<\/strong><\/pre>\n\n\n\n<p>si sta richiedendo tutte le colonne disponibili per gli eventi registrati nel journal specificato.<\/p>\n\n\n\n<p>Di seguito le colonne tipiche che potrebbero presentarsi in risposta a tale query:<\/p>\n\n\n\n<p><strong>Ricordare che le colonne effettive possono variare in base alla configurazione del sistema e alla versione del software e pu\u00f2 dipendere dalle impostazioni di journaling del sistema e dalle autorizzazioni dell&#8217;utente che esegue la query.<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"1\">\n<li><strong>ENTRY_TIMESTAMP<\/strong>: Data e ora dell&#8217;evento registrato.<\/li>\n\n\n\n<li><strong>SEQUENCE_NUMBER<\/strong>: Numero sequenziale univoco per ogni voce nel journal.<\/li>\n\n\n\n<li><strong>JOURNAL_CODE<\/strong>: Codice che identifica la categoria di journaling (es. trasferimento dati, modifiche ai file).<\/li>\n\n\n\n<li><strong>JOURNAL_CODE<\/strong>: Codice che identifica la categoria di journaling (es. trasferimento dati, modifiche ai file). I valori comuni includono:<br>\u2022 R: per le operazioni relative ai file record.<br>\u2022 C: per i cambiamenti di configurazione.<br>\u2022 J: per le transazioni di journaling.<\/li>\n\n\n\n<li><strong>JOURNAL_ENTRY_TYPE<\/strong>: Tipo specifico di voce del journal (es. aggiunta, cancellazione, modifica).<strong>((*) vedi dettagli successivi)<\/strong><\/li>\n\n\n\n<li><strong>COUNT_OR_RRN<\/strong>: Numero di record relativi all&#8217;evento o relative record number.<\/li>\n\n\n\n<li><strong>ENTRY_DATA<\/strong>: Dati effettivi associati all&#8217;evento del journal <strong>((**) vedi dettagli successivi).<\/strong><\/li>\n\n\n\n<li><strong>NULL_VALUE_INDICATORS<\/strong>: Indicatori per valori nulli nei dati dell&#8217;evento.<\/li>\n\n\n\n<li><strong>&#8220;OBJECT&#8221;<\/strong>: Nome dell&#8217;oggetto associato all&#8217;evento (es. file, programma).<\/li>\n\n\n\n<li><strong>OBJECT_TYPE<\/strong>: Tipo dell&#8217;oggetto (es. file, coda di messaggi).<\/li>\n\n\n\n<li><strong>OBJECT_TYPE_INDICATOR<\/strong>: Indicatore del tipo di oggetto.<\/li>\n\n\n\n<li><strong>FILE_TYPE_INDICATOR<\/strong>: Indicatore specifico per il tipo di file.<\/li>\n\n\n\n<li><strong>JOURNAL_IDENTIFIER<\/strong>: Identificativo univoco del journal.<\/li>\n\n\n\n<li><strong>CURRENT_USER<\/strong>: Utente attualmente connesso o responsabile dell&#8217;evento.<\/li>\n\n\n\n<li><strong>JOB_NAME<\/strong>: Nome del lavoro che ha generato l&#8217;evento.<\/li>\n\n\n\n<li><strong>JOB_USER<\/strong>: Utente associato al lavoro.<\/li>\n\n\n\n<li><strong>JOB_NUMBER<\/strong>: Numero identificativo del lavoro.<\/li>\n\n\n\n<li><strong>THREAD<\/strong>: Identificativo del thread relativo all&#8217;evento.<\/li>\n\n\n\n<li><strong>PROGRAM_NAME<\/strong>: Nome del programma associato all&#8217;evento.<\/li>\n\n\n\n<li><strong>PROGRAM_LIBRARY<\/strong>: Libreria in cui risiede il programma.<\/li>\n\n\n\n<li><strong>PROGRAM_LIBRARY_ASP_DEVICE<\/strong>: Dispositivo ASP della libreria del programma.<\/li>\n\n\n\n<li><strong>PROGRAM_LIBRARY_ASP_NUMBER<\/strong>: Numero ASP della libreria del programma.<\/li>\n\n\n\n<li><strong>COMMIT_CYCLE<\/strong>: Identifica il ciclo di commit durante il quale si \u00e8 verificato l&#8217;evento.<\/li>\n\n\n\n<li><strong>NESTED_COMMIT_LEVEL<\/strong>: Livello di commit annidato per la transazione.<\/li>\n\n\n\n<li><strong>XID<\/strong>: Transaction ID per transazioni distribuite.<\/li>\n\n\n\n<li><strong>LUW<\/strong>: Unit\u00e0 di lavoro logica (Logical Unit of Work).<\/li>\n\n\n\n<li><strong>REMOTE_PORT<\/strong>: Porta remota associata all&#8217;evento.<\/li>\n\n\n\n<li><strong>REMOTE_ADDRESS<\/strong>: Indirizzo remoto associato all&#8217;evento.<\/li>\n\n\n\n<li><strong>SYSTEM_NAME<\/strong>: Nome del sistema su cui si \u00e8 verificato l&#8217;evento.<\/li>\n\n\n\n<li><strong>SYSTEM_SEQUENCE_NUMBER<\/strong>: Numero di sequenza a livello di sistema.<\/li>\n\n\n\n<li><strong>REFERENTIAL_CONSTRAINT<\/strong>: Indica se l&#8217;evento \u00e8 associato a un vincolo referenziale.<\/li>\n\n\n\n<li><strong>&#8220;TRIGGER&#8221;<\/strong>: Indica se l&#8217;evento \u00e8 stato attivato da un trigger.<\/li>\n\n\n\n<li><strong>IGNORE_ON_APPLY<\/strong>: Indica se l&#8217;evento deve essere ignorato durante l&#8217;applicazione.<\/li>\n\n\n\n<li><strong>MINIMIZED_ENTRY_DATA<\/strong>: Dati dell&#8217;evento in forma minimizzata.<\/li>\n\n\n\n<li><strong>MINIMIZED_ON_FIELD_BOUNDARY<\/strong>: Indica se la minimizzazione dei dati avviene sui limiti del campo.<\/li>\n\n\n\n<li><strong>INDICATOR_FLAG<\/strong>: Bandiera indicatrice per varie condizioni.<\/li>\n\n\n\n<li><strong>RECEIVER_NAME<\/strong>: Nome del ricevitore del journal.<\/li>\n\n\n\n<li><strong>RECEIVER_LIBRARY<\/strong>: Libreria del ricevitore del journal.<\/li>\n\n\n\n<li><strong>RECEIVER_ASP_DEVICE<\/strong>: Dispositivo ASP del ricevitore.<\/li>\n\n\n\n<li><strong>RECEIVER_ASP_NUMBER<\/strong>: Numero ASP del ricevitore.<\/li>\n\n\n\n<li><strong>ARM_NUMBER<\/strong>: Numero ARM (Auxiliary Storage Pool Mirror).<\/li>\n\n\n\n<li><strong>OBJECT_ASP_DEVICE<\/strong>: Dispositivo ASP dell&#8217;oggetto.<\/li>\n\n\n\n<li><strong>OBJECT_ASP_NUMBER<\/strong>: Numero ASP dell&#8217;oggetto.<\/li>\n\n\n\n<li><strong>PARENT_FILE_ID<\/strong>: Identificativo del file padre.<\/li>\n\n\n\n<li><strong>OBJECT_FILE_ID<\/strong>: Identificativo del file oggetto.<\/li>\n\n\n\n<li><strong>RELATIVE_DIRECTORY_FILE_ID<\/strong>: ID del file nella directory relativa.<\/li>\n\n\n\n<li><strong>OBJECT_FILE_NAME<\/strong>: Nome del file oggetto.<\/li>\n\n\n\n<li><strong>PATH_NAME<\/strong>: Percorso dell&#8217;oggetto nel file system.<\/li>\n\n\n\n<li><strong>DLO_NAME<\/strong>: Nome del Document Library Object.<\/li>\n\n\n\n<li><strong>FOLDER_PATH<\/strong>: Percorso della cartella.<\/li>\n\n\n\n<li><strong>SYSLOG_EVENT<\/strong>: Evento syslog associato.<\/li>\n\n\n\n<li><strong>SYSLOG_FACILITY<\/strong>: Facility syslog associata.<\/li>\n\n\n\n<li><strong>SYSLOG_SEVERITY<\/strong>: Gravit\u00e0 dell&#8217;evento syslog.<\/li>\n\n\n\n<li><strong>SYSLOG_PRIORITY<\/strong>: Priorit\u00e0 dell&#8217;evento syslog<\/li>\n<\/ol>\n\n\n\n<p><strong>(*) Pi\u00f9 in&nbsp; profondit\u00e0: dettagli informazione JOURNAL_ENTRY_TYPE<\/strong><\/p>\n\n\n\n<p>La colonna <strong>JOURNAL_ENTRY_TYPE<\/strong> contiene la codifica delle tipologie di eventi che possono essere registrati in un journal su un sistema IBM iSeries. Tuttavia, l&#8217;interpretazione specifica pu\u00f2 variare a seconda della configurazione del sistema e dell&#8217;uso specifico dei journal.<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"1\">\n<li><strong>BC:<\/strong> Backup Change &#8211; Questo tipo di voce di journal viene utilizzato durante le operazioni di backup per registrare le modifiche ai dati che si verificano mentre il backup \u00e8 in corso. L&#8217;obiettivo \u00e8 garantire l&#8217;integrit\u00e0 dei dati durante il processo di backup, consentendo di tenere traccia delle modifiche che avvengono durante l&#8217;operazione di backup.<\/li>\n\n\n\n<li><strong>CB<\/strong>: Change Before &#8211; Indica un cambiamento nei dati prima che l&#8217;operazione venga eseguita. Utilizzato nelle operazioni di aggiornamento per registrare lo stato dei dati prima della modifica.<\/li>\n\n\n\n<li><strong>CG<\/strong>: Change After for Group Commit &#8211; Registrare le modifiche ai dati dopo un commit di gruppo.<\/li>\n\n\n\n<li><strong>CH<\/strong>: Change After &#8211; Registra le modifiche effettuate ai dati dopo l&#8217;operazione.<\/li>\n\n\n\n<li><strong>CM<\/strong>: Commit Cycle Marker &#8211; Indica il punto in cui un ciclo di commit \u00e8 stato completato.<\/li>\n\n\n\n<li><strong>CR<\/strong>: Create Object &#8211; Registra la creazione di un nuovo oggetto.<\/li>\n\n\n\n<li><strong>DL<\/strong>: Delete &#8211; Questo tipo di voce indica la cancellazione di un oggetto, come un file o un record, dal sistema. \u00c8 utilizzato per tracciare le operazioni di eliminazione, consentendo di avere una cronistoria delle azioni di cancellazione eseguite su determinati oggetti nel sistema.<\/li>\n\n\n\n<li><strong>EC<\/strong>: Encoded Vector Index &#8211; Utilizzato per le operazioni sugli indici vettoriali codificati.<\/li>\n\n\n\n<li><strong>EF<\/strong>: End of File &#8211; Indica la fine di un file o un oggetto.<\/li>\n\n\n\n<li><strong>EJ<\/strong>: End Journal &#8211; Indica la fine del journaling per un oggetto o un file.<\/li>\n\n\n\n<li><strong>IT<\/strong>: Incomplete Transaction &#8211; Transazione incompleta, spesso usata per identificare transazioni che non sono state completate correttamente.<\/li>\n\n\n\n<li><strong>JF<\/strong>: Journal File &#8211; Riferito alla registrazione di un file.<\/li>\n\n\n\n<li><strong>JM<\/strong>: Journal Marker &#8211; Un segnaposto o un marcatore all&#8217;interno del flusso del journal.<\/li>\n\n\n\n<li><strong>PR<\/strong>: Prepare &#8211; Preparazione per una transazione, solitamente parte del processo di commit.<\/li>\n\n\n\n<li><strong>PT<\/strong>: Partial Transaction &#8211; Indica una transazione parziale, usata per transazioni che non sono state completate.<\/li>\n\n\n\n<li><strong>PX<\/strong>: Proxy &#8211; Rappresenta un&#8217;azione proxy, come un&#8217;operazione eseguita per conto di un&#8217;altra.<\/li>\n\n\n\n<li><strong>RD<\/strong>: Delete Record &#8211; Indica la cancellazione di un record.<\/li>\n\n\n\n<li><strong>SB<\/strong>: Start Before &#8211; Indica l&#8217;inizio di un&#8217;operazione prima che venga eseguita.<\/li>\n\n\n\n<li><strong>SC<\/strong>: Start Commit &#8211; Segna l&#8217;inizio di un ciclo di commit.<\/li>\n\n\n\n<li><strong>SQ<\/strong>: Sequence Number &#8211; Relativo alla gestione dei numeri di sequenza in un journal.<\/li>\n\n\n\n<li><strong>UB<\/strong>: Update Before &#8211; Registra lo stato di un oggetto o di un record prima di un aggiornamento.<\/li>\n\n\n\n<li><strong>UP<\/strong>: Update After &#8211; Registra lo stato di un oggetto o di un record dopo un aggiornamento.<\/li>\n\n\n\n<li><strong>XP<\/strong>: Exception &#8211; Indica una condizione eccezionale o un&#8217;operazione relativa a gestione delle eccezioni.<\/li>\n<\/ol>\n\n\n\n<p><strong>(**) Pi\u00f9 in&nbsp; profondit\u00e0: dettagli informazione ENTRY_DATA<\/strong><\/p>\n\n\n\n<p>La colonna <strong>ENTRY_DATA<\/strong> nella funzione <strong>DISPLAY_JOURNAL<\/strong> su IBM iSeries contiene informazioni specifiche sull&#8217;operazione registrata nel journal.<\/p>\n\n\n\n<p>Questi dati sono spesso unici per ogni tipo di evento e possono variare notevolmente a seconda del tipo di operazione eseguita (come inserimento, aggiornamento, eliminazione, ecc.) e del tipo di oggetto coinvolto (ad esempio, file, record, dati di configurazione).<\/p>\n\n\n\n<p>Alcuni esempi delle informazioni che potrebbero presentarsi nella colonna <strong>ENTRY_DATA<\/strong><\/p>\n\n\n\n<p>1. <strong>Inserimento Record<\/strong>: Quando un nuovo record viene inserito in un file di database, la colonna <strong>ENTRY_DATA<\/strong> potrebbe contenere i valori effettivi del record inserito. Ad esempio, se \u00e8 stato inserito un record in un file con campi per nome, et\u00e0 e indirizzo, la colonna <strong>ENTRY_DATA<\/strong> potrebbe contenere una stringa come <strong>&#8220;Mario, 30, Via Roma 123&#8221;<\/strong>.<\/p>\n\n\n\n<p>2. <strong>Aggiornamento Record<\/strong>: In caso di un&#8217;operazione di aggiornamento, la colonna <strong>ENTRY_DATA<\/strong> potrebbe contenere i valori sia prima che dopo la modifica. Ad esempio, se un campo &#8220;stato&#8221; viene modificato da &#8220;attivo&#8221; a &#8220;inattivo&#8221;, la colonna <strong>ENTRY_DATA<\/strong> potrebbe mostrare qualcosa come <strong>&#8220;attivo -&gt; inattivo&#8221;<\/strong>.<\/p>\n\n\n\n<p>3. <strong>Eliminazione Record<\/strong>: Per un&#8217;operazione di eliminazione, <strong>ENTRY_DATA<\/strong> potrebbe contenere i valori del record che \u00e8 stato eliminato, simile a un inserimento, ma in questo caso rappresenta il dato rimosso.<\/p>\n\n\n\n<p>4. <strong>Transazioni<\/strong>: In caso di eventi legati a transazioni, come un rollback, la colonna <strong>ENTRY_DATA<\/strong> potrebbe contenere informazioni sulle modifiche annullate dalla transazione.<\/p>\n\n\n\n<p>5. <strong>Dati Binari<\/strong>: Per alcuni tipi di oggetti o operazioni, la colonna <strong>ENTRY_DATA<\/strong> potrebbe contenere dati binari o in un formato non immediatamente leggibile, che rappresentano informazioni interne o specifiche del sistema.<\/p>\n\n\n\n<p>\u00c8 importante notare che il formato e il contenuto esatto della colonna <strong>ENTRY_DATA<\/strong> possono essere complessi e dipendono dal contesto specifico dell&#8217;operazione di journaling. Inoltre,<\/p>\n\n\n\n<p>interpretare correttamente questi dati richiede una buona comprensione della struttura dei dati del file o dell&#8217;oggetto a cui si fa riferimento e delle operazioni eseguite su di essi.<\/p>\n\n\n\n<p>In alcuni casi, potrebbe essere necessario utilizzare strumenti o programmi specifici per decodificare o interpretare i dati presenti in questa colonna.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Alcuni esempi di utilizzo<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Individuare quali sono gli archivi coinvolti in aggiornamenti complessi<\/strong><\/p>\n\n\n\n<p>Per indagare su quali sono gli archivi coinvolti negli aggiornamenti di procedure complesse, \u00e8 possibile utilizzare le informazioni del journal per identificare le tabelle che vengono modificate durante l&#8217;esecuzione della procedura.<\/p>\n\n\n\n<p>Ad esempio, se si vuole indagare sugli aggiornamenti eseguiti da un particolare programma &#8216;MYPGM&#8217; \u00e8 possibile utilizzare la seguente query:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">SELECT OBJECT, JOURNAL_ENTRY_TYPE, COUNT(*)\nFROM TABLE(DISPLAY_JOURNAL('MYLIB', 'MYJRN', 'ALL')) AS JOURNAL_DATA\nWHERE PROGRAM = 'MYPGM'\nAND ENTRY_TIMESTAMP BETWEEN '2024-01-05 00:00:00.000' and '2024-01-05 23:59:59.9999' \nGROUP BY OBJECT, JOURNAL_ENTRY_TYPE\nORDER BY 1, 2;<\/pre>\n\n\n\n<p>In questa query vengono conteggiati, per ogni archivio (OBJECT) quanti entry sono presenti nel Journal raggruppati per tipo operazione (JOURNAL_ENTRY_TYPE).<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Individuare tutti gli archivi coinvolti in una particolare operazione<\/strong><\/p>\n\n\n\n<p><strong>Scenario<\/strong>: in un parco programmi molto esteso e in funzione da molti anni non sempre si hanno le conoscenze di tutti i dettagli degli archivi coinvolti negli aggiornamenti. In una situazione del genere potrebbe essere di grande aiuto avere l&#8217;elenco di tutti gli archivi interessati da particolari operazioni (ad es. chiusura contabile del mese, consolidamento fatturazione, aggiornamento contabile di un cliente, ecc.). In questi casi, utilizzando uno user specifico (diverso da quelli abituali, in modo da individuarlo precisamente nel journal) si potrebbe eseguire la sola operazione interessata e poi indagare sul journal tutti gli archivi coinvolti.<\/p>\n\n\n\n<p>Il comando tipo che potrebbe essere utilizzato \u00e8 il seguente:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">select OBJECT,  JOURNAL_ENTRY_TYPE, count(*)\nfrom TABLE(DISPLAY_JOURNAL('MYLIB', 'MYJRN','ALL')) AS JOURNAL_DATA\nWHERE ENTRY_TIMESTAMP BETWEEN  '2024-01-09 00:00:00.000' and '2024-01-09 23:59:59.9999'\n  AND JOB_USER ='USERTEST'\ngroup by OBJECT, JOURNAL_ENTRY_TYPE order by 1,2;<\/pre>\n\n\n\n<p>In questo modo si ottengono tutti gli archivi interessati dalle operazioni svolte dall&#8217;utente &#8216;USERTEST&#8217; nell&#8217;arco temporale interessato (ENTRY_TIMESTAMP).<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Individuare distribuzione temporale degli inserimenti in un particolare achivio<\/strong><\/p>\n\n\n\n<p>Per indagare sulla distribuzione temporale, ad esempio nell&#8217;arco di un mese, delle modifiche in un particolare archivio \u00e8 possibile utilizzare una query del tipo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">SELECT SUBSTRING(CHAR(ENTRY_TIMESTAMP), 1, 10), count(*)\nFROM TABLE(DISPLAY_JOURNAL('MYLIB', 'MYJRN', 'ALL')) AS JOURNAL_DATA\nWHERE OBJECT = 'MYFILE'\nAND ENTRY_TIMESTAMP BETWEEN  '2023-12-01 00:00:00.000' and '2023-12-31 23:59:59.9999' \nGROUP BY SUBSTRING(CHAR(ENTRY_TIMESTAMP), 1, 10)\nORDER BY 1;<\/pre>\n\n\n\n<p>In questa query vengono conteggiati, per ogni giorno del mese considerato, quanti entry sono presenti nel Journal relativi all&#8217;archivio (OBJECT) &#8216;MYFILE&#8217;.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Analizzare gli ENTRY_TYPE di una elaborazione<\/strong><\/p>\n\n\n\n<p>Per indagare sui ti pi di operazioni effettuate un una determinata elaborazione si pu\u00f2 utilizzare una query del tipo seguente:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">WITH TABLE_ET (ENTRY_TYPE, DESCRIPTION)\n        as (values ('BC', 'Backup Change'), ('CB', 'Change Before'),\n           ('CG', 'Change After for Group Commit'), ('CH', 'Change After'),\n\t   ('CM', 'Commit Cycle Marker'), ('CR', 'Create Object'),\n\t   ('DL', 'Delete'), ('EC', 'Encoded Vector Index'),\n\t   ('EF', 'End of File'), ('EJ', 'End Journal'),\n\t   ('IT', 'Incomplete Transaction'), ('JF', 'Journal File'),\n\t   ('JM', 'Journal Marker'), ('PR', 'Prepare'),\n\t   ('PT', 'Partial Transaction'), ('PX', 'Proxy'),\n\t   ('RD', 'Delete Record'), ('SB', 'Start Before'),\n\t   ('SC', 'Start Commit'), ('SQ', 'Sequence Number'),\n\t   ('UB', 'Update Before'), ('UP', 'Update After'),\n\t   ('XP', 'Exception'))\nselect COALESCE(OBJECT,'null'), JOURNAL_ENTRY_TYPE, TABLE_ET.DESCRIPTION, count(*) \"COUNT\"\nfrom TABLE(DISPLAY_JOURNAL('NEWDWHF', 'DWHJRN','ALL')) AS JOURNAL_DATA\nLEFT OUTER JOIN TABLE_ET\n  ON JOURNAL_ENTRY_TYPE = TABLE_ET.ENTRY_TYPE\n WHERE ENTRY_TIMESTAMP BETWEEN  '2024-01-07 00:00:00.000' and '2024-01-07 23:59:59.9999'\ngroup by OBJECT, JOURNAL_ENTRY_TYPE, TABLE_ET.DESCRIPTION order by 1,2;<\/pre>\n\n\n\n<p>Di seguito un esempio di risultato ottenuto:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">OBJECT                          ET DESCRIPTION_ENTRY_TYPE     COUNT\nDWHJRN1466DWHFILE               RD Delete Record                    1\nDWHJRN1466DWHFILE               XP Exception                        1\nDWHJRN1467DWHFILE               RD Delete Record                    1\nDWHJRN1467DWHFILE               XP Exception                        1\nGCSDAT1701DWHFILE   GCSDAT1701  CB Change Before                    1\nGCSDAT1701DWHFILE   GCSDAT1701  UB Update Before              1050324\nGCSDAT1701DWHFILE   GCSDAT1701  UP Update After               1050324\nGISDAT1701DWHFILE   GISDAT1701  PT Partial Transaction              3\nGISDAT1701DWHFILE   GISDAT1701  UB Update Before                    3\nGISDAT1701DWHFILE   GISDAT1701  UP Update After                     3\nXX_DWH_LOGDWHFILE   XX_DWH_LOG  PT Partial Transaction              5\nSDATSEMSVCDWHFILE   SDATSEMSVC  UB Update Before                    1\nSDATSEMSVCDWHFILE   SDATSEMSVC  UP Update After                     3\nSDAT001701DWHFILE               CG Change After for Group Commit    1\nSDAT001701DWHFILE               EF End of File                      1\nSDAT001701DWHFILE               JF Journal File                     1\nSDAT001701DWHFILE   SDAT001701  CH Change After                     1\nSDAT001701DWHFILE   SDAT001701  EJ End Journal                      1\nSDAT001701DWHFILE   SDAT001701  IT Incomplete Transaction           1\nSDAT001701DWHFILE   SDAT001701  JM Journal Marker                   1\nSDAT001701DWHFILE   SDAT001701  PX Proxy                            3\nSDATEMSVCRDWHFILE   SDATEMSVCR  PX Proxy                            3\nnull                            CM Commit Cycle Marker              1\nnull                            EC Encoded Vector Index             1\nnull                            PR Prepare                          1\nnull                            SB Start Before                     3\nnull                            SQ Sequence Number                  3<\/pre>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Conclusioni<\/strong><\/p>\n\n\n\n<p>La funzione di tabella SQL <strong>DISPLAY_JOURNAL<\/strong> su IBM iSeries \u00e8 uno strumento potente per l&#8217;analisi e la gestione di transazioni e eventi di sistema.<\/p>\n\n\n\n<p>Essa permette agli utenti di visualizzare e interrogare i dati registrati nei journal di sistema, che sono log dettagliati di tutte le operazioni eseguite.<\/p>\n\n\n\n<p>Questa funzione \u00e8 particolarmente utile in ambienti complessi e multiutente, dove \u00e8 fondamentale tracciare le modifiche ai dati e monitorare l&#8217;attivit\u00e0 del sistema.<\/p>\n\n\n\n<p>Tenere presente che l&#8217;implementazione e le funzionalit\u00e0 effettive potrebbero variare a seconda della versione del sistema operativo iSeries e del database DB2. \u00c8 sempre buona norma fare riferimento alla documentazione ufficiale IBM per avere informazioni pi\u00f9 precise e dettagliate<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Table Functions: DISPLAY_JOURNAL &#8211; un vero Swiss Army Knife Le funzioni di tabella di IBM iSeries sono come coltellini svizzeri per i dati. Possono essere utilizzate per una variet\u00e0 di attivit\u00e0, come la manipolazione dei dati, l&#8217;interrogazione dei dati e&#8230;<\/p>\n","protected":false},"author":3,"featured_media":4013,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[15,17,19],"tags":[46,104,105,120],"class_list":["post-4008","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gestire-as400-con-sql","category-piu-in-profondita","category-gestione-approfondita-risorse-sistema","tag-sql","tag-table-function","tag-display_journal","tag-journal"],"_links":{"self":[{"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/posts\/4008","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/comments?post=4008"}],"version-history":[{"count":18,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/posts\/4008\/revisions"}],"predecessor-version":[{"id":4068,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/posts\/4008\/revisions\/4068"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/media\/4013"}],"wp:attachment":[{"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/media?parent=4008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/categories?post=4008"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skillup.cloud\/it\/wp-json\/wp\/v2\/tags?post=4008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}