[HANA SAP]쉘 스크립트로 DB백업

워니·2024년 10월 10일
0

신규DB로 이전하면 백업 조건을 바꾸기 위해, 기존 백업 쉘스크립트를 분석해보았다


backup_config.sh

SAP HANA데이터베이스의 백업을 위해 설정된 여러 매개변수 정의

SID=SAP시스템 식별자(System ID)

INSTANCE=SAP 인스턴스 번호
=>이 값에 따라 해당 SAP인스턴스에서 작업이 이루어진다

HDBSQL_EXE=/usr/sap/${SID}/HDB${INSTANCE}/exe/hdbsql
=> HANA 데이터베이스의 SQL클라이언트 hdbsql의 경로를 지정한 것이다. 이 클라이언트는 HANA데이터베이스에 SQL명령을 보내는데 사용된다

USER=SYSTEM
PASSWORD=패스워드

SUFFIX=(백틱)date +%Y%m%d%H%M%S(백틱)
=> 백업 파일의 이름에 붙일 타입스탬프를 생성한다. 현재 날짜와 시간을 "년월일시분초"형식으로 반환한다.

BACKUP_FILE_RETENTION=8
=> 백업 파일을 유지할 기간을 지정-> 백업 파일을 8일간 유지하겠다
(백업 파일 : HANA 데이터베이스 서버의 로컬 디스크에 저장된 백업 파일)

CATALOG_RETENTION=2
=> 백업 카탈로그의 유지 기간을 정의-> 2일간 백업 카탈로그에 해당 데이터가 저장됨
(백업 카탈로그 : SAP HANA데이터베이스 내부에 기록된 백업 관련 메타데이터. 어떤 백업이 언제 수행되었는지, 백업파일이 어디에 저장되었는지에 대한 정보를 저장함. 실제 백업 파일과는 별도로, 백업의 기록을 HANA시스템에 얼마나 유지할지를 결정하는 변수)

NAS_FILE_RETENTION=15
=> NAS에 저장된 백업파일을 15일간 유지하겠다

BACKUP_PATH=백업경로
=> 백업 파일을 저장할 경로


backup_SDD_FIDDERENCIAL.sh

SAP HANA데이터베이스의 차등 백업을 수행한 후, 그 백업파일을 NAS에 복사하고, 오래된 백업 파일을 자동으로 삭제.

BACKUP_DATABASE=데이터베이스명
=> 백업 대상 데이터베이스 설정

. ~/backup/backup_config.sh
=> backup_config.sh파일을 불러와 변수들을 사용할 수 있게 만듬

. ~/.SAP_HANA_환경설정_파일명.sh
=> SAP HANA환경설정파일을 불러옴. 이 파일은 SAP 관련 환경 변수들을 설정하는데 사용됨

# Run Backup

${HDBSQL_EXE} -i ${INSTANCE} -d SYSTEMDB -u ${USER} -p ${PASSWORD} "BACKUP DATA DIFFERENTIAL FOR ${BACKUP_DATABASE} USING FILE ('${SUFFIX}');"
=> 실제 SAP HANA 차등 백업을 실행하는부분
${HDBSQL_EXE} : hdbsql 실행 파일의 경로
-i ${INSTANCE} : 인스턴스 번호를 지정
-d SYSTEMDB : SYSTEMDB 데이터베이스를 대상으로 함
-u ${USER} -p ${PASSWORD} : 백업에 사용할 사용자와 비밀번호를 지정
BACKUP DATA DIFFERENTIAL FOR ${BACKUP_DATABASE} USING FILE ('${SUFFIX}'); : 데이터베이스에 대해 차등백업을 수행. 백업파일 이름에는 타임스탬프(SUFFIX)가 추가됨.

# last backup copy to nas

