Artículo
· 29 ene, 2024 Lectura de 4 min

Razones por las que los archivos journal no se eliminan automáticamente

Preguntas frecuentes de InterSystems

Si el sistema no se para durante 24 horas, los archivos journal serán eliminados a las 0:30 según la "Configuración de la eliminación de archivos journal".

Una posible causa de que los archivos journal permanezcan más tiempo del establecido en la "Configuración de la eliminación de archivos journal" es que hay transacciones que permanecen abiertas.

En ese caso, se podrá eliminar el archivo journal buscando procesos que estén ejecutando transacciones y finalizando las transacciones.

El ejemplo a continuación comprueba la existencia de transacciones abiertas, y si existen, muestra el nombre del archivo objetivo y la información del registro en el journal.

(Podéis descargar los ejemplos de aquí)

Nota.- Si el tamaño del archivo journal que va a ser comprobado es grande o si hay muchos archivos journal, llevará tiempo ejecutarlos, así que contactad con el centro de soporte.

Class ISJ.JournalUtility
{
ClassMethod GetOpenTransaction() As %Status
{
    set status=$$$OK
    #dim ex As %Exception.AbstractException
    #dim rset As %ResultSet
    try {
        //current journal file
        write !,"Current journal file name:",
            ##class(%SYS.Journal.System).GetCurrentFileName(),!!         // Open transaction file
        // Get info about journals recorded in WIJ
        $$$ThrowOnError(##class(%SYS.Journal.System).GetImageJournalInfo(.filename,.jrnoffset,.jrnfilecount,.opentranoffset,.opentranfilecount))
        if $get(opentranoffset)="" {
            write !,"There are no open transactions",!
            return status
        }         //If there is a differeence in file counts(jrnfilecount-opentranfilecount>0 )
        // There is an open transaction in the old journal file, so please search for a target file name
        if jrnfilecount-opentranfilecount>0 {
            set loopcnt=jrnfilecount-opentranfilecount
            for i=1:1:loopcnt {
                set currentfile=filename
                $$$ThrowOnError(##class(%SYS.Journal.File).GetPrev(currentfile,.filename))
            }
        }         write "〇〇 list of open target journal records 〇〇",!
        set rset=##class(%ResultSet).%New("%SYS.Journal.Record:List")
        do rset.%Execute(filename,,,,$LB("Address","=",opentranoffset))
        write !,"=== File Name : ",filename," ===",!
        write "Address : TimeStamp : ProcessID : RemoteSystemID : TypeName : Transaction",!
        while rset.%Next() {
            write rset.%Get("Address")," : ",
                rset.%Get("TimeStamp")," : ",
                rset.%Get("ProcessID")," : ",
                rset.%Get("RemoteSystemID")," : ",
                rset.%Get("TypeName")," : ",
                rset.%Get("InTransaction"),!
        }
    }
    catch ex {
        set status=ex.AsStatus()
    }
    return status
}
}

Un ejemplo de ejecución.

USER>do ##class(ISJ.JournalUtility).GetOpenTransaction()

Current journal file name:/usr/irissys/mgr/journal/20210330.002
〇〇 list of open target journal records 〇〇

=== File Name : /usr/irissys/mgr/journal/20210330.001 ===
Address : TimeStamp : ProcessID : RemoteSystemID : TypeName : Transaction
1834156 : 2021-03-30 13:19:00 : 5194 : 1073741824 : BeginTrans : 1
Comentarios (1)1
Inicie sesión o regístrese para continuar

Nos indicaba @Enrico Parisi en su comentario:

Otra opción para ver/monitorear las transacciones abiertas directamente desde el Portal de administración del sistema es usar el Panel del sistema (Operación del sistema -> Panel del sistema). No es necesario escribir código ni SQL, solo unos pocos clics.
En el Panel del sistema hay una línea "Transacciones":

En caso de que una o más transacciones se abran durante más de 20 minutos (más o menos...), el Panel del sistema muestra un estado Problema.

En el Panel del sistema, si hace clic en la etiqueta "Transacciones" (independientemente del estado de Problema), en la parte inferior de la página se muestra un enlace "Haga clic aquí para obtener más detalles":

Si/cuando se hace clic en "Haga clic aquí para obtener más detalles", se muestra una página con las 5 transacciones principales (más tiempo): 

Desde allí, puede hacer clic en el ID del proceso e ir directamente a la página Detalles del proceso.