SAP HANA DB hanacleaner 를 사용한 자동 파일 정리__SAP HANA Automatic Housekeeping Using hanacleaner

감귤은탱귤·2025년 4월 29일
0
post-thumbnail

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 도구는 오픈소스이며, 적절한 구현과 이 도구를 사용하면서 발생하는 문제에 대한 책임은 모두 사용자 본인에게 있다고 고지하니, 확인 후 사용하기 바란다.



1. 정리 작업(HouseKeeping) 대상

hanacleaner 를 사용할때, 정리 작업의 대상이 될 수 있는 파일은 다음과 같다.

  1. Backup (Data Backup, Log backup)
  2. Backup Catalog
  3. Trace File

1-1. Backup

정리 대상에는 Data Backup, Log Backup 모두 대상이 된다.

여기서 Backup (Data, Log) 은 물리적으로 OS 에 떨어진 백업 파일을 뜻한다.

SAP HANA DB Backup 과 관련된 자세한 설명은 다음 포스트를 참조하기 바란다.

1-2. Backup Catalog

백업 카탈로그는 백업의 대한 기록 정보이다.
모든 백업 수행에 대해서 자세한 기록을 담고 있으며, 간단하게 설명하자면 HANA DB 백업 수행에 대한 로그 라고 이해하면 된다.

특정 백업 파일을 사용한 복구에는 백업 카탈로그가 없어도 되지만,
Time-base Recovry 를 위해서는 반드시 백업 카탈로그가 필요하다.

백업 카탈로그에는 대표적으로 다음 정보들이 담겨있다.

◾ 생성된 백업
◾ 백업 시작 및 완료 시간
◾ 백업 상태
◾ 백업된 볼륨
◾ 백업 크기
◾ 백업 ID

백업 카탈로그는 Monitoring View SYS.M_BACKUP_CATALOG, SYS.M_BACKUP_CATALOG_FILES 를 통해서 확인할 수 있다.

1-3. Trace File (=Diagnosis File)

HANA DB 내 각 서비스에 대한 추적 파일(Trace File)이다.
기본적으로 .trc / .stat / .log 등의 확장자를 가지며, DB 의 서비스의 상태에 대한 로깅파일이다.

추적 레벨에 따라 기록되는 정보가 더 자세해지며, 기본 추적 레벨값은 0 이다.
(추적 레벨이 0 이어도 오류에 대한 정보는 기록된다.)

추적 파일은 추적 파일의 최대 크기를 지정하는 파라미터값 (maxalertfilesize) 을 초과하면, 자동으로 압축(.gz, .2gz, .zld) 된다.

추적 파일이 일정 크기를 넘으면 자동으로 압축되지만, 이러한 압축 파일도 계속 쌓이면 많은 디스크 공간을 차지하게 되므로 주기적인 정리가 필요하다.



2. hanacleaner 설치 및 준비

2-1. hanacleaner.py 스크립트 업로드

hanacleaner Github 에서, hanacleaner.py 스크립트를 다운받아 서버에 업로드하면 설치는 완료된다. (권한은 <sid>adm, 755 로 설정)

스크립트 업로드 경로는 관리의 용이성을 위해, 아래 경로에 업로드하는 것을 추천한다.
/usr/sap/<SID>/HDB<Instance number>/exe/python_support/.

hanacleaner Github : https://github.com/chriselswede/hanacleaner

2-2. hanacleaner 전용 DB 계정 생성

해당 사항은 선택이며, DB 계정 생성이 부담스럽다면 SYSTEM 계정이나 기존 ADMIN 계정을 사용해도 된다.

hanacleaner 의 정리 작업을 관리할 DB 계정을 신규로 생성하며, 필요한 권한을 부여한다.

hanacleaner 의 여러 정리 작업의 사용유무에 따라 필요권한은 조금 달라지는데, 아래 굵은 표시 권한은 있어야, 백업 파일, 백업 카탈로그, 추적파일 정리가 가능하다.

  • DB User : HANACLEANER (예시이며, 원하는 이름으로 생성하면 된다.)
  • 필요 권한
    • Object Privileges
      • HOST_OBJECT_LOCK_STATISTICS_BASE (_SYS_STATISTICS)
      • STATISTICS_ALERTS_BASE (_SYS_STATISTICS)
    • SYSTEM Privileges
      • AUDIT ADMIN
      • AUDIT OPERATOR
      • BACKUP ADMIN
      • CATALOG READ
      • LOG ADMIN
      • MONITOR ADMIN
      • RESOURCE ADMIN
      • TRACE ADMIN

간단하게, 다음 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;

2-3. hdbuserstore KEY 생성

신규 생성된 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 값을 그대로 사용하면 된다.



3. hanacleaner 작업 수행

여기서는 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 등등)

3-1. Backup Catalog cleanup

✅ 주요 옵션

