Migrando campos de não referência para campos de referência
Preserve manualmente sys_ids em campos de referência em vez de armazenar o nome de exibição como uma cadeia de caracteres.
Determinando tabelas a serem migradas
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();
}
}
}Copiando referências de arquivamento
Para cada tabela que passa pelo processo de migração, o trabalho Cópia de referência de arquivamento (RefCopyJob) identifica o sys_id dos campos de referência e atualiza o valor de exibição para ser o sys_id correto. O trabalho configura 10.000 registros por vez, a menos que haja mais de 10.000 registros com o mesmo carimbo de data/hora. O andamento da migração depende do carimbo de data/hora arquivado.
Alterando os tipos de campo de cadeia de caracteres para referência
Depois que as tabelas associadas a uma regra de arquivamento migrarem completamente, o trabalho ArchiveRefJob será executado. Este trabalho muda os tipos sys_dictionary da tabela de arquivamento de cadeia de caracteres para referência.
Corrigindo falhas de nó para RefCopyJob e ArchiveRefJob
Se ocorrer falha de nó enquanto esses trabalhos estiverem em execução, isso deixará o status da migração de dados em um estado inadequado. . RefCopyJobfalha, ele pode deixar uma tabela em um status de migração. Você pode verificar essa condição verificando se as linhas em sys_archive_ref_migration estão travadas em migrando status por um período extraordinário. Atualize o status de linha específico de migrando para aguardando e o. RefCopyJobcontinua a migração de dados na tabela quando o trabalho é executado novamente.
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();