2021년 3월 20일 토요일

How to delete holding message in sap po 7.5

개요

SAP PO에서는 메시지를 보내는 방식(Quality of Service)이 세가지가 있으며 각 방식에는 동기로 알고 있는 BE(Best Effort), 비동기인 EO(Exactly Once), 순차처리를 위한 방식으로 EOIO(Exactly Once In Order)가 있습니다. 이중에 그냥 에러난 상태로 나두면 나중에 치우기 번거로울수 있는 EOIO의 System Error, Holdding 상태 로그들에 대한 내용을 담아봤습니다.

현재 여러곳에서 PO서버의 부하를 줄이기 위해 아니면 다른 목적으로 소스시스템에서 순차큐를 셋팅하여 EOIO방식으로 데이터를 전송하고 있는 곳들이 있을겁니다. EOIO는 시퀀스대로 처리되기 때문에 앞에 메시지가 시스템에러가 발생되면 뒤의 처리되는 메시지는 처리가 되지 못한 상태에서 홀딩 상태로 남아있으며 관리가 잘되는 PO 운영은 웬만해서는 해당이 안될것 같은데요. 품질이나 개발 서버 같은경우 이런 EOIO 에러에 대해 꾸준하게 관리를 하지 않는 경우 어느날 엄청난 수에 시스템에러와 홀딩상태인 메시지에 깜짝 놀랄수 도 있을것 같습니다.

이 메세지 상태인것들은 동기의 BE처럼 에러가 발생되면 바로 캔슬처리가 되는것도 아니고 비동기의 EO처럼 시스템 에러발생된건들에 대해 일괄적으로 수동 캔슬처리를 할수 없는것 같습니다. 이유는 순차처리이기 때문에 앞에 에러발생된 메시지를 수동으로 재처리하거나 캔슬처리해야 뒤 홀딩상태인것들도 처리를 할수 있는 번거로움이 있고 이런 에러를 처리안해주면 같은 큐를 사용되고 있는 이상 로그가 쌓이기 때문에 무시할수 없는 노릇입니다.

현상

시스템 에러를 처리하고 홀딩상태인것들을 일괄적으로 캔슬처리를 시도를 했을때 저희쪽만 발생되는 현상인지 모르겠지만 예를 들어 10개의 홀딩메시지중 3개가 'Message will be canceled' 메시지가 나오는 반면에 아래와 같이 다수의 홀딩메시지가 처리되지 못하고 아래와 같이 처리실패 메시지를 확인할수 있었습니다.
Could not faill message. Reason: com.sap.engine.messaging.runtime.ClusterException: Could not trigger cluster event FAIL_MESSAGE_NOALERT for node xxxxxxx.

최초의 에러메시지를 삭제하고 순차큐명(Sequence ID)를 필터링하여 일괄지정 후 삭제하는 경우 Sequential Number 순서대로 조금씩 캔슬처리가 되긴합니다.
이렇게 많은 홀딩상태의 메시지가 조금씩 처리가 되기도 하니 반복적으로 캔슬버튼을 수십번, 수백변을 누르면서 처리해야하는 번거로움이 있습니다.

홀딩메시지 대량취소 가능한가요?

2394070-Cancel multiple EOIO message in holdingstatus 노츠를 확인해봤을때 대량 취소를 위한 가장좋은 옵션은 'background job to mass cancel message in Adapter Engine' 이라고 합니다. 이게 관련된 노츠는 2137688-New Feature:Background Job to mass cancel messages 이 노츠에서 확인 가능한것 같습니다.

PO에서는 메시지를 캔슬처리하는 방법으로 PIMON(http://<host>:<port>/pimon)에서 하는데 한번에 캔슬처리 가능한 메시지수는 1,000개라고 하며 예전에 사용했던 RWB(http://<host>:<port>/rwb)에서는 한번에 캔슬처리 가능한 메시지 수는 10,000개라고 하는데 PO 7.5버젼에서 모니터링 하다보면 RWB에서 모니터링 했을때가 그립기도 합니다.

EOIO(Exactly Once)는 자주 사용안해봤던 방식이라 이전 PO버젼에서도 홀딩상태의 메시지를 일괄 취소할때 에러메시지가 발생되었었는지 기억이 나지 않습니다. 하지만 관련노츠를 찾아봤을때 2518394-Could not trigger clusster event FAIL_MESSAGE_NOALERT for node란 노츠를 찾게되었는데 지금 현상과 동일하고 왜 이런현상이 발생되었고 최초 에러가 발생된 메시지를 찾는 방법에 대해 기술이 되어있었습니다. 이 노츠에서도 해결방법으로 2137688노츠가 언급이 되어있네요.

솔직히 SAP PO 테이블에 접근할수 있다면 메시지 상태값을 변경해주면 될것 같은데.. 화면상에 캔슬버튼을 누를때 홀딩메시지 상태가 다른 상태로 변경시 어떤 테이블들과 연결이 되었는지 모르니 이런부분들을 알수 알수 있다면 문제없이 DB에서 강제로 처리가 가능할것 같기도 합니다.

대량 홀딩메시지 삭제를 위한 Background Cancel Job 설정
2137688-New Feature:Background Job to mass cancel messages 노츠를 확인시
Adapter engine > Background Job Processing Monitor 메뉴에서 메시지처리에 대한 Job을 설정해
게 되면 보관주기 만료되지 않은 로그들도 삭제가되는데 개발/테스트 불필요한 로그들이 많이 생성되는 서버에서 사용하기 좋은것 같습니다.

댓글 없음:

댓글 쓰기