SAP Notes 2399996 - How-To: Configuring automatic SAP HANA Cleanup with SAP HANACleaner
SAP HANA DB 에서 백업(Data, Log), 백업 카탈로그, 트레이스 파일의 보관과 유지도 중요하지만, 해당 파일들이 적시에 정리(삭제) 되어 적정한 수준의 파일시스템 여유공간을 확보하는 것 역시 중요하다.
이러한 정리 작업(HouseKeeping) 에는 자체 개발 스크립트를 사용한 Crontab 수행, HANA Studio / HANA Cockpit 관리툴을 사용한 수동 정리 등등의 방법들이 있지만,
여기서는 hanacleaner 툴을 사용한 정리 작업 및 자동화 방법에 대해서 설명하고자 한다.
hanacleaner 도구는 오픈소스이며, 적절한 구현과 이 도구를 사용하면서 발생하는 문제에 대한 책임은 모두 사용자 본인에게 있다고 고지하니, 확인 후 사용하기 바란다.
hanacleaner 를 사용할때, 정리 작업의 대상이 될 수 있는 파일은 다음과 같다.
정리 대상에는 Data Backup, Log Backup 모두 대상이 된다.
여기서 Backup (Data, Log) 은 물리적으로 OS 에 떨어진 백업 파일을 뜻한다.
SAP HANA DB Backup 과 관련된 자세한 설명은 다음 포스트를 참조하기 바란다.
백업 카탈로그는 백업의 대한 기록 정보이다.
모든 백업 수행에 대해서 자세한 기록을 담고 있으며, 간단하게 설명하자면 HANA DB 백업 수행에 대한 로그 라고 이해하면 된다.
특정 백업 파일을 사용한 복구에는 백업 카탈로그가 없어도 되지만,
Time-base Recovry 를 위해서는 반드시 백업 카탈로그가 필요하다.
백업 카탈로그에는 대표적으로 다음 정보들이 담겨있다.
◾ 생성된 백업
◾ 백업 시작 및 완료 시간
◾ 백업 상태
◾ 백업된 볼륨
◾ 백업 크기
◾ 백업 ID
백업 카탈로그는 Monitoring View SYS.M_BACKUP_CATALOG, SYS.M_BACKUP_CATALOG_FILES 를 통해서 확인할 수 있다.
HANA DB 내 각 서비스에 대한 추적 파일(Trace File)이다.
기본적으로 .trc / .stat / .log 등의 확장자를 가지며, DB 의 서비스의 상태에 대한 로깅파일이다.
추적 레벨에 따라 기록되는 정보가 더 자세해지며, 기본 추적 레벨값은 0 이다.
(추적 레벨이 0 이어도 오류에 대한 정보는 기록된다.)
추적 파일은 추적 파일의 최대 크기를 지정하는 파라미터값 (maxalertfilesize
) 을 초과하면, 자동으로 압축(.gz, .2gz, .zld) 된다.
추적 파일이 일정 크기를 넘으면 자동으로 압축되지만, 이러한 압축 파일도 계속 쌓이면 많은 디스크 공간을 차지하게 되므로 주기적인 정리가 필요하다.
hanacleaner Github 에서, hanacleaner.py 스크립트를 다운받아 서버에 업로드하면 설치는 완료된다. (권한은 <sid>adm
, 755 로 설정)
스크립트 업로드 경로는 관리의 용이성을 위해, 아래 경로에 업로드하는 것을 추천한다.
/usr/sap/<SID>/HDB<Instance number>/exe/python_support/.
hanacleaner Github : https://github.com/chriselswede/hanacleaner
해당 사항은 선택이며, DB 계정 생성이 부담스럽다면 SYSTEM 계정이나 기존 ADMIN 계정을 사용해도 된다.
hanacleaner 의 정리 작업을 관리할 DB 계정을 신규로 생성하며, 필요한 권한을 부여한다.
hanacleaner 의 여러 정리 작업의 사용유무에 따라 필요권한은 조금 달라지는데, 아래 굵은 표시 권한은 있어야, 백업 파일, 백업 카탈로그, 추적파일 정리가 가능하다.
간단하게, 다음 SQL 구문을 실행함으로써 HANACLEANER 관리 계정을 생성할 수 있다.
CREATE USER HANACLEANER PASSWORD <Password> NO FORCE_FIRST_PASSWORD_CHANGE;
ALTER USER HANACLEANER DISABLE PASSWORD LIFETIME;
GRANT SELECT, DELETE ON _SYS_STATISTICS.HOST_OBJECT_LOCK_STATISTICS_BASE TO HANACLEANER;
GRANT SELECT, DELETE ON _SYS_STATISTICS.STATISTICS_ALERTS_BASE TO HANACLEANER;
GRANT SELECT, DELETE ON _SYS_REPO.OBJECT_HISTORY TO HANACLEANER;
GRANT SELECT ON _SYS_STATISTICS.STATISTICS_EMAIL_PROCESSING TO HANACLEANER;
GRANT audit admin, audit operator, backup admin, catalog read, log admin, monitor admin, resource admin, trace admin TO HANACLEANER;
신규 생성된 hanacleaner 관리 계정으로 정리 스크립트가 접속할 수 있게, hdbuserstore KEY 값을 신규로 생성해준다.
다음은 HANA TENANT DB(SID : TST) 의 HANACLEANER 계정에 접속할 수 있는 HANACLEANER_KEY 값을 신규로 생성하는 hdbuserstore 예시 명령어이다.
hdbuserstore SET HANACLEANER_KEY <SAP HANA DB Hostname>:<TENANT DB SQL Port> HANACLEANER <Password>
SAP HANA 2.0 (MDC) 의 첫번째 TENANT DB 의 SQL Port 는 기본값 30015 이다.
생성된 hdbuserstore KEY 값은 다음 명령어로 확인할 수 있다.
hdbuserstore LIST
이제 해당 KEY 값으로 hanacleaner.py 스크립트는 SAP HANA DB 에 접속할 수 있다.
신규 DB 계정을 생성하지 않았다면, 기존의 존재하는 hdbuserstore KEY 값을 그대로 사용하면 된다.
여기서는 OS 에 <SID>adm
계정으로 직접 접속하여 Front-end 로 작업을 수행하는 방법에 대해서 설명과 예시를 함께 정리했다.
또한, 아래 모든 명령어에는 hdbuserstore HANACLEARNER_KEY
키 값으로 HANA DB 에 접속하며, 해당 부분 설명은 제외했다.
hanacleaner 에 --help 옵션을 통해서, 모든 옵션과 설명을 확인할 수 있다.
python hanacleaner.py --help
hanacleaner.py 스크립트 수행의 디버깅과 SQL 문 을 확인하려면
-es false -os true
옵션을 추가하면 된다.
해당 옵션 사용 시, 실제 작업은 수행되지 않으며, 작업에 사용될 SQL 문이 출력된다.
◼ -es : false 시, 테스트 수행 (실제 SQL 수행 안함)
◼ -os : true 시, 수행될 SQL 구문 출력
백업 카탈로그
라는 용어로 혼동이 있을 수 있기에 다시 한번 간략히 정리한다.
- 백업 카탈로그 : 백업 수행 기록 로그
- 백업 : 물리적인 DB 복사본 데이터 파일 (Data Backup, Log Backup, Data Snapshot 등등)
◼ -be : 백업 카탈로그 최소 보관 갯수
◼ -bd : 백업 카탈로그 최소 보관 일수(day)
◼ -bb : true 설정 시, 백업 카탈로그가 삭제될때, 해당 백업 카탈로그와 연관된 물리적 백업 파일도 같이 삭제
◼ -bo : true 설정 시, cleanup 전/후 백업 카탈로그 리스트 출력
◼ -br : true 설정 시, cleanup 후, 삭제된 백업 카탈로그 출력
여기서 백업 파일은 Complete Data Backup (Full Backup) 과 Data Snapshot 모두 해당된다.
즉, 해당 옵션 설정 시, Data Snapshot 도 생각하여 옵션 값을 조정해야 한다.
31일 이상 오래된 백업 카탈로그(❗ 물리적 백업 파일 X) 를 삭제하고, 최근 5개의 백업 파일(❗ 물리적 백업 파일 O) 만 보관하고 그 이후 백업은 모두 삭제.
또한, 삭제된 백업 카탈로그 리스트를 cleanup 수행 후 출력.
python hanacleaner.py -k HANACLEANER_KEY -bd 31 -be 5 -br true
7일 이상 오래된 백업 카탈로그와 백업 파일을 삭제. (즉, 백업 카탈로그와 백업 파일을 1주일치만 보관)
또한, 삭제된 백업 파일 리스트를 cleanup 수행 후 출력.
python hanacleaner.py -k HANACLEANER_KEY -bd 7 -bb true -br true
◼ -tc : 추적파일 최소 보관 일수(day) / ALTER SYSTEM CLEAR TRACES
◼ -tf : 추적파일 최소 보관 일수(day) / ALTER SYSTEM REMOVE TRACES
개념적으로 -tc 와 -tr 의 뜻은 동일하지만, 작업을 수행하는 SQL 구문에 차이가 있다.
◼ -tb : backup.log / backint.log 파일의 최소 보관 일수(day)
◼ -te : expensive statement 추적파일의 최소 보관 일수(day)
◼ -ti : 정리 작업 제외 추적파일 리스트 (-tf 옵션과 함께 사용)
◼ -to : true 설정 시, cleanup 전/후로 추적파일 리스트 출력
◼ -td : true 설정 시, cleanup 후, 삭제된 추적파일 리스트 출력
42일 이상 오래된 추적파일(trace) 삭제. (-tc 옵션)
또한, 삭제된 추적파일 리스트를 cleanup 수행 후 출력.
python hanacleaner.py -k HANACLEANER_KEY -tc 42 -td true
7일 이상 오래된 추적파일 삭제, backup.log/backint.log 도 포함.
추적 파일 중, indexserver 서버의 모든 trace 파일은 삭제에서 제외.
마지막으로 삭제된 백업 항목을 cleanup 수행 후 출력.
python hanacleaner.py -k HANACLEANER_KEY -tf 7 -tb 7 -ti indexserver*.trc -td true
◼ -tcb : true 설정시, 추적파일 삭제 전, .gz 파일로 아카이빙 / -tc, -tb, -te 옵션과 함께 사용
◼ -tbd : 추적파일 아카이빙 경로
◼ -tmo : 추적파일 아카이빙 최대 수행 시간, 해당 시간 초과시 Time out 으로 작업 취소
/hana/backup/trace
경로로 이동.python hanacleaner.py -k HANACLEANER_KEY -tc 3 -tcb true -tbd /hana/backup/trace -td true
앞서 설명한 기능외에도 hanacleaner.py 스크립트를 사용하여 다음 정리 작업에 사용할 수 있다.
등등...
3. hanacleaner 작업 수행
으로 hanacleaner.py 스크립트에 대한 대략적인 사용방법과 명령어를 확인했다.
해당 명령어들을 기반으로 스크립트를 작성하여 Crontab 에 등록하는것으로 정리 작업을 자동화 할 수 있다.
아래는 간단한 시나리오로 정리 작업을 crontab 에 등록하는 예제이다.
/hana/backup/script/HANA_cleanup_script.sh
<SID>adm
계정으로 매일 오전 01:00:00 수행/hana/backup/script_log
시나리오 1,2,3,4,7 에 따라 hanacleaner.py 명령어를 구성한다.
python hanacleaner.py -k HANACLEANER_KEY -bd 7 -bb true -br true -tc 60 -tb 60 -te 60 -td true -ti *alert*.trc
◼ -bd 7 : 7일 이상 오래된 백업 카탈로그 삭제
◼ -bb true : 백업 카탈로그 삭제 시, 연관된 물리적 백업 파일도 같이 삭제
◼ -br true : 삭제된 백업 카탈로그 리스트 출력
◼ -tc 60 : 60일 이상 오래된 추적파일 삭제
◼ -tb 60 : 60일 이상 오래된 backup.log / backint.log 삭제
◼ -te 60 : 60일 이상 오래된 expensive statement 추적 파일 삭제
◼ -td true : 삭제된 추적 파일 리스트 출력
◼ -ti *alert*.trc
: 추적 파일 중, *alert*.trc
조건의 추적 파일은 삭제 대상에서 제외
시나리오 5 에 따라 삭제 작업 스크립트를 생성한다.
✅ <SID>adm
계정으로 삭제 작업 스크립트 생성
-> vi /hana/backup/script/HANA_cleanup_script.sh
-> hanacleaner 명령어 입력 및 저장
#! /bin/bash
source #HOME/.bashrc
python hanacleaner.py -k HANACLEANER_KEY -bd 7 -bb true -br true -tc 60 -tb 60 -te 60 -td true -ti *alert*.trc
스크립트 상단의
#! /bin/bash
,source #HOME/.bashrc
구문은 스크립트 수행의 환경(environment) 를 맞춰주기 위한 구문이다.
hanacleaner.py 스크립트는<SID>adm
으로 수행되는 것을 가정하기에 해당 구문을 넣어줌으로써 수행 환경을 맞춰준다.여기서는
<sid>adm
계정의 쉘스크립트가 bash 라는 가정하에 bash 로 환경을 설정했다.
시나리오 6,7 에 따라 4-2 스크립트를 crontab 에 등록한다.
✅ <SID>adm
계정으로 crontab 등록 수행
-> crontab -e
-> 0 1 * * * /hana/backup/script/HANA_cleanup_script.sh >> /hana/backup/script_log/cleanup_log_$(date +\%Y\%m\%d).log 2>&1
추가 및 저장