SAP Service Startup 과정__SAP Service Startup Process

감귤은탱귤·2025년 2월 13일
0

SAP BC - 기본 개념

목록 보기
19/19
post-thumbnail

블로그 작성 초창기에 SAP DB/AP 서비스 시작/중지 방법 에 대한 글을 작성했었다.

간단한 명령어와 목적에 대해서만 정리를 했었는데, 정상적으로 잘 수행된다면 큰 문제가 없겠지만, 이슈가 생겼을때는 전체적인 흐름을 알고, 이슈 포인트를 빠르게 짚어내는게 중요하다.

따라서 이번 포스트에서는 좀 더 자세하게 SAP 서비스가 어떻게 시작되는지, 그리고 어떻게 내려가는지 하나씩 분석해보려고 한다.

Unix/ Linux OS 기준으로 작성
Window 는 약간 다르기는 하나 전체적인 흐름에서 크게 다르지는 않다.



0. SAP Service Startup Process

SAP Help Portal - SAP Start Service



1. OS Boot / init.d

1-1. /etc/init.d (Initial Process)

OS 정상 부팅 시, 커널을 통해 init 이라는 최초의 프로세스가 실행(호출)된다.

리눅스 버전이 바뀜에 따라 init process 는 변해왔는데,
최근에는 거의 모든 리눅스에서 systemd 를 기본 initializer Programe 으로 사용한다.

따라서, OS 부팅 시 init(systemd) 프로세스에 따라 /etc/init.d 디렉토리 아래의 스크립트가 실행되며, 부팅 시 필요한 서비스들의 실행한다.

정확한 설명은 아니지만, 포스트 주제를 고려하여 이해해주기 바란다.
init process 에 대한 자세한 설명은 다른 좋은 글을 참조하면 좋다.



2. sapinit

SAP 를 설치하게 되면, /etc/init.d 디렉토리 밑에 sapinit 스크립트가 생성된다.

init.d 디렉토리 밑에 있는 sapinit 스크립트는 OS 부팅과 함께 수행되고, sapstartsrv 프로세스를 실행한다.

systemctl 명령어를 통해 sapinit 서비스의 상태 및 활성/비활성을 할 수 있다.

  • 서비스 상태 조회 : systemctl status sapinit
  • 서비스 활성화 : systemctl enable sapinit
  • 서비스 비활성화 : systemctl disable sapinit

sapinit 서비스의 status 정보조회를 통해 실제 실행 명령어를 확인할 수 있다.
/etc/init.d/sapinit start

sapinit 스크립트를 열어보면 start 외, stop, status, restart 옵션을 사용할 수 있으며, trace 옵션을 추가하여 추적로그를 남길 수 있다.

2-1. /usr/sap/sapservices Read

sapinit 스크립트가 수행되면, /usr/sap/sapservices 파일을 읽어와 각 인스턴스 별 LD_LIBRARY_PATH 환경변수를 세팅하고, sapstartsrv 프로세스를 시작한다.

즉, sapinit 스크립트 수행하며, sapstartsrv 프로세스가 시작하게 되고, 이 모든 과정은 OS 부팅과 함께 같이 이뤄진다.

2-2. SAP Host Agent

sapinit 서비스는 제어 그룹(CGroup) 과 함께 작동하며, 관련된 서비스를 관리한다.

보통 SAP Host Agent 서비스(/usr/sap/hostctrl/exe) 도 같이 실행하게 되는데,
sapinit status 조회를 해보면, SAP Host Agent 의 saphostexec, saposcol 도 같이 실행하게 된다.



3. sapstartsrv

여기까지의 순서도를 한번 정리한다.

◼ OS 부팅
-> Init 프로세스(systemd) 에 의해 sapinit 스크립트 수행
-> 각 인스턴스 별 sapstartsrv 프로세스 실행(/usr/sap/sapservices 참조)
-> SAP Host Agent 프로세스 실행 (saphostexec, saposcol)

위 순서에 따라,

  • OS 에 설치된 각 SAP Instance 별로 sapstartsrv 프로세스가 실행되며,
  • 여기까지는 관리자의 개입 없이 자동적으로 수행되는 과정이고,
  • SAP 서비스를 시작하기 위한 준비과정이라고 생각하면 된다.

