본문 바로가기

MSSQL/T-SQL

DBA의 임무 - 백업확인

안녕하세요.
이승연 입니다.

얼머전에 sqler 에 주언형님이 DBA가 해야 할 일에 대해 좋은 글을 올려주셨습니다.
아래와 같습니다.
  1. 매일 작업 (자동화 필수!)
    • 백업성공 체크 (로컬백업, 테이프백업)
    • SQL Agent Job 수행 성공 체크
    • 디스크 여유공간 (시스템 드라이브, 데이터, 로그, tempdb, 백업디스크) 체크
    • Database의 Data File 및 Transaction Log File 여유공간 체크
    • SQL Server error logs, 윈도우 이벤트 로그 체크
    • DBCC (VLF 확인) 체크
    • JOB (업무적인 관점 - 예 : 일괄적용, 특정값 적용) 체크
    • JOB (기술적인 관점 - 예 : 로그전달, 미러링, 클러스터링) 체크
    • 오래 동작하는 쿼리 체크
    • 매일매일 SQLER, SQLMVP 사이트 새로운 글 체크 (이것도 자동 ㅋㅋ)
  2. 주간 작업
    • 성능 모니터링 로그 베이스라인 정보 업데이트
    • 최근 wait 정보 살펴보기
    • 인덱스 및 통계 유지관리 작업
    • 디스크 사용 증가율 기록
    • 서버 환경 설정 변경 감사 (정책기반)
  3. 월간 작업
    • 재난 복구 상황 관련 문서 업데이트
    • 서비스팩/핫픽스 업데이트 계획 검토
    • 용량 계획 (디스크 사용경향과 검토)

이 18가지 중에 1번재로 '백업성공 체크' T-SQL을 올려주셨어요. (아래 스크린샷을 참고)


해서 윗 T-SQL을 기초로 해서 살짝 바꾸어 보았습니다.(아래 스크린샷 참고)

해당 DBMS의 전체 DB이름과 어떤 DB가 백업되고 있는지, 그 DB는 언제 만들어졌는지, 백업된 사이즈는 어떻게 되는지, 백업은 얼마나 걸렸는지에 대해서 볼 수 있습니다. 해당 스샷은 백업을 한번도 안적없는 로컬컴퓨터에서 실행한 모습입니다.
SELECT 
	CASE WHEN finishDate IS NOT NULL THEN '백업완료' ELSE '미백업' END AS [백업상태]
,	B.[NAME] AS [데이터베이스 이름]
,	A.[NAME] AS [백업파일 이름]
,	B.recovery_model_desc AS [데이터베이스 복구모델]
,	A.timesec AS [백업실행시 걸린 시간(초)]
,	B.create_date AS [데이터베이스 생성일]
,	A.finishDate AS [백업날짜]
,	A.backupsize AS [백업파일크기]
FROM (
	SELECT 
		NAME -- 백업파일이름
	,	database_name -- 백업대상 데이터베이스
	,	USER_NAME -- 백업작업을 실행한 사용자
	,	CONVERT(CHAR(10), backup_finish_date, 120) AS finishDate -- 백업된날짜
	,	DATEDIFF(ss,backup_start_date, backup_finish_date) AS timesec -- 백업실행시간
	,	REPLACE(CONVERT(VARCHAR, CONVERT(MONEY, ROUND(backup_size / 1024, 0)), 1), '.00', '') + 'KB' AS backupsize -- 백업사이즈
	FROM msdb.dbo.backupset WITH(NOLOCK)
	WHERE TYPE = 'D' AND backup_finish_date > CONVERT(CHAR(10), GETDATE(), 120)
) AS A RIGHT JOIN (
	SELECT
		NAME -- DBMS내에 존재하는 DB들
	,	create_date -- DB생성일
	,	recovery_model_desc -- DB복구모델
	FROM MASTER.sys.databases
	WHERE NAME NOT IN ('model', 'tempdb')
) AS B
ON A.database_name = B.NAME