이 글에선 트랜잭션 로그를 자동으로 백업하는 방법에 대해 작성한다. 트랜잭션 로그 백업은 데이터베이스가 먼저 백업되어 있어야 한다. 데이터베이스 백업 자동화를 구현하기 전이라면 아래의 글부터 읽고 오는 걸 추천한다.
1. 트랜잭션 로그
mssql에서 트랜잭션 로그는 데이터베이스의 모든 변경사항을 기록하는 파일을 의미한다. 테이블에 데이터를 추가하거나 삭제하거나 변경하면 모든 게 트랜잭션 로그에 기록된다. 디스크에 ldf 확장자로 저장되는 파일이다.
트랜잭션 로그 백업이 필요한 이유는 전체 데이터베이스가 백업되고 그 다음 백업이 이루어지기까지의 공백을 커버하기 위해서다.
전체 데이터베이스는 용량이 크고 백업을 반복할 때마다 기존 용량 + 추가된 용량 만큼의 파일을 백업하기 때문에 잦은 빈도로 백업하기가 어렵다.
하지만 트랜잭션 로그는 잦은 빈도로 백업하기 적합하다. 트랜잭션 로그의 경우 백업을 하면서 기존 로그 정보를 truncate 해준다. 그래서 그 다음 백업 시점엔 백업 이후 발생한 로그 데이터에 대해서만 추가로 백업 한다.
글로만 봐선 이해하기 어려울 수도 있는데 직접 보면 어렵지 않다.
2. 유지 관리 계획 마법사
유지 관리 계획 마법사를 켠다.
계획 이름을 작성하고 다음을 누른다.
데이터베이스 백업(트랜잭션 로그) 작업을 선택하고 다음을 누른다.
다음을 이어서 누른다.
3. 트랜잭션 로그 백업 설정
트랜잭션 로그를 백업할 데이터를 선택하고 다음으로 넘어간다.
보고서 쓰기는 체크하는 걸 추천한다.
설정을 마친다.
유지 관리 계획 마법사가 성공하는 걸 확인한다.
3. 스캐줄 설정
생성한 유지 관리 계획을 선택하고 달력 모양 아이콘을 누른다.
반복적으로 실행할 스캐줄을 세팅한다. 트랜잭션 로그의 경우 데이터베이스 전체 백업과 달리 잦은 빈도로 백업하기 좋다. 환경 마다 차이가 크기 때문에 정답은 없지만 하루에도 여러 번 씩 실행하기도 한다.
4. 트랜잭션 로그 백업 특징
위에서도 언급했지만 트랜잭션 로그는 백업한 뒤에 백업한 내용은 truncate 하기 때문에 그 다음 백업에선 새롭게 쓰여진 데이터만 백업한다.
아래 이미지는 트랜잭션 로그 백업을 연속으로 두 번 실행한 후에 백업 파일(trn)이다. 보면 첫번째 백업엔 현재 쌓인 데이터를 모두 백업해서 용량이 1.3G 쯤 되지만 그 다음엔 156k에 그치는 걸 볼 수 있다.
그럼 실제 ldf 파일의 디스크 용량도 비워질까? 그렇진 않다. ldf 용량은 디스크에 그대로 남는다. 하지만 이미 할당된 용량이 그대로 남아 있을 뿐 그 이후 발생하는 트랜잭션 로그에 대해서는 이미 할당한 디스크 안에서 사용하게 된다.
즉 주기적으로 트랜잭션 로그를 백업하는 게 디스크 용량 관리 관점에서도 좋은 선택이 될 수 있다.