cp ${BACKUP_PATH}/DB_${BACKUP_DATABASE}/*${SUFFIX}* /NAS백업경로/${BACKUP_DATABASE}/
=> 백업 파일을 NAS로 복사함
cp ${BACKUP_PATH}/DB_${BACKUP_DATABASE}/*${SUFFIX}* : 로컬 백업 경로에서 타임스탬프({SUFFIX})가 포함된 파일을 찾는다
`/NAS백업경로/${BACKUP_DATABASE}/' : NAS에 백업 파일을 저장함

# old backup delete

find ${BACKUP_PATH}/DB_${BACKUP_DATABASE} -ctime +${BACKUP_FILE_RETENTION} -delete
=> 로컬 서버에서 저장된 오래된 백업 파일을 삭제
find ${BACKUP_PATH}/DB_${BACKUP_DATABASE} : 로컬디스크에서 백업파일이 저장된 경로
-ctime +${BACKUP_FILE_RETENTION} : 생성된지 ${BACKUP_FILE_RETENTION}일(설정에서 8일)이 넘은 파일을 찾음
-delete : 찾은 파일 삭제

# nas backup delete

find NAS백업파일경로/${BACKUP_DATABASE}/ -ctime +${NAS_FILE_RETENTION} -delete : NAS에 저장된 오래된 백업 파일 삭제
NAS백업파일경로/${BACKUP_DATABASE} : NAS에 저장된 백업파일 경로
-ctime +${NAS_FILE_RETENTION} : 생성된지 ${NAS_FILE_RETENTION}일(설정에서 15일)이 넘은 파일을 찾음
-delete : 찾은 파일 삭제


backup_SDD_FULL.sh

SAP HANA데이터베이스의 전체 백업을 수행하고, 백업 카탈로그에서 오래된 백업 기록을 삭제하며, 백업 파일을 NAS로 복사한 후, 로컬과 NAS에서 오래된 백업 파일을 자동으로 삭제하는 작업

BACKUP_DATABASE=데이터베이스명
=> 백업할 데이터베이스명 명시
. ~/backup/backup_config.sh . ~/.sapenv.sh
=> 백업 설정파일과 환경설정 파일을 불러옴

# FULL Backup

${HDBSQL_EXE} -i ${INSTANCE} -d SYSTEMDB -u ${USER} -p ${PASSWORD} "BACKUP DATA FOR ${BACKUP_DATABASE} USING FILE ('${SUFFIX}');"
=> SAP HANA데이터베이스의 전체 백업을 표시

# Old Backup Catalog & Log Backup Delete

LAST_BACKUPID=${HDBSQL_EXE} -i ${INSTANCE} -d SYSTEMDB -u ${USER} -p PASSWORD} "SELECT BACKUP_ID, SYS_START_TIME FROM SYS_DATABASES.M_BACKUP_CATALOG WHERE DATABASE_NAME = '${BACKUP_DATABASE}' AND ENTRY_TYPE_NAME = 'complete data backup' AND STATE_NAME = 'successful' ORDER BY SYS_START_TIME DESC" | grep -v BACKUP_ID | awk -F ',' '!x[$1]++ {print $1}' | awk "NR == {CATALOG_RETENTION}"
=> 최근 성공한 백업 중 오래된 백업의 ID를 찾기 위한 쿼리

SYS_DATABASES.M_BACKUP_CATALOG : HANA시스템의 백업 카탈로그 테이블에서 해당 데이터베이스의 기록 조회
ENTRY_TYPE_NAME = 'complete data backup' : 전체 데이터 백업(완전 백업)만 조회
STATE_NAME = 'successful' : 성공적으로 완료된 백업만 조회
LAST_BACKUPID : $CATALOG_RETENTION번째 백업ID를 가져오게 된다. 이는 이전에 설정된 카탈로그 보관 기간에 맞추어 몇 번째 백업까지 남길지를 결정하는 것

if ! [ "${LAST_BACKUPID}" == "" ]; then ${HDBSQL_EXE} -i ${INSTANCE} -d ${BACKUP_DATABASE} -u ${USER} -p ${PASSWORD} "BACKUP CATALOG DELETE ALL BEFORE BACKUP_ID ${LAST_BACKUPID} COMPLETE;"; fi
=> BACKUP_ID가 존재할 경우, 해당 ID 이전의 모든 백업 카탈로그 항목을 삭제(오래된 백업 기록을 정리)

# last backup copy to nas

cp ${BACKUP_PATH}/DB_${BACKUP_DATABASE}/*${SUFFIX}* NAS백업경로/${BACKUP_DATABASE}/
=> 로컬 디스크에 저장된 백업 파일을 NAS로 복사
${BACKUP_PATH}/DB_${BACKUP_DATABASE}/*${SUFFIX}* : 로컬 경로에서 타임스탬프가 포함된 파일들을 찾음
NAS백업경로/${BACKUP_DATABASE}/ : NAS경로로 복사함

# old backup delete

find ${BACKUP_PATH}/DB_${BACKUP_DATABASE} -ctime +${BACKUP_FILE_RETENTION} -delete
=> 로컬 서버의 오래된 백업 파일 삭제

# nas backup delete

find NAS백업경로/${BACKUP_DATABASE}/ -ctime +${NAS_FILE_RETENTION} -delete
=> NAS에 저장된 오래된 백업파일 삭제

profile
매일, 조금씩 나아가는중

0개의 댓글