◼ -be : 백업 카탈로그 최소 보관 갯수
◼ -bd : 백업 카탈로그 최소 보관 일수(day)
◼ -bb : true 설정 시, 백업 카탈로그가 삭제될때, 해당 백업 카탈로그와 연관된 물리적 백업 파일도 같이 삭제
◼ -bo : true 설정 시, cleanup 전/후 백업 카탈로그 리스트 출력
◼ -br : true 설정 시, cleanup 후, 삭제된 백업 카탈로그 출력

여기서 백업 파일은 Complete Data Backup (Full Backup) 과 Data Snapshot 모두 해당된다.
즉, 해당 옵션 설정 시, Data Snapshot 도 생각하여 옵션 값을 조정해야 한다.

🧾 예시

  1. 31일 이상 오래된 백업 카탈로그(❗ 물리적 백업 파일 X) 를 삭제하고, 최근 5개의 백업 파일(❗ 물리적 백업 파일 O) 만 보관하고 그 이후 백업은 모두 삭제.
    또한, 삭제된 백업 카탈로그 리스트를 cleanup 수행 후 출력.
    python hanacleaner.py -k HANACLEANER_KEY -bd 31 -be 5 -br true

  2. 7일 이상 오래된 백업 카탈로그와 백업 파일을 삭제. (즉, 백업 카탈로그와 백업 파일을 1주일치만 보관)
    또한, 삭제된 백업 파일 리스트를 cleanup 수행 후 출력.
    python hanacleaner.py -k HANACLEANER_KEY -bd 7 -bb true -br true


3-2. Trace file cleanup

✅ 주요 옵션

◼ -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 후, 삭제된 추적파일 리스트 출력

🧾 예시

  1. 42일 이상 오래된 추적파일(trace) 삭제. (-tc 옵션)
    또한, 삭제된 추적파일 리스트를 cleanup 수행 후 출력.
    python hanacleaner.py -k HANACLEANER_KEY -tc 42 -td true

  2. 7일 이상 오래된 추적파일 삭제, backup.log/backint.log 도 포함.
    추적 파일 중, indexserver 서버의 모든 trace 파일은 삭제에서 제외.
    마지막으로 삭제된 백업 항목을 cleanup 수행 후 출력.
    python hanacleaner.py -k HANACLEANER_KEY -tf 7 -tb 7 -ti indexserver*.trc -td true


3-3. Trace file Archiving

✅ 주요 옵션

◼ -tcb : true 설정시, 추적파일 삭제 전, .gz 파일로 아카이빙 / -tc, -tb, -te 옵션과 함께 사용
◼ -tbd : 추적파일 아카이빙 경로
◼ -tmo : 추적파일 아카이빙 최대 수행 시간, 해당 시간 초과시 Time out 으로 작업 취소

🧾 예시

  1. 3일 이상 오래된 추적파일을 삭제 전, 아카이빙(.gz) 하여 /hana/backup/trace 경로로 이동.
    이후, 삭제 대상(3일 이상된) 추적 파일 삭제.
    또한, 삭제된 추적파일 리스트를 cleanup 수행 후 출력.
    python hanacleaner.py -k HANACLEANER_KEY -tc 3 -tcb true -tbd /hana/backup/trace -td true

3-4. 기타 기능

앞서 설명한 기능외에도 hanacleaner.py 스크립트를 사용하여 다음 정리 작업에 사용할 수 있다.

  • Audit Log 정리
  • SAP HANA Alert 정리
  • Free Log Segments 정리
  • Disk Fragmentation 정리
  • hanacleaner Log 정리
  • Fullsystemdump 정리
  • Unknown Object Lock Entries 정리
  • Table Compression
  • Data Statistics Refresh

등등...



4. 자동 정리작업 수행 및 로깅

3. hanacleaner 작업 수행 으로 hanacleaner.py 스크립트에 대한 대략적인 사용방법과 명령어를 확인했다.

해당 명령어들을 기반으로 스크립트를 작성하여 Crontab 에 등록하는것으로 정리 작업을 자동화 할 수 있다.

아래는 간단한 시나리오로 정리 작업을 crontab 에 등록하는 예제이다.


4-1. 시나리오 정의

  1. HANA DB 백업 카탈로그와 백업 파일은 7일 보관.
  2. 추적파일은 60일만 보관, 추적파일은 별도로 아카이빙은 하지 않음.
  3. 그러나, 추적파일 중에 alert 추적파일은 삭제 대상에서 제외
  4. hanacleaner.py 스크립트의 DB 연결은 HANACLEANER_KEY 키 사용
  5. 삭제 작업 스크립트의 경로는 /hana/backup/script/HANA_cleanup_script.sh
  6. 삭제 작업은 <SID>adm 계정으로 매일 오전 01:00:00 수행
  7. 삭제 작업 수행 후, 삭제 리스트를 출력하고, 해당 출력물을 로그 형태로 별도 저장, 로그 경로는 /hana/backup/script_log

4-2. 삭제 작업 스크립트 작성

시나리오 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 로 환경을 설정했다.


4-3. Crontab 에 스크립트 등록

시나리오 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 추가 및 저장



profile
SAP BC (2019 ~ )

0개의 댓글