Migration des champs non référencés vers les champs de référence
Conservez manuellement les 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
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 de référence d’archivage (RefCopyJob) identifie le sys_id des champs de référence et met à jour la valeur d’affichage pour qu’elle soit la bonne 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 la chaîne à la référence.
Correction des défaillances des nœuds pour RefCopyJob et ArchiveRefJob
Si une défaillance de nœud se produit pendant l’exécution de ces tâches, cela laisse l’état de la migration de données dans un état 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 exceptionnelle. 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.
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();