sapstartsrv 프로세스는 SAP 인스턴스 관리를 위한 데몬이며, SAP 시스템에서 필요한 모든 프로세스들의 부모 프로세스가 된다.
또한 SAP 서비스 수행에 매우 중요한 프로세스이다.

SAP Notes 936273 - sapstartsrv for all platforms

따라서, SAP 시스템을 시작하기 위해서는 반드시 sapstartsrv 프로세스가 살아있어야하며, sapstartsrv 프로세스가 죽어있다면 SAP 서비스를 올릴수 없게 된다.

sapstartsrv 프로세스는 sapcontrol 명령어 또는 startsap/stopsap 를 통해서도 수동으로 올리고 내릴 수 있다.

Start sapstartsrv

◼ sapcontrol : sapcontrol -nr <Instance number> -function StartService <SID>
◼ startsap : startsap startupsrv <Instance name>

Stop sapstartsrv

◼ sapcontrol : sapcontrol -nr <Instance number> -function StopService
◼ stopsap : stopsap startupsrv <Instance name>



4. startsap

startsap/stopsap 은 SAP 시스템을 시작 및 중지하는데 사용되는 스크립트이다.

정확히는 startsap 스크립트 자체가 SAP 시스템(서비스) 를 구동하는 스크립트는 아니다.
실제 SAP 시스템 구동하는 것은 sapstart 프로그램이며, startsap 스크립트에서 sapstart 프로그램을 호출하여 실행한다.

startsap / sapstart 이름이 비슷하여 햇갈리지만 정확이 구분해야 한다.
startsap 는 스크립트이며, sapstart 는 프로그램이다.

이 과정에서 startsap 스크립트는 sapstartsrv 프로세스 상태를 다시 한번 확인하여, 만약 sapstartsrv 프로세스가 내려가있다면 수행되도록 한다.
(sapstart 는 sapstartsrv 프로세스를 상속받아 수행되므로, sapstartsrv 프로세스가 올라와 있어야 수행될 수 있다.)

또한, Profile Directory 를 읽어와 sapstart 스크립트가 Profile 을 읽을 수 있게 경로는 제공한다.


즉 정리하면, startsap 스크립트는 SAP 시스템을 시작하는 작업 및 확인을 한번에 수행하는 스크립트 이다.

  • sapstartsrv 서비스 체크 (내려가 있다면 수행)
  • Profile Directory 경로 확인
  • sapstart 프로그램 호출


5. sapstart

sapstart 프로그램은, 실제 SAP 시스템을 구동한다.

startsap 스크립트에서 전달받은 Profile Directory 를 통해 각 인스턴스 Profile 을 읽어와 SAP 시스템 구동에 필요한 SAP 서비스들을 차례로 실행한다.

각 SAP 서비스들은 sapstart 프로세스를 상속받아 실행되며, ps -ef 명령어로 확인할 수 있다.

먼저 sapcpe 를 수행하여, SAP Kernel 파일들을 로컬로 복사해온다.(/sapmnt/<SID>/exe ->/usr/sap/<SID>/<Instance Name>/exe)

이 후, disp+work(dw) 의 Dispatcher 프로세스가 sapstart 프로세스를 상속받아 가장 먼저 올라온다.
Dispatcher 프로세스가 올라온 다음, 각 Work 프로세스들은 Dispatcher 의 프로세스를 상속받아 올라오게 된다.

dw 프로세스들 중, sapstart 프로세스를 상속받은(PPID) 1개의 dw 프로세스가 Dispatcher 프로세스이다.
Dispatcher 프로세스는 인스턴스당 1개만 존재하며(일반적으로), 해당 Dispatcher 프로세스가 나머지 모든 Work 프로세스들을 관리한다.

이 외에, 게이트웨이(gwrd), ICM(icman), IGS(ig), Web Dispatcher(wd) 등등의 프로세스들이 순차적으로 올라오면서, SAP 시스템이 구동되게 된다.

5-1. sapcontrol

SAP 는 2015년 4월 이후부터 startsap/ stopsap 스크립트에 대한 지원을 종료했으며, 더 이상 사용하지 않는 것을 권장한다.

대신, SAP MC (Management console) 또는 sapcontrol 명령어를 사용하기를 권장한다.
(정확히는 SAP NetWeaver 7.0 이상을 기반으로 하는 SAP 시스템에 대해서 sapcontrol 명령어를 사용하는 것을 권장)

