Nicht-Referenzfelder werden zu Referenzfeldern migriert

  • Freigeben Version: Zurich
  • Aktualisiert 31. Juli 2025
  • 2 Minuten Lesedauer
  • Bewahren Sie sys_IDs manuell in Referenzfeldern auf, anstatt den Anzeigenamen als Zeichenfolge zu speichern.

    Zu migrierende Tabellen werden bestimmt

    Um den Datenmigrationsprozess zu starten, führen Sie das folgende Hintergrundskript aus. Dieses Skript erstellt Migrationsdatensätze für direkte Tabellenerweiterungen und zugehörige archivierte Datensätze in der Tabelle „Archivregelreferenzmigration“ [sys_Archive_ref_Migration], um sicherzustellen, dass nur gültige Tabellen verarbeitet werden.
    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();
                }
            }
        }

    Archivreferenzen werden kopiert

    Für jede Tabelle, die den Migrationsprozess durchläuft, identifiziert der Auftrag „Referenzkopie archivieren“ (RefCopyJob) die sys_ID der Referenzfelder und aktualisiert den Anzeigewert auf die richtige sys_ID Der Auftrag konfiguriert jeweils 10000 Datensätze, es sei denn, es sind mehr als 10000 Datensätze mit demselben Zeitstempel vorhanden. Der Migrationsfortschritt hängt vom archivierten Zeitstempel ab.

    Feldtypen werden von Zeichenfolge zu Referenz geändert

    Nachdem die Tabellen, die einer Archivregel zugeordnet sind, vollständig migriert wurden, wird der ArchiveRefJob-Auftrag ausgeführt. Dieser Auftrag ändert die sys_dictionary-Typen der Archivtabelle von Zeichenfolge zu Referenz.

    Knotenfehler für RefCopyJob und ArchiveRefJob werden behoben

    Wenn ein Knotenfehler auftritt, während diese Aufträge ausgeführt werden, verbleibt der Status der Datenmigration in einem falschen Status. Wenn RefCopyJobSchlägt fehl, kann eine Tabelle in einem Migrationsstatus belassen. Sie können diese Bedingung verifizieren, indem Sie überprüfen, ob Zeilen in der sys_Archive_ref_Migration feststecken Wird migriert Status für einen außergewöhnlichen Zeitraum. Aktualisieren Sie den spezifischen Zeilenstatus von Wird migriert Bis Warten Und RefCopyJobSetzt die Datenmigration in der Tabelle fort, wenn der Auftrag erneut ausgeführt wird.

    Der Knoten kann auch fehlschlagen, wenn ArchiveRefJobWird vorzeitig beendet. Überprüfen Sie, ob Tabellen Felder enthalten, die Referenzfelder sind und einige noch Zeichenfolgenfelder sind. Der Auftrag wurde möglicherweise während der Änderung der Feldtypen angehalten. Sie können diese Bedingung lösen, indem Sie einen Auslöserauftrag einrichten, der in einem Hintergrundskript ausgeführt wird, wodurch der Prozess erneut gestartet wird:
    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();