작업 문제 해결¶
이 섹션에서는 예상대로 실행되지 않는 문제 해결 작업에 대한 체계적인 접근 방식을 설명합니다.
이 항목의 내용:
작업이 실행되지 않음¶
1단계: 작업이 실행되지 않았는지 확인¶
TASK_HISTORY 테이블 함수를 쿼리하여 작업이 실행되지 않았는지 확인합니다. 작업이 성공적으로 실행되었지만 작업 정의의 SQL 문이 실패했을 수 있습니다. 특히, 예약 및 완료 시간, 오류 코드 및 메시지를 기록해 둡니다.
작업에 선행 작업이 있는 경우(작업 그래프 에서) 선행 작업이 성공적으로 완료되었는지 확인합니다.
2단계: 작업이 재개되었는지 확인¶
작업(또는 작업 그래프의 각 작업)의 상태가 RESUMED인지 확인(DESCRIBE TASK 또는 SHOW TASKS 사용)합니다.
개별 작업을 재개하려면 ALTER TASK … RESUME을 실행합니다. 루트 작업에 연결된 모든 종속 작업을 재귀적으로 활성화하려면 각 작업을 개별적으로 활성화하는 대신 SYSTEM$TASK_DEPENDENTS_ENABLE 함수를 쿼리합니다.
작업 세부 정보를 검토하는 동안 작업에 일정이 있는 경우 cron 식도 확인합니다. 예약된 시간이 한 번 이상 발생했는지 확인합니다.
3단계: 작업 소유자에게 부여된 권한 확인¶
작업 소유자(즉, 작업에 대한 OWNERSHIP 권한이 있는 역할)에 작업 실행에 필요한 다음 권한이 있는지 확인합니다.
오브젝트 |
권한 |
참고 |
---|---|---|
계정 |
EXECUTE TASK |
역할이 소유한 모든 작업을 실행하기 위해 필요합니다. 역할에 대한 EXECUTE TASK 권한을 취소하면 모든 후속 작업이 해당 역할에서 시작되지 않습니다. |
데이터베이스 |
USAGE |
|
스키마 |
USAGE |
|
작업 |
OWNERSHIP |
|
웨어하우스 |
USAGE |
SHOW GRANTS TO ROLE role_name
을 사용하여 역할에 부여된 권한을 확인합니다.
4단계: 조건 확인¶
작업에 SYSTEM$STREAM_HAS_DATA 조건이 있는 WHEN 절이 포함된 경우 작업이 마지막으로 실행되도록 예약된 시간에 변경 데이터 캡처(CDC) 레코드가 지정된 스트림에 포함되어 있는지 확인합니다. 스트림에 대한 기록 데이터는 AT | BEFORE 절을 사용하여 쿼리할 수 있습니다.
작업 시간 초과 또는 일정 윈도우 초과¶
작업의 단일 실행에 대한 기본 제한은 60분입니다. 이 제한은 종료되지 않는 작업에 대한 보호 수단으로 구현되었습니다. TASK_HISTORY 테이블 함수를 쿼리합니다. 작업이 취소되거나 작업에 대해 예약된 윈도우을 초과한 경우 원인은 종종 웨어하우스 크기가 작기 때문입니다. 웨어하우스 크기를 검토하고 일정 창 또는 1시간 제한에 맞게 늘리는 것이 좋습니다.
또는, ALTER TASK … SET USER_TASK_TIMEOUT_MS = <num> 을 실행하여 작업에 대한 시간 제한을 늘리는 것이 좋습니다. 특정 작업에 대해 USER_TASK_TIMEOUT_MS 매개 변수가 설정되었는지 확인하려면 다음 문을 실행하십시오.
SHOW PARAMETERS LIKE 'USER_TASK_TIMEOUT_MS' IN TASK <task_name>;
여기서 <작업_이름>
은 시간 초과 제한 값을 조정 중인 작업의 이름입니다. 이 문에서 반환되는 레코드가 없을 경우 현재 이 작업의 기본 시간 제한은 3600000
밀리초(60분)입니다.
쿼리 병렬화 문제가 있는 경우에는 웨어하우스 크기를 늘리는 것도, 시간 초과 제한 값을 늘리는 것도 도움이 되지 않을 수 있습니다. 작업에 의해 실행되는 SQL 문을 다시 작성하는 다른 방법을 고려하십시오.