Datenmigrationsprozess für die Archivierung von Tabellendaten aus Nicht-Referenzfeldern in Referenzfelder
Der Datenmigrationsprozess verschiebt Daten aus einer vorhandenen Archivtabelle, einschließlich untergeordneter und zugehöriger Tabellen. Beim Abschließen dieses Prozesses sind spezielle Skripts und Hinweise zu beachten.
Datenmigrationsauftrag (RefCopyJob)
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();
}
}
}Auftrag zum Ändern der sys_dictionary-Typen von migrierten Tabellen (ArchiveRefJob)
Nachdem die einer Archivregel zugeordneten Tabellen vollständig migriert sind, wird der Auftrag ArchiveRefJob ausgeführt. Dieser Auftrag ändert die sys_dictionary-Typen der Archivtabelle von Zeichenfolge in Referenz.
Beheben von Knotenfehlern für „RefCopyJob“ und „ArchiveRefJob“.
Wenn während der Ausführung dieser Aufträge ein Knotenfehler auftritt, wird der Status der Datenmigration in einem falschen Zustand beibehalten. 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“ für ungewöhnlich lange Zeit im Migrationsstatus feststecken (quantifizieren?). Aktualisieren Sie den spezifischen Zeilenstatus von „ Wird migriert “ auf „ Warten “, und RefCopyJob setzt 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();