Computer >> 컴퓨터 >  >> 프로그래밍 >> 데이터베이스

DBA를 위한 Oracle 워크플로 알림 메일러(Workflow Notification Mailer) 문제 해결 가이드

이 글에서는 데이터베이스 관리자(DBA)가 매일 직면하는 Oracle® 워크플로 알림 메일러(Workflow Notification Mailer)의 일반적인 문제들을 다룹니다.

소개

문제를 관리할 때는 기록, 추적, 해결의 과정을 거치게 됩니다. 워크플로 알림 메일러는 구성 요소가 많기 때문에 관련 문제를 해결하는 데 어려움을 겪을 수 있습니다. 이를 돕기 위해 자주 발생하는 문제들과 가능한 해결 방법을 정리했습니다. 워크플로 알림 메일러 작업을 손쉽게 관리할 수 있는 스크립트도 함께 제공되니 놓치지 마세요.

워크플로 알림 메일러의 일반적인 문제와 해결 방법

다음 섹션에서는 워크플로 알림 메일러에서 발생하는 주요 문제와 그 해결책을 살펴봅니다.

문제 1: 사용자가 알림을 받지 못함

사용자가 알림 이메일을 수신하지 못하거나, 실패한 알림을 처리하지 못하는 상황입니다.

원인:

다음 설정 값들이 MAILHTML이 아닌 DISABLED로 지정되어 있는 경우입니다.

  • FND_USER_PREFERENCES 테이블의 PREFERENCE_VALUE
  • WF_LOCAL_ROLES 테이블의 NOTIFICATION_PREFERENCE

해결 방법:

  1. 다음 명령어를 실행하여 테이블을 백업합니다.

        SQL> create table fnd_user_preferences_bkp as select * from fnd_user_preferences;
    
        Table created.
    
        SQL> create table wf_local_roles_bkp as select * from wf_local_roles;
    
        Table created.
    
  2. 다음 명령어를 실행하여 테이블을 업데이트합니다.

        select user_name,preference_value from FND_USER_PREFERENCES where preference_value = 'DISABLED' and preference_name = 'MAILTYPE' and module_name = 'WF' and user_name like '%<USER_NAME>%'; 
    
        update FND_USER_PREFERENCES set preference_value = 'MAILHTML' where preference_name = 'MAILTYPE' and preference_value = 'DISABLED' and module_name = 'WF' and user_name like '%<USERNAME>%'; 
    
        select * from wf_local_roles where notification_preference = 'DISABLED' and name like '%<NAME>'
    
        update wf_local_roles set notification_preference = 'MAILHTML' where notification_preference = 'DISABLED' and name like '%<NAME>%'
    
  3. 시스템 관리자(System Administrator) 책임(Responsibility)에서 Resend Failed/Error Workflow Notifications 요청을 실행하여 실패한 알림을 재전송합니다. 이때 날짜 파라미터인 Notifications sent on or after에 특정 날짜를 지정합니다.

    참고: 날짜는 DD-MMM-YYYY 형식으로 입력해야 합니다. (예: 01-JAN-2020)

문제 2: 이메일이 잘못된 폴더로 전달됨

지출 결재 알림 이메일이 PROCESS 폴더 대신 DISCARD 폴더로 전달되는 상황입니다.

다음 예시는 결재자가 Approval 링크를 클릭했을 때 생성되는 표준 결재 이메일의 Action 항목입니다.

Action: 'Approve'
Note: ''
NID[5513471/192168752214903990869743932721878211126@WFMAIL]

반면 알림이 정크(Junk) 폴더로 들어가면 "Action" 항목이 다음과 같이 표시됩니다.

Action: 'Approve'Note: ''NID5389465/1779945055187563456464409735425450546126@WFMAIL

원인:

Microsoft® Outlook®의 이메일 작성 형식이 텍스트 모드로 설정되어 있거나, 모바일 기기에서 알림을 승인한 경우에 발생합니다.

해결 방법:

텍스트 모드의 이메일 또는 모바일 기기를 통해 이메일 알림을 승인할 때는 반드시 다음 사항을 확인해야 합니다.

  • 각 필드 사이에 공백을 한 칸씩 넣습니다.
  • NID 값을 대괄호([ ])로 감쌉니다.

앞선 예시의 메시지는 각 필드 사이에 최소 한 개의 공백이 있어야 하며, NID 값은 아래와 같이 대괄호로 묶여 있어야 합니다.

Action: 'Approve'
Note: ''
NID[5389465/1779945055187563456464409735425450546126@WFMAIL]

문제 3: 이메일 누락 또는 오래된 이메일 수신