SAP Notes 1763593 - Starting and Stopping SAP system instances - startsap/stopsap are deprecated

기억상으로, SAP S/4 HANA 1809 부터 커널파일내에 startsap/stopsap 스크립트가 사라져 해당 명령어 수행이 안되므로, 대신 sapcontrol 명령어를 사용해야한다.

또한, sapcontrol 명령어 출시 이후, startsap/stopsap 스크립트 내부적으로 sapcontrol 명령어를 사용하므로 크게 달라진 바는 없다.

5-2. SAP 권장 서비스 시작 순서

SAP Notes 897399 - Start and stop sequence for SAP system

상기 Notes 를 통해 SAP 에서 권장하는, SAP 시스템의 올바른 기술적인 시작 순서를 확인할 수 있다.
(중지는 시작의 역순)

  1. Database
  2. ERS(Enqueue Replication Server)
  3. ASCS/ SCS
  4. Enqueue and/or Message Server 를 포함하는 ABAP 인스턴스
  5. 모든 ABAP 및 JAVA dialog 인스턴스


6. stopsap

stopsap 스크립트는 SAP 서비스를 종료하는 스크립트로 옵션에 따라 특정 인스턴스만 종료할 수 있다.

옵션을 생략하면 ALL(Default) 옵션이 자동으로 붙으며, 모든 SAP 서비스를 종료한다.

stopsap 스크립트는 kill 명령어로 SAP 프로세스들(dw, gwrd, ig 등등) 을 종료한다.

이때 사용되는 파일이 kill.sap 파일이다.

6-1. kill.sap

그림에서 보면 stopsap 스크립트는 kill.sap 를 실행한다고 표현된지만, 실제로는 kill 명령어를 수행하기 위한 PID 가 적혀있는 파일을 참조하는 것이다.

kill.sap 는 /usr/sap/<SID>/<Instance name>/work 디렉토리 밑에 파일로 존재한다.

kill.sap 파일내에 적혀있는 PID 가 바로 sapstart 프로세스의 PID 이다.

즉, stopsap 명령어는 kill.sap 파일을 읽어와 sapstart 프로세스의 PID 를 확인하고, 해당 PID 를 kill 함으로써 SAP 서비스를 종료한다.



7. 트러블슈팅

이로써, SAP 시스템(서비스)이 시작하고 중지하는 자세한 프로세스에 대해서 살펴봤다.

그러나, SAP 시스템의 시작/중지 프로세스에 대해 면밀하게 알고 있다고 해도, 각 사이트 별로 운영환경이 천차만별이고 구성과 세팅도 전부 다르기에 이슈/장애상황에 놓였을때 대처하기는 쉽지 않다.

SAP BC 직을 수행하다 보면, 아마 다들 한번쯤 SAP 서비스가 제대로 올라오지 않아 식은땀을 흘린적이 있을 것이다.

다음은 SAP 서비스 시작/중지 이슈에 대해서, 체크해봐야할 로그파일 목록이다.
(오류 문구나 증상에 대해서도 주의깊게 체크해봐야 한다.)


로그 파일 경로 : /usr/sap/<SID>/<Instance name>/work

  • available.log
  • sapstartsrv.log
  • dev_disp
  • disp+work.status
  • dev_sapstart
  • sapstart.log
  • sapstart<X>.trc
  • stdout<X>
  • stderr<X>
  • sapcpe.log


8. Notes

SAP 서비스 시작과 관련하여, 특이한 케이스의 SAP Notes 를 정리했다.

1. UNIX 플랫폼에서 SAP 업그레이드 후, sapstartsrv 프로세스(서비스) 가 자동으로 시작되지 않음

=> SAP Notes 823941 - SAP start service on Unix platforms

2. UNIX 플랫폼에서 SAP Kernel 을 700/701 에서 720 이상으로 업그레이드한 후, startsap 또는 sapcontrol 명령어를 사용하여 SAP 서비스를 시작할 수 없음

=> SAP Notes 1825259 - UNIX sapstartsrv: the system does not start with 720 kernel

3. $(DIR_EXECUTABLE) - Kernel exe 폴더 내용이 실수로 삭제되었고, SAP Start Service, Instance 프로세스를 시작할 수 없음

=> SAP Notes 3219591 - sapstartsrv: minimal set of files to start the instance

profile
SAP BC (2019 ~ )

0개의 댓글

관련 채용 정보