이 글에서는 데이터베이스 관리자(DBA)가 매일 직면하는 Oracle® 워크플로 알림 메일러(Workflow Notification Mailer)의 일반적인 문제들을 다룹니다.
소개
문제를 관리할 때는 기록, 추적, 해결의 과정을 거치게 됩니다. 워크플로 알림 메일러는 구성 요소가 많기 때문에 관련 문제를 해결하는 데 어려움을 겪을 수 있습니다. 이를 돕기 위해 자주 발생하는 문제들과 가능한 해결 방법을 정리했습니다. 워크플로 알림 메일러 작업을 손쉽게 관리할 수 있는 스크립트도 함께 제공되니 놓치지 마세요.
워크플로 알림 메일러의 일반적인 문제와 해결 방법
다음 섹션에서는 워크플로 알림 메일러에서 발생하는 주요 문제와 그 해결책을 살펴봅니다.
문제 1: 사용자가 알림을 받지 못함
사용자가 알림 이메일을 수신하지 못하거나, 실패한 알림을 처리하지 못하는 상황입니다.
원인:
다음 설정 값들이 MAILHTML이 아닌 DISABLED로 지정되어 있는 경우입니다.
- FND_USER_PREFERENCES 테이블의 PREFERENCE_VALUE
- WF_LOCAL_ROLES 테이블의 NOTIFICATION_PREFERENCE
해결 방법:
다음 명령어를 실행하여 테이블을 백업합니다.
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.다음 명령어를 실행하여 테이블을 업데이트합니다.
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>%'시스템 관리자(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_status가 MAIL로, 열려 있는 알림의 경우 SENT로 설정됩니다.
이런 상황에서 wf_notification_out 큐에는 wf_notifications 테이블의 아주 오래된 항목들이 남아 있게 됩니다. 워크플로 백그라운드 프로세스(Workflow Background Process) 요청 파라미터가 올바르지 않으면 비정상적인 알림이 전송됩니다.
해결 방법:
다음의 상위 단계를 따라 워크플로 알림 메일러 큐를 재구축합니다.
- 오래된 알림을 어떻게 삭제(purge)할지 고객과 먼저 협의합니다.
- begin_date와 같은 기준 날짜를 확정해 둡니다.
- 워크플로 알림 메일러를 종료합니다.
- begin_date보다 오래된 모든 OPEN 상태의 알림을 종료(Close) 처리합니다.
- begin_date보다 오래된 알림의 mail_status를 SENT로 업데이트합니다.
- APPS 사용자로 접속하여 다음 스크립트로 큐를 재구축합니다.
SQL> @$FND_TOP/patch/115/sql/wfntfqup.sql apps <APSS_PASSWD> APPLSYS
워크플로 알림 메일러 유지관리 스크립트
이 섹션의 명령어들은 워크플로 알림 메일러를 유지관리하는 데 도움이 됩니다. 필요에 따라 명령어들을 스크립트로 만들어 활용할 수 있습니다.
스크립트 1
이 스크립트는 다음 설정들을 변경합니다.
RUNNINGSTARTINGSTOPPED_ERRORDEACTIVATED_USERDEACTIVATED_SYSTEMNOT_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_MODE를 MANUAL 또는 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에는 이 글에서 소개한 것 외에도 워크플로 알림 메일러 문제 해결에 도움이 되는 다양한 스크립트가 마련되어 있습니다.
궁금한 점이나 의견이 있다면 피드백 탭을 이용해 남겨주세요. 지금 바로 채팅으로 문의하실 수도 있습니다.
데이터베이스에 대해 더 자세히 알아보세요.