Article
· Fév 4 4m de lecture

Les raisons pour lesquelles les fichiers journaux restent longtemps sans être supprimés

InterSystems FAQ rubric

Si le système ne s'arrête pas pendant 24 heures, les anciens fichiers journaux seront supprimés à 0h30 selon les « Paramètres de suppression des fichiers journaux ».

Une cause possible pour laquelle des fichiers journaux restants sont plus anciens que les « Paramètres de suppression des fichiers journaux » est que certaines transactions restent ouvertes.

Dans ce cas, vous pourrez supprimer le fichier journal en recherchant les processus exécutant les transactions et en finalisant les transactions.

L'exemple ci-dessous vérifie l'existence de transactions ouvertes et, si elles existent, génère le nom du fichier cible et les informations sur l'enregistrement du journal.

(Des exemples peuvent être téléchargés ici)

*Remarque* Si la taille du fichier journal à vérifier est importante ou s'il existe de nombreux fichiers journaux, l'exécution prendra du temps, veuillez donc contacter notre centre d'assistance.

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 exemple d'exécution :

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
Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer