일반적인 자동 복구기 문제
MySQL 외래 키 제약 조건이 실패함
이는 과거에 MySQL 외래 키 검사가 일시적으로 비활성화된 상태에서 실행된 일부 작업으로 인해 발생하는 데이터 무결성 오류입니다. 이로 인해 더 이상 존재하지 않는 다른 기록을 가리키는 참조 값을 가진 기록이 데이터베이스에 남을 수 있습니다. 자동 복구기가 데이터베이스에 외래 키 제약 조건 정의를 (재)적용하려고 할 때 이러한 잘못된 행으로 인해 작업이 차단됩니다.
1) 시험 실행 SQL 스크립트 출력 추출
첫 번째 단계로 응용 프로그램 로그 내에서 상태 검사기 출력을 찾아(
상태 검사기 출력 검사) SQL 스크립트를 새 파일에 붙여넣습니다.
1a) 또는 1b) 단계를 진행합니다.
1a) 문제가 되는 기록을 제거하여 수정
DELETE CASCADE를 사용하여 외래 키가 정의된 경우 데이터베이스에서 분리된 기록을 제거하여 수동으로 수정해 봅니다. 외래 키 제약 조건 정의를 검사하고 이를 필요한 DELETE 문으로 다시 작성하여 이 작업을 수행할 수 있습니다.
|
|
이는 전문가 단계이며 데이터베이스의 데이터를 되돌릴 수 없을 정도로 변경합니다. 계속하기 전에 백업을 작성하십시오! 이 단계의 결과가 확실하지 않은 경우 Codebeamer 지원 부서에 문의하여 도움을 받으십시오!
|
외래 키 제약 조건의 경우 그 정의는 설치된 Codebeamer 인스턴스의 cb.jar 파일(.zip 파일로 열 수 있음)에 있습니다. 해당 ALTER TABLE 문을 찾을 수 있는 <dialect>-database.sql 파일이 있습니다.
예를 들어 다음 activity_log_proj_fk 및 activity_log_user_fk 외래 키 제약 조건의 경우,
ALTER TABLE project_activity_log ADD CONSTRAINT activity_log_proj_fk FOREIGN KEY (proj_id) REFERENCES existing(proj_id) ON DELETE CASCADE;
ALTER TABLE project_activity_log ADD CONSTRAINT activity_log_user_fk FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
분리된 기록에 대해 다음 DELETE 문을 사용하여 정리할 수 있습니다.
DELETE FROM project_activity_log WHERE proj_id NOT IN (SELECT proj_id FROM existing);
DELETE FROM project_activity_log WHERE user_id NOT IN (SELECT id FROM users);
1b) 외래 키 검사를 일시적으로 비활성화하여 수정
이는 권장되지 않으며 1a)가 실현 가능한 해결책이 아닌 경우에만 수행합니다.
자동 복구기 스크립트는 스크립트 앞에 SET FOREIGN_KEY_CHECKS=0; 라인을 삽입하고 스크립트 뒤에 SET FOREIGN_KEY_CHECKS=1; 라인을 삽입하여 외래 키 검사를 무시할 수 있습니다.
그런 다음 2단계로 진행합니다.
2) 자동 복구기 스크립트를 수동으로 실행
Codebeamer의 JDBC 사용자로 대상 데이터베이스에 대한 데이터베이스 콘솔을 엽니다. 추출한(그리고 단계 1b에서 선택적으로 수정한) 자동 복구기 스크립트를 실행합니다.
작업이 완료되면 상태 검사기를 수동으로 실행합니다(
상태 검사 트리거). 오류 배지가 없어야 합니다.