---
sourceDocument: 요코하마 ServiceNow AI 플랫폼 관리
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/ko-KR/yokohama/platform-administration

 Release :

    - yokohama

ft:locale :

    - ko-KR

ft:publication_title :

    - 요코하마 ServiceNow AI 플랫폼 관리

ft:clusterId :

    - platadm

bundleId :

    - platadm

workflow :

    - Platform


---

# 비참조 필드를 참조 필드로 마이그레이션

# 비참조 필드를 참조 필드로 마이그레이션 {#ariaid-title1}

* 릴리스 버전: Yokohama
* 
* 업데이트 날짜 2025년 01월 30일
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 소요 시간: 4분

표시 이름을 문자열로 저장하는 대신 참조 필드에 sys_ids 수동으로 저장합니다.

## 마이그레이션할 테이블 결정 {#archive-reference-migration__section_kyq_cjq_xcc}

데이터 마이그레이션 프로세스를 시작하려면 다음 백그라운드 스크립트를 실행합니다. 이 스크립트는 보관 규칙 참조 마이그레이션 \[sys_archive_ref_migration\] 테이블에서 직접 테이블 확장과 관련 보관된 기록에 대한 마이그레이션 기록을 만들어 유효한 테이블만 처리되도록 합니다.

    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();
                }
            }
        }

## 보관 참조 복사 {#archive-reference-migration__section_jw3_txq_vnb}

마이그레이션 프로세스를 진행하는 각 테이블에 대해 참조 복사본 보관(RefCopyJob) 작업은 참조 필드의 sys_id 식별하고 표시 값을 올바른 sys_id로 업데이트합니다. 동일한 타임스탬프를 가진 기록이 10,000개를 초과하지 않는 한 이 작업은 한 번에 10,000개 기록을 구성합니다. 마이그레이션 진행률은 보관된 타임스탬프에 따라 달라집니다.

## 문자열에서 참조로 필드 유형 변경 {#archive-reference-migration__section_mld_fcr_vnb}

보관 규칙과 연결된 테이블이 완전히 마이그레이션되면 ArchiveRefJob 작업이 실행됩니다. 이 작업은 보관 테이블의 sys_dictionary 유형을 문자열에서 참조로 변경합니다.

## RefCopyJob 및 ArchiveRefJob에 대한 노드 장애 수정 {#archive-reference-migration__section_mv3_bdr_vnb}

이러한 작업이 실행되는 동안 노드 장애가 발생하면 데이터 마이그레이션 상태가 부적절한 상태로 유지됩니다. 실패 RefCopyJob 하면 테이블이 마이그레이션 상태로 남을 수 있습니다. sys_archive_ref_migration의 행이 특별한 시간 동안 마이그레이션 상태로 멈추는지 확인하여 이 조건을 확인할 수 있습니다. 특정 행 상태를 마이그레이션 에서 대기 중 으로 업데이트하고 RefCopyJob 작업이 다시 실행될 때 테이블에서 데이터 마이그레이션을 계속합니다.  
또한 노드가 조기에 종료되면 ArchiveRefJob 실패할 수 있습니다. 테이블에 참조 필드인 필드와 문자열 유형 필드인 필드가 있는지 확인합니다. 필드 유형을 변경하는 도중에 작업이 중지되었을 수 있습니다. 프로세스를 다시 시작하는 백그라운드 스크립트에서 실행되도록 트리거 작업을 설정하여 이 문제를 해결할 수 있습니다.

    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();