사용자가 이메일을 제때 받지 못하거나, 이미 종료되었거나 취소된 오래된 알림을 수신하는 상황입니다.

원인:

워크플로 알림 메일러 큐에 불필요한 데이터가 가득 차 있을 때 발생합니다.

wf_notifications 파라미터는 종료된 알림의 경우 mail_statusMAIL로, 열려 있는 알림의 경우 SENT로 설정됩니다.

이런 상황에서 wf_notification_out 큐에는 wf_notifications 테이블의 아주 오래된 항목들이 남아 있게 됩니다. 워크플로 백그라운드 프로세스(Workflow Background Process) 요청 파라미터가 올바르지 않으면 비정상적인 알림이 전송됩니다.

해결 방법:

다음의 상위 단계를 따라 워크플로 알림 메일러 큐를 재구축합니다.

  1. 오래된 알림을 어떻게 삭제(purge)할지 고객과 먼저 협의합니다.
  2. begin_date와 같은 기준 날짜를 확정해 둡니다.
  3. 워크플로 알림 메일러를 종료합니다.
  4. begin_date보다 오래된 모든 OPEN 상태의 알림을 종료(Close) 처리합니다.
  5. begin_date보다 오래된 알림의 mail_statusSENT로 업데이트합니다.
  6. APPS 사용자로 접속하여 다음 스크립트로 큐를 재구축합니다.
        SQL> @$FND_TOP/patch/115/sql/wfntfqup.sql apps <APSS_PASSWD> APPLSYS
    

워크플로 알림 메일러 유지관리 스크립트

이 섹션의 명령어들은 워크플로 알림 메일러를 유지관리하는 데 도움이 됩니다. 필요에 따라 명령어들을 스크립트로 만들어 활용할 수 있습니다.

스크립트 1

이 스크립트는 다음 설정들을 변경합니다.

  • RUNNING
  • STARTING
  • STOPPED_ERROR
  • DEACTIVATED_USER
  • DEACTIVATED_SYSTEM
  • NOT_CONFIGURED

다음 명령어로 워크플로 알림 메일러의 component_status를 조회하고 설정을 변경할 수 있습니다.

SQL> select component_status
from fnd_svc_components
where component_id =
(select component_id
from fnd_svc_components
where component_name = 'Workflow Notification Mailer');

COMPONENT_STATUS
------------------------------
STARTING

SQL> update fnd_svc_components set component_status='DEACTIVATED_SYSTEM' where component_id =
(select component_id
from fnd_svc_components
where component_name = 'Workflow Notification Mailer');

1 row updated

SQL> commit;

Commit complete.

스크립트 2

다음 명령어를 사용하면 메일러의 STARTUP_MODEMANUAL 또는 AUTOMATIC으로 설정할 수 있습니다.

SQL> select fsc.COMPONENT_NAME,fsc.STARTUP_MODE,fsc.COMPONENT_STATUS
from APPS.FND_CONCURRENT_QUEUES_VL fcq, fnd_svc_components fsc where fsc.concurrent_queue_id = fcq.concurrent_queue_id(+)
order by COMPONENT_STATUS , STARTUP_MODE , COMPONENT_NAME;
SQL> update fnd_svc_components fsc set fsc.STARTUP_MODE='MANUAL' where fsc.COMPONENT_NAME='Workflow Notification Mailer';

1 row updated.

SQL> commit;

Commit complete.

스크립트 3

이 스크립트는 백엔드에서 워크플로 알림 메일러의 비밀번호를 변경합니다.

SQL> @wfmlrpwupd_in.sql
Enter value for password: *****
Enter value for componentid: 10006
Updated

SQL> @wfmlrpwupd_out.sql
Enter value for password: *****
Enter value for componentid: 10006
Updated

스크립트 4

다음 단일 스크립트를 사용하면 백엔드에서 워크플로 알림 메일러의 각종 값을 변경할 수 있습니다.

$FND_TOP/sql/afsvcpup.sql

결론

워크플로 알림 메일러는 구성 요소가 많고 까다로운 문제들이 존재합니다. 따라서 wf_* 테이블을 업데이트하기 전에는 반드시 백업을 수행해야 합니다.

또한 수정 스크립트를 실행하기 전에 해당 Oracle MetaLink 노트를 참고하기 바랍니다. MetaLink에는 이 글에서 소개한 것 외에도 워크플로 알림 메일러 문제 해결에 도움이 되는 다양한 스크립트가 마련되어 있습니다.

궁금한 점이나 의견이 있다면 피드백 탭을 이용해 남겨주세요. 지금 바로 채팅으로 문의하실 수도 있습니다.

데이터베이스에 대해 더 자세히 알아보세요.