Nicht-Referenzfelder werden zu Referenzfeldern migriert
Bewahren Sie sys_IDs manuell in Referenzfeldern auf, anstatt den Anzeigenamen als Zeichenfolge zu speichern.
Zu migrierende Tabellen werden bestimmt
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.
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();