SAP 를 운영하다 보면 가끔 버퍼로 인해 문제가 되는 경우가 있다.
대표적으로 분명 설정이 바꾸었는데, 버퍼에 있는 값 때문에 변경이 안된것처럼 보이는 현상이다.
(설정 외에도 권한값, 오브젝트, 필드값 등등이 있다.)
매뉴얼에 따라서 정상적으로 변경을 했고, 시스템에 문제가 없이 반영되었는데도 실제 사용자가 확인을 해보면 예전값(버퍼값)으로 출력되니 매우 난감한 상황에 봉착하게 된다.
이럴 경우, 경험적인 직감이 아니면 문제점을 찾기가 어렵다.
관련하여, SAP 버퍼 초기화 방법에 대해서 서술한다.
SAP 시스템에서 활성화된 테이블 및 필드 정의
SAP 는 NTAB 버퍼를 읽어 테이블이 버퍼링되어 있는지에 대한 여부 를 확인한다.
Table : DDNTT, DDNTF
SAP Kernel 781 부터 NTAB 버퍼중 Field definition 과 Short NTAB 은 사용되지 않는다.
또한 SAP Kernel 785 부터 Nametab 버퍼 현대화가 완료되어 여러 NTAB 버퍼는 Catalog 이름으로 변경된다.
- SAP Notes 3085975 - Catalog profile parameters as of SAP Kernel Release 781
ABAP 프로그램의 컴파일된 실행 가능 버전을 저장
Table : D010L, D010T, D010Y
SAPgui 의 메뉴, 푸쉬버튼 정의 등등의 GUI 인터페이스 런타임 객체를 저장
Table : D345T, D346T, D342L
생성된 SAP 화면을 저장
Table : DYNPRO
정의된 공장 달력(Factory Calendar), 공휴일 달력(Public Holiday) 을 저장
Table : TFACS, THOCS
BSP, HTTP 등 에서 사용되는 텍스트가 저장된다.
부분 테이블 버퍼의 경우, 필드 값이 있는 하나의 레코드를 저장
일반 테이블 버퍼의 경우, 필드 값이 포함된 레코드 범위를 저장 (설정에 따라 모든 항목을 저장할 수도 있으며, 이를 전체 버퍼링이라고 한다.)
Export/Import 버퍼는 여러 작업 프로세스에서 사용할 수 있어야 하는 데이터를 저장
ABAP 명령어 EXPORT TO/IMPORT FROM SHARED BUFFER 를 사용하여 Export/Import 버퍼에 데이터를 저장하고 읽을 수 있다.
ABAP 명령어 EXPORT TO/IMPORT FROM SHARED MEMORY 를 사용하여 공유 메모리 버퍼에 데이터를 저장하고 읽을 수 있다.
Export/import Buffer 와의 차이점은 데이터 클러스터가 저장되고 나면, 자동 강제 제거가 되지않는다.
따라서 버퍼가 가득차면 새 데이터를 로드할때 런타임 에러가 발생한다.
❗❗ 버퍼 초기화 시, 다시 버퍼를 채우기 위해 SAP 시스템에 부하가 발생할 수 있다.
Tcode | Buffer | Desc |
---|---|---|
/$SYNC | ALL | Resets the buffers of the application server |
/$NAM | Nametab | Resets the nametab buffer of the application server |
/$PXA | Program | Resets the Program (PXA) Buffer of the application server |
/$CUA | CUA | Resets the CUA buffer of the application server |
/$DYN | Screen | Resets the screen buffer of the application server |
/$TAB | Tables | Resets the TABLE buffers of the application server |
/$ESM | Exp./Imp. SHM | Resets the Exp./ Imp. Shared Memory Buffer of the application server |
/$OBJ | Resets the Shared Buffer of the application server |
위 명령어를 사용한 버퍼 초기화는 해당 Instance 에만 적용이 된다.
여기서 말하는 User Buffer 은 사용자 권한값 버퍼를 뜻한다.
Tcode : SE38
Program : RSUSR405
옵션 Only current Client :
현재 클라이언트 내 모든 유저에 대한 버퍼 초기화 (Table USRBF2, USRBF3)
옵션 Build user buffer completely :
클라이언트 카피 후 비어있는 사용자 버퍼 테이블(USRBF2, USRBF3) 구축
Build user buffer completely 옵션에 대해서,
클라이언트 카피 후에는 사용자 버퍼 테이블이 비어있고, 사용자 버퍼는 사용자가 로그인할때 새로 생성된다.
이때 성능상의 이유로 미리 사용자 버퍼를 채우기 위해 해당 옵션을 사용할 수 있다.
자세한 내용은 아래 Notes 를 참고하기 바란다.
- SAP Notes 2414634 - User buffer empty after client copy
SAP_BASIS 버전에 따라 옵션 없이 바로 실행될 수도 있다.