Migration des champs non référencés vers les champs de référence

  • Rversion finale: Australia
  • Mis à jour 12 mars 2026
  • 2 minutes de lecture
  • Conservez manuellement sys_ids dans les champs de référence au lieu de stocker le nom d’affichage sous forme de chaîne.

    Détermination des tables à migrer

    Pour commencer le processus de migration de données, exécutez le script en arrière-plan suivant. Ce script crée des enregistrements de migration pour les extensions de table directes et les enregistrements archivés associés dans la table Migration de référence de règle d’archivage [sys_archive_ref_migration], garantissant que seules les tables valides sont traitées.
    var tables = GlideDBObjectManager.get().getAllExtensions(current.table);
        for (i = 0; i < tables.size(); i++) {
            var gr = new GlideRecord('sys_archive_ref_migration');
            gr.addQuery('table', 'ar_' + tables.get(i));
            gr.query();
            if (!gr.next()) {
                if (GlideTableDescriptor.isValid('ar_' + tables.get(i))) {
                    var gr2 = new GlideRecord("sys_archive_ref_migration");
                    gr2.initialize();
                    gr2.setValue('rule', current.sys_id);
                    gr2.setValue('table', 'ar_' + tables.get(i));
                    gr2.setValue('reference_migration_progress', 'waiting');
                    gr2.insert();
                }
            }
        }
        //Also get insert related records tables as well
        var map = new GlideRecord('sys_archive');
        map.addQuery('table', current.table);
        map.query();
        if (map.next()) {
            var id = map.getValue('sys_id');
            if (!(id === undefined)) {
                var related = new GlideRecord('sys_archive_related');
                related.addQuery('archive_map', id);
                related.addQuery('action', 'archive');
                related.query();
                while (related.next()) {
                    if (!GlideTableDescriptor.isValid('ar_' + related.getValue('table'))) {
                        gs.log('Related Record table: ' + related.getValue('table') + ' not created yet');
                        continue;
                    }
     
                    var gr3 = new GlideRecord("sys_archive_ref_migration");
                    gr3.initialize();
                    gr3.setValue('rule', current.sys_id);
                    gr3.setValue('table', 'ar_' + related.getValue('table'));
                    gr3.setValue('reference_migration_progress', 'waiting');
                    gr3.insert();
                }
            }
        }

    Copie des références d’archives

    Pour chaque table soumise au processus de migration, la tâche Copie d’archivage de référence (RefCopyJob) identifie le sys_id des champs de référence et met à jour la valeur d’affichage pour qu’elle corresponde sys_id. La tâche configure 10 000 enregistrements à la fois, sauf s’il existe plus de 10 000 enregistrements avec le même horodatage. La progression de la migration repose sur l’horodatage archivé.

    Changement des types de champs de chaîne en référence

    Une fois que les tables associées à une règle d’archivage sont complètement migrées, la tâche ArchiveRefJob s’exécute. Cette tâche modifie les types de sys_dictionary de la table d’archivage de chaîne à référence.

    Correction des défaillances de nœud pour RefCopyJob et ArchiveRefJob

    Si une défaillance de nœud se produit pendant l’exécution de ces travaux, l’état de la migration de données reste incorrect. En cas d’échec RefCopyJob , une table peut être placée dans un état de migration. Vous pouvez vérifier cette condition en vérifiant si les lignes du sys_archive_ref_migration sont bloquées dans l’état de migration pendant une durée extraordinaire. Mettez à jour l’état d’une ligne spécifique de migrationà attente , puis RefCopyJob la migration de données sur la table se poursuit lorsque la tâche s’exécute à nouveau.

    Le nœud peut également tomber en panne lorsqu’il ArchiveRefJob se termine prématurément. Vérifiez si les tables contiennent des champs de référence et d’autres encore des champs de type chaîne. La tâche s’est peut-être arrêtée au milieu de la modification des types de champs. Vous pouvez résoudre cette condition en configurant une tâche de déclencheur à exécuter dans un script en arrière-plan, ce qui redémarre le processus :
    GlideRecord trigger = new GlideRecord('sys_trigger');
    trigger.initialize();
    trigger.setValue('state', 0);
    trigger.setValue('trigger_type', 0);
    trigger.setValue('next_action', new GlideDateTime());
    trigger.setValue('job_context', 'fcRuleId=' + ruleId);
    trigger.setValue('name', 'Job Reference Migration' + ' Node - ' + new GlideClusterSynchronizer().getSystemID());
    trigger.setValue('trigger_class', 'com.glide.db.auxiliary.job.ArchiveRefJob');
    trigger.insert();