NetBackup NBDB가 내려갔을 때 - 트랜잭션 로그 손상 복구 절차

이 글은 운영 중인 마스터 서버의 데이터베이스를 직접 건드리는 절차입니다. 진행 전 반드시 카탈로그 백업 상태를 확인하고, 가능하면 Veritas 기술지원과 함께 진행하세요. 절차 자체는 Veritas 공식 문서를 기준으로 정리했습니다.

Problem

NBDB 트랜잭션 로그(/usr/openv/db/data/NBDB.log)가 손상되거나, 너무 커지거나, 디스크 공간이 부족해지면 EMM 데이터베이스가 내려갑니다.

증상 / 에러 메시지

# /usr/openv/db/bin/nbdb_ping
Database [NBDB] is not available.

관리 콘솔이나 CLI에서 실행하는 일부 작업이 에러를 반환하고, Problems 리포트에는 다음과 같은 줄이 남습니다.

NBEMM returned an extended error status: Database server is down (4005006)

가장 쓸모 있는 메시지는 /usr/openv/db/log/server.log에 있습니다.

Error: Cannot open transaction log file -- Can't use log file
"/usr/openv/db/data/NBDB.log" since it is shorter than expected

시스템 로그도 함께 봅니다. 예를 들어 HP-UX에서 볼륨 공간이 부족한 경우:

syslog: V-111-1056 [DA_Thread_Pool::CheckNBDBDiskFull] Not enough disk space on
file system. Shutting down NetBackup database (NBDB).

Cause

NetBackup 하위에서 동작하는 ASA(Sybase) 데이터베이스의 트랜잭션 로그가 손상되거나 정상 동작 범위를 넘어 커질 수 있습니다. 예를 들어 파일 크기를 2GB로 제한하는 파일 시스템에서는 로그가 2GB에 도달하는 순간 잘려나가면서 손상됩니다. 트랜잭션 로그는 온라인 카탈로그 백업 시 truncate되는데, 카탈로그 백업이 돌지 않았다면 로그가 계속 커집니다.

트랜잭션 로그 문제로 ASA DB가 실패하면 다음 증상이 함께 나타날 수 있습니다.

  • 카탈로그 백업과 일반 백업이 hang 상태로 멈춤
  • 운영자가 큐에 걸린 작업을 취소할 수 없음
  • NetBackup을 재시작해도 EMM 데이터베이스가 돌아오지 않음

Solution — 트랜잭션 로그 재생성

1. NetBackup이 떠 있다면 중지합니다.

/usr/openv/netbackup/bin/goodies/netbackup stop

2. 모든 NetBackup 프로세스가 종료됐는지 확인하고, 남은 것은 수동으로 종료합니다.

/usr/openv/netbackup/bin/bpps -a

3. NBDB와 BMRDB를 auto_start 대상에서 제거합니다.

/usr/openv/db/bin/nbdb_admin -auto_start NONE

이때 databases.conf에서 어떤 DB가 제거됐는지 꼭 메모해두세요. 예:

Successfully removed NBDB from databases.conf
Successfully removed BMRDB from databases.conf
Successfully removed NBAZDB from databases.conf

4. ASA 데이터베이스 엔진을 시작합니다.

/usr/openv/db/bin/nbdbms_start_server

5. 셸에 필요한 환경 변수를 로드합니다.

. /usr/openv/db/vxdbms_env.sh
줄 맨 앞의 마침표(.)를 빠뜨리지 마세요. csh를 쓴다면 source /usr/openv/db/vxdbms_env.csh입니다.

라이브러리 경로가 비어 있는 경우 — 플랫폼별로 변수 이름이 다릅니다.
  • HP-UX: SHLIB_PATH
  • Solaris / SLES / RHEL: LD_LIBRARY_PATH
  • AIX: LIBPATH
LD_LIBRARY_PATH=/usr/openv/db/lib:/usr/openv/db/bin
export LD_LIBRARY_PATH
echo $LD_LIBRARY_PATH   # 설정 확인
NetBackup 경로가 /usr/openv가 아니라면 위 경로를 맞게 수정하세요. 이 현상은 vxdbms_env.sh를 sh 셸에서 실행할 때 나타나며, csh 환경이나 bash에서는 문제가 되지 않습니다.

이 단계가 정상적으로 끝나지 않으면 다음 단계로 넘어가지 말고 기술지원에 문의하세요. 경로 변수가 설정되지 않은 상태에서는 데이터베이스를 제대로 복구할 수 없습니다.

6. 앞으로 트랜잭션 로그가 손상되거나 비대해지는 것을 막기 위해, Sybase 체크포인트마다 로그를 truncate하도록 설정합니다.

cd /usr/openv/var/global
vi server.conf
# 파일 끝의 "-ud" 뒤에 -m 을 추가하고 저장

7. NBDB가 있는 디렉터리로 이동합니다.

cd /usr/openv/db/data

8. 손상된 트랜잭션 로그를 제거하거나 이름을 바꿉니다.

mv NBDB.log   NBDB.log.bad
mv NBAZDB.log NBAZDB.log.bad

# BMR을 사용한다면
mv BMRDB.log  BMRDB.log.bad

9. 데이터베이스 복구를 강제 실행합니다. (NBDB.log는 10단계 전까지 생성되지 않습니다.)

/usr/openv/db/bin/dbeng11 -f /usr/openv/db/data/NBDB.db

# BMR을 사용한다면
/usr/openv/db/bin/dbeng11 -f /usr/openv/db/data/BMRDB.db
버전을 꼭 확인하세요. dbengXX의 XX는 NetBackup 버전마다 다릅니다. 설치된 실제 바이너리를 확인하고 그 버전으로 실행해야 합니다.

10. 데이터베이스를 중지합니다.

/usr/openv/db/bin/nbdbms_start_server -stop

11. 3단계에서 메모해둔 DB들을 auto_start에 다시 추가합니다.

/usr/openv/db/bin/nbdb_admin -auto_start NBDB
/usr/openv/db/bin/nbdb_admin -auto_start NBAZDB

# BMR을 사용한다면
/usr/openv/db/bin/nbdb_admin -auto_start BMRDB

12. 데이터베이스를 시작합니다.

/usr/openv/db/bin/nbdbms_start_server

13. 정상 동작하는지 확인합니다.

/usr/openv/db/bin/nbdb_ping
Database [NBDB] is alive and well on server [master].

14. 나머지 NetBackup 서비스를 기동합니다.

/usr/openv/netbackup/bin/goodies/netbackup start

참고 문서