Datenmigrationsprozess zum Archivieren von Tabellendaten aus Nicht-Referenzfeldern in Referenzfelder

  • Freigeben Version: Washingtondc
  • Aktualisiert 1. Februar 2024
  • 2 Minuten Lesedauer
  • Der Datenmigrationsprozess verschiebt Daten aus einer vorhandenen Archivtabelle, einschließlich untergeordneter und zugehöriger Tabellen. Nach Abschluss dieses Vorgangs sind spezielle Skripts und Hinweise zu verstehen.

    Datenmigrationsauftrag (RefCopyJob)

    Für jede Tabelle, die den Migrationsprozess durchläuft, identifiziert RefCopyJob die sys_id der Referenzfelder und aktualisiert den Anzeigewert auf die richtige sys_id. Der Job konfiguriert 10.000 Datensätze gleichzeitig, es sei denn, es gibt mehr als 10.000 Datensätze mit demselben Zeitstempel. Der Migrationsfortschritt hängt vom archivierten Zeitstempel ab. Das Skript bestimmt die zu migrierenden Tabellen:
    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();
                }
            }
        }

    sys_dictionary-Typen des migrierten Tabellenauftrags (ArchiveRefJob) ändern

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

    Knotenfehler für RefCopyJob und ArchiveRefJob werden behoben

    Wenn während der Ausführung dieser Aufgaben ein Knotenfehler auftritt, bleibt der Status der Datenmigration in einem falschen Status. Wenn RefCopyJob fehlschlägt, kann eine Tabelle im Migrationsstatus belassen werden. Sie können diese Bedingung überprüfen, indem Sie überprüfen, ob Zeilen in sys_archive_ref_migration übermäßig lange im Migrationsstatus stecken bleiben (Quantifizieren?). Aktualisieren Sie den spezifischen Zeilenstatus von „ Wird migriert “ auf „ Warten “, und RefCopyJob setzt die Datenmigration für die Tabelle fort, wenn der Auftrag erneut ausgeführt wird.

    Der Knoten kann auch fehlschlagen, wenn ArchiveRefJob vorzeitig beendet wird. Überprüfen Sie, ob Tabellen Felder enthalten, die Referenzfelder sind, und einige, die noch Felder vom Typ „Zeichenfolge“ sind. Der Auftrag ist möglicherweise während der Änderung der Feldtypen abgebrochen worden. Sie können diese Bedingung beheben, indem Sie einen Auslöserauftrag einrichten, der in einem Hintergrundskript ausgeführt wird, das den Prozess erneut startet:
    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();