SAP 시스템에서는 TMS 를 통해 CTS 를 전송한다.
각 CTS 들은 릴리즈되면 Cofile 과 Data 파일이 생기게 되며, TMS 에 정의된 전송경로에 따라 각 Import Queue 에 들어가게 된다.
이러한 Import Queue 는 시스템 로컬상에 파일로 존재한다.
/usr/sap/trans/buffer/<SID>
Import Queue 를 정리하지 않고, 시스템을 운영하다보면, Queue 에는 계속 CTS 가 쌓이게 되고, 쌓이다 보면 Import Queue 의 새로고침(Refresh) 시간이 늘어나게 된다.
SAP 에서는 통상적으로 Buffer 파일의 크기가 1MB 를 초과한다면 새로고침 성능이 저하된다고 한다.
- SAP Notes 1924741 - It takes a long time to refresh a system's import queue
또한, cofiles 와 data 가 쌓이다 보면 점점 /usr/sap/trans 의 사용량도 커지게 된다.
따라서, 주기적으로 Import Queue 리스트 정리와 함께, Cofiles, Data 파일들을 아카이빙 해주는 것이 좋다.
Import Queue Buffer 파일의 이름은 <SID> 이다.
버퍼 파일 SID 와 시스템 SID 가 혼동되지 않도록, 버퍼 파일 SID 는 앞으로<Buffer_SID>
로 칭한다.
✅ 아래 OS 상에서 수행하는 모든 작업은
<SID>adm
계정으로 접속하여 수행한다.
Import Queue 를 정리하는 방법은 시스템 구성, 운영 정책등에 따라서 여러가지 방법을 사용할 수 있다.
여기서는 대표적으로 사용되는 3가지 방법에 대해서 정리한다.
SAP Std. tp 프로그램(Kernel) 사용하여 Import Queue 를 정리한다.
스탠다드 프로그램을 사용하는 만큼, 명령어의 뜻만 정확히 알고 있으면 확실한 정리가 가능하지만, 운영 정책에 따라 사용자가 원하는대로는 정리가 불가능하다.
이 방법으로 Buffer 파일 정리와 cofile/data 파일 정리 모두 가능하지만, 두 작업이 연계되어서 작업되지는 않는다.
(즉, Buffer 파일에서 삭제한 CTS 대로, cofile/data 파일이 삭제되지는 않는다.
Buffer 정리 기준 따로, cofile/data 정리 기준 따로 이다.)
참고 Notes 및 Help Portal 문서
- SAP Help Portal - Change and Transport System - Cleaning Up the Transport Directory
- SAP Notes 41732 - Deletion of data in transport directory
- SAP Notes 565574 - Deleting imported entries from TMS import queue
- SAP Notes 1924741 - It takes a long time to refresh a system's import queue
- SAP Notes 2792158 - How to delete multiple TR in STMS Import Queue
- SAP Notes 2939148 - Reduce size of import buffer file
- SAP Notes 3471409 - How to cleaning up the transport directory
해당 방법은 <Buffer_SID>
Buffer 파일을 VI 명령어를 사용해 직접적으로 변경하는 방법이다.
이 방법에서는 아래와 같이 크게 두가지 방법으로 나누어진다.
해당 방법도 <Buffer_SID>
Buffer 파일을 직접적으로 변경하는 방법이다.
.sh 스크립트로 생성하는 만큼 스크립트 내 동작을 직접 확인할 수 있으며, 스크립트 내용에 따라 사용자 입맛에 맞게 커스터마이징이 가능하다.
또한 쉘 스크립트를 crontab 에 등록하여 주기적 정리 및 로깅도 가능하다.
Import Queue 정리를 수행할 시스템에서 Tcode STMS_IMPORT 로 Queue 에 진입한다.
이후, Import Queue Buffer 에서 삭제할 대상 CTS 를 F6(시작 점/ 끝 점) 또는 F9(단일 선택) 단축키로 지정한다.
대상 CTS 지정을 완료했다면, 상단 메뉴바에 Request -> Delete 를 클릭하여 Queue 에서 CTS 를 삭제한다.
이렇게 CTS 를 삭제하면, Buffer 파일에서는 해당 CTS 라인이 실제 삭제되는게 아니라, 해당 라인 앞에 #
을 붙여 주석 처리를 한다.
이후, OS 상에서 tp cleanbuffer 명령어를 수행하면, 주석 처리된 엔트리를 삭제하게 된다.
tp cleanbuffer <SID> pf=<TP Profile>
Request -> Delete
작업을 생략하고 tp cleanbuffer 명령어를 사용하면, Import Queue buffer 내에 Status 가 request already imported(녹색 체크표시) 상태인 CTS 만 삭제된다.
- SAP Notes 2939148 - Reduce size of import buffer file
tp check all 명령어를 사용하면, 1년(Default) 이상의 오래된, 삭제할 대상의 CTS 엔트리에 대한 목록이 작성된다.
오래된 기준에 대한 설정은 tp 파라미터 설정을 통해서 변경 가능하다.
(아래 파라미터 단위는 모두 일 이며, 생성된 날짜를 기준으로 동작한다.)
여기서 Data 파일의 경우, datalifetime 보관기간(200일) 이 지났다면, 해당 CTS Data 파일을 먼저 olddata 디렉토리로 이동한다.
이후 olddatalifetime(365일) 이 지날 경우에 olddate 디렉토리의 해당 CTS Data 파일이 삭제된다.
그외 cofile, log 파일은 위의 절차 없이 보관기간이 지날 경우, 바로 삭제된다.
tp check all 명령어는 다음과 같이 사용할 수 있다.
tp check all pf=<TP Profile>
<TP Profile>
은/usr/sap/trans/bin/TP_DOMAIN_<SID>.PFL
로 확인할 수 있다.
해당 수행 결과는 다음 디렉토리에서 확인할 수 있다.
/usr/sap/trans/tmp/CHECK.LOG
여기서, 다음 단계로 진행하기 전에
/usr/sap/trans/olddata
디렉토리가 없다면, 미리 생성해 준다.
olddata 디렉토리의 권한 그룹은<SID>adm:sapsys
, 권한은 775 로 설정하면 된다.
보관 기간이 지난 CTS 에 대한 삭제 작업 수행 전, Test 작업을 수행하여 삭제 작업을 시뮬레이션하고, Test Log 를 확인해보는 것을 추천한다.
tp testold all 명령어를 사용하여 삭제 Test 작업을 수행할 수 있다.
tp testold all pf=<TP Profile>
Test Log 파일은 다음 디렉토리에서 확인할 수 있다.
/usr/sap/trans/tmp/TESTOLD.LOG
tp clearold all 명령어를 수행하여, 실제 삭제를 수행한다.
해당 수행은 위에 설명 했다시피, tp check all 명령어로 생성된 CHECK.LOG 목록을 대상으로 수행된다.
tp clearold all pf=<TP Profile>
수행 Log 파일은 다음 디렉토리에서 확인할 수 있다.
/usr/sap/trans/tmp/CLEAROLD.LOG
해당 방법은 VI 로 직접 <Buffer_SID> Buffer 파일로 들어가서, VI 명령어를 사용하여 작업한다.
따라서, 작업하기 전에 필수로 기존 Buffer 파일을 백업해둬야 한다.
VI 를 사용한 작업은 Buffer 파일만 정리하기 때문에 Cofile/Data 파일은 따로 정리가 필요하다.
필요에 따라1-2. tp clearold 명령어로 cofile/data 정리
를 통해 삭제해줘도 된다.
VI 명령어는 OS 내 buffer 파일을 직접 제어하기 때문에, OS 접속 권한과
<SID>adm
계정 사용이 필요하다.
:%s 명령어는 특정 패턴을 치환하는 명령어이다.
해당 명령어를 사용하여, 기존 CTS 엔트리를 주석처리할 수 있으며, 주석 처리한 엔트리는 Buffer 파일 Read 시, 스킵하기 때문에 속도 개선에 효과가 있다.
:%s 명령어의 기본 사용 방법은 다음과 같다.
:%s/[기존 문자열]/[바꿀 문자열]/[옵션]
:%s 명령어에서 %는 대상을 문서 전체로 한다는 뜻이다.
[옵션]
은 생략이 가능하다.
예시) 해당 파일내의 모든
foo
문자열을bar
로 바꾼다.
:%s/foo/bar
여기서 문자열 내에 특수문자가 들어가면 해당 특수문자 앞에 역슬래시(\
) 를 붙여줘야 한다.
따라서, Buffer 파일 내에서 CTS 엔트리에 주석을 붙이기 위해서는 기본 문자열과 바꿀 문자열에 다음과 같이 입력해야 한다.
예시) Buffer 파일 내에서 /0/DEVK900001 ~ /0/DEVK900009 CTS 엔트리를 주석처리
:%s/\/0\/DEVK90000/\#0\/DEVK90000
:%g 명령어의 d 옵션을 사용하여 특정 패턴의 라인을 삭제할 수 있다.
해당 명령어를 사용하여, 특정 패턴의 CTS 엔트리를 삭제할 수 있으며, 이는 속도 개선 뿐 아니라, Buffer 파일 크기도 줄일 수 있다.
(Buffer 의 CTS 엔트리를 주석 처리해도, Buffer 파일 크기 자체가 너무 커지면 Read 속도가 느려진다.)
:%g 명령어를 사용하여, 특정 패턴의 라인을 삭제하는 방법은 다음과 같다.
:%g/[특정 문자열]/d
예시) 해당 파일내의
foo
문자열이 포함된 라인은 전부 삭제한다.
:%g/foo/d
:%s 명령어일때와 같이 특수문자 앞에는 역슬래시(\
) 를 붙여줘야 한다.
따라서, Buffer 파일 내에서 주석 처리된 CTS 엔트리를 삭제하기 위해서는 다음과 같은 명령어를 사용한다.
예시) Buffer 파일 내에서 주석 처리된 CTS 를 모두 삭제한다. (#0/DEVK9...)
:%g/\#0\/DEVK9/d
위 명령어의 경우에는 #0/DEVK9 문자열이 포함된 모든 라인이 삭제된다.
Import Queue Buffer 파일을 정리하는 쉘 스크립트를 생성한다.
아래 쉘 스크립트는 기존 Buffer 파일에 엔트리를 다음과 같이 주석처리를 해주는 예제 스크립트다.
vi /usr/sap/trans/buffer/clear_buffer.sh
system="<SID>"
count=<주석 처리할 행 수>
a=1
cat /usr/sap/trans/buffer/${system} | while read line
do
if [ ${a} -gt ${count} ]; then
echo "$line"
else
echo "$line" | sed 's/^\//#/'
fi
a=`expr ${a} + 1`
done > /usr/sap/trans/buffer/${system}_$(date +\%Y\%m\%d).result
❗❗ 사용하는 시스템의 OS, 쉘에 따라서 구문이 약간씩 달라질 수 있으니, 참고하시기 바랍니다.
기존 Import Queue 파일은 수정하지 않고,
Queue 파일을 읽어서, 주석처리를 하며, 최종적으로 <SID>_<수행일자>.result
파일을 생성한다.
해당 스크립트에서 최상단 두가지 변수 값만 수정하여 사용한다.
Import Queue buffer 로 이동
cd /usr/sap/trans/buffer
<SID> 파일 확인
vi <Buffer_SID>
내부에 CTS 에 대한 정보들이 열거되어있다.
정리 스크립트 변수 값 수정 (system, count)
vi clear_buffer.sh
정리 스크립트 수행
./clear_buffer.sh
수행 결과물 확인
vi <Buffer_SID>_<수행일자>.result
Buffer 파일 바꿔치기
mv <Buffer_SID> <Buffer_SID>_<수행일자>_orig
mv <Buffer_SID>_<수행일자>.result <Buffer_SID>
예시) SID = TST / 작업일자 = 2024.01.01
mv TST TST_20240101_orig
mv TST_20240101.result TST
Import Queue 정리 확인
Tcode : STMS_IMPORT
위 작업으로 정리된 CTS 의 cofile 과 data 파일을 각각 아카이빙 저장 공간으로 옮기거나 tar 파일로 묶어서 보관한다.
또는 1-2. tp clearold 명령어로 cofile/data 정리
를 통해 삭제해줘도 된다.