일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 트래커
- 국정화
- 트레커
- Lock
- 신장사거리
- 토렌트
- 국정화 반대
- 재테크
- 하남
- MSsql
- 박근혜 탄핵
- .net
- 초대장
- db
- 하남맛집
- 파리바게트
- 내장함수
- 동적쿼리
- 티스토리
- Google Map
- 술안주
- 파리바게트 청라 SK점
- 맛집
- 최신트래커
- C#
- 카카오헤어샵
- javascript
- 함수
- 카카오가 찾아준 헤어샵
- jquery
- Today
- Total
featur
[MSSQL] 트랜잭션 로그 백업(Transaction Log Backup) 본문
[MSSQL] 트랜잭션 로그 백업(Transaction Log Backup)
로그 백업을 만들려면 최소한 하나의 전체 백업을 만들어야 합니다. 그렇게 해야 로그가 백업 중일 때를 제외하고 언제든지 트랜잭션 로그를 백업할 수 있습니다.
로그 백업을 자주 수행하여 작업 손실 가능성을 최소화하고 트랜잭션 로그를 잘라내는 것이 좋습니다.
데이터베이스 관리자는 보통 주기적(예: 매주)으로 전체 데이터베이스 백업을 만들고, 상황에 따라 더 짧은 간격(예: 매일)으로 차등 데이터베이스 백업을 만듭니다. 또한 데이터베이스 백업과 상관없이 더 자주(예: 매 10분) 트랜잭션 로그를 백업합니다. 지정된 백업 유형의 최적 간격은 데이터의 중요도, 데이터베이스의 크기 및 서버의 작업과 같은 요소에 따라 달라집니다.
트랜잭션 로그 백업 로그 체인 시퀀스는 데이터 백업과 독립되어 있습니다. 예를 들어 이벤트가 다음과 같은 순서로 발생한다고 가정합니다.
Time | 이벤트 |
---|---|
8:00 A.M. | 데이터베이스를 백업합니다. |
정오 | 트랜잭션 로그를 백업합니다. |
오후 4:00 | 트랜잭션 로그를 백업합니다. |
오후 6:00 | 데이터베이스를 백업합니다. |
8:00 P.M. | 트랜잭션 로그를 백업합니다. |
저녁 8시에 만든 트랜잭션 로그 백업에는 오후 4시부터 저녁 8시까지 기록한 트랜잭션 로그 레코드가 포함됩니다. 이 시간대에는 전체 데이터베이스 백업을 만든 오후 6시도 포함됩니다. 트랜잭션 로그 백업의 시퀀스는 오전 8시에 만든 첫째 전체 데이터베이스 백업부터 저녁 8시에 만든 마지막 트랜잭션 로그 백업까지 이어집니다.
권장사항
트랜잭션 로그가 손상되면 최근의 유효 백업 이후에 수행한 작업이 손실됩니다. 따라서 내결함성이 있는 저장소에 로그 파일을 보관하는 것이 좋습니다.
데이터베이스가 손상되었거나 데이터베이스를 복원하려는 경우에는 데이터베이스를 현재의 지정 시간으로 복원할 수 있도록 비상 로그 백업을 만드는 것이 좋습니다.
기본적으로 백업 작업을 성공적으로 수행할 때마다 SQL Server 오류 로그와 시스템 이벤트 로그에 항목이 추가됩니다. 로그를 자주 백업하는 경우 이러한 성공 메시지는 바로 누적되므로 엄청난 오류 로그가 쌓여 다른 메시지를 찾기 힘들 수 있습니다. 이 경우 스크립트가 이러한 로그 항목에 종속되지 않을 경우 추적 플래그 3226을 사용하여 이러한 항목을 표시하지 않을 수 있습니다.
트랜잭션 로그 백업을 적용하려면 다음 요구 사항을 충족해야 합니다.
복원 순서를 위한 충분한 로그 백업: 복원 순서를 완료하려면 백업된 로그 레코드가 충분히 있어야 합니다. 복원 시퀀스를 시작하려면 필요한 로그 백업을 반드시 확보해야 합니다.
올바른 복원 순서: 바로 이전의 전체 데이터베이스 백업 또는 차등 데이터베이스 백업을 먼저 복원해야 합니다. 그런 후 전체 또는 차등 데이터베이스 백업 후에 생성된 모든 트랜잭션 로그를 시간순으로 복원해야 합니다. 이 로그 체인의 트랜잭션 로그 백업이 손실되거나 손상된 경우 손실된 트랜잭션 로그 이전의 트랜잭션 로그만 복원할 수 있습니다.
데이터베이스가 아직 복구되지 않음: 마지막 트랜잭션 로그가 적용될 때까지 데이터베이스를 복구할 수 없습니다. 로그 체인이 끝나기 이전의 중간 트랜잭션 로그 백업 중 하나를 복원한 후 데이터베이스를 복구할 경우 해당 시점 이후의 데이터베이스를 복원하려면 전체 데이터베이스 백업부터 시작하여 전체 복원 시퀀스를 다시 시작해야 합니다.
팁 최선의 방법은 모든 로그 백업을 복원하는 것입니다(RESTORE LOG database_name WITH NORECOVERY). 그런 후 마지막 로그 백업을 복원한 후 데이터베이스를 별도의 작업으로 복구합니다(RESTORE DATABASE database_name WITH RECOVERY).
복원 작업을 완료하고 데이터베이스를 복구할 때 완료되지 않은 트랜잭션은 모두 롤백되는데 이것을 실행 취소 단계라고 합니다. 롤백은 데이터베이스의 무결성을 복원하는 데 필요합니다. 롤백 후 데이터베이스는 온라인 상태가 되고 트랜잭션 로그 백업이 더 이상 데이터베이스에 적용되지 않습니다.
예를 들어 일련의 트랜잭션 로그 백업은 장기 실행 트랜잭션을 포함합니다. 트랜잭션의 시작은 첫 번째 트랜잭션 로그 백업에 기록되지만 트랜잭션의 끝은 두 번째 트랜잭션 로그 백업에 기록됩니다. 첫 번째 트랜잭션 로그 백업에는 커밋 또는 롤백 작업의 기록이 없습니다. 첫 번째 트랜잭션 로그 백업이 적용될 때 복구 작업이 실행되면 장기 실행 트랜잭션은 완료되지 않은 것으로 취급되고 해당 트랜잭션에 대한 첫 번째 트랜잭션 로그 백업에 기록된 데이터 수정이 롤백됩니다. SQL Server 에서는 이 시점 이후에 두 번째 트랜잭션 로그 백업을 적용할 수 없습니다.
참고: 경우에 따라서는 로그 복원 중에 파일을 명시적으로 추가할 수 있습니다.
예를 들어 다음과 같은 순서의 이벤트가 발생한다고 가정합니다.
Time | 이벤트 |
---|---|
8:00 A.M. | 데이터베이스를 백업하여 전체 데이터베이스 백업을 만듭니다. |
정오 | 트랜잭션 로그를 백업합니다. |
오후 4:00 | 트랜잭션 로그를 백업합니다. |
오후 6:00 | 데이터베이스를 백업하여 전체 데이터베이스 백업을 만듭니다. |
8:00 P.M. | 트랜잭션 로그를 백업합니다. |
9:45 P.M. | 오류가 발생합니다. |
데이터베이스를 오류 발생 시점인 오후 9:45의 상태로 복원하려면 다음 대체 절차 중 하나를 사용하십시오.
대체 1: 가장 최근의 전체 데이터베이스 백업을 사용하여 데이터베이스 복원
오류 발생 시점에 활성화되어 있던 트랜잭션 로그의 비상 로그 백업을 만듭니다.
8:00 A.M.의 전체 데이터베이스 백업을 시간이 오래 걸립니다. 대신 가장 최근의 6:00 P.M. 전체 데이터베이스 백업을 복원한 다음 8:00 P.M. 로그 백업 및 비상 로그 백업을 적용합니다.
대체 2: 이전의 전체 데이터베이스 백업을 사용하여 데이터베이스 복원
참고: 이 대체 프로세스는 문제로 인해 6:00 P.M.의 전체 데이터베이스 백업을 사용할 수 없는 경우에 유용합니다. 시간이 오래 걸립니다. 6:00 P.M.의 전체 데이터베이스 백업에서 복원하는 것보다 시간이 오래 걸립니다.
오류 발생 시점에 활성화되어 있던 트랜잭션 로그의 비상 로그 백업을 만듭니다.
8:00 A.M.의 전체 데이터베이스 백업을 복원한 다음 4개의 트랜잭션 로그 백업을 순서대로 복원합니다. 이렇게 하면 완료된 모든 트랜잭션을 9:45 P.M.까지 롤포워드합니다.
이 대체 프로세스를 통해 일련의 전체 데이터베이스 백업에서 트랜잭션 로그 백업 체인을 유지함으로써 제공되는 중복 보안을 확인할 수 있습니다.
참고: 경우에 따라 트랜잭션 로그를 사용하여 데이터베이스를 지정 시간으로 복원할 수도 있습니다. 자세한 내용은 SQL Server 데이터베이스를 지정 시간으로 복원(전체 복구 모델)을 참조하세요.
Transaction Log Backup (로그 백업)
- BACKUP LOG [DATABASENAME] TO [BACKUPDEVICENAME]
1) 장애 시점까지의 DB 복구
⑤ 10월 10일 Transaction Log Backup
만약 10월 12일에 DB에 Fault가 발생했다고 가정하겠습니다.
Q : DB를 Fault 발생 시점으로 완전하게 복구할 수 있을까요?
A : Yes~! .ldf파일의 트랜잭션 로그만 손상되지 않았다면 가능합니다.
⑥ ①에서 백업받은 트랜잭션 로그를 Restore
2) 특정 시점까지의 장애복구 (STOPAT)
이러한 경우에도 복원이 가능할까요?
- RESTORE LOG [DATABASENAME]
- FROM [BACKUPDEVICENAME]
- WITH FILE = 3, STOPAT = '2009-10-15 14:15:23' , RECOVERY
- DBCC SQLPERF(LOGSPACE)
- BACKUP LOG [DATABASENAME] WITH NO_LOG
- SP_HELPDB [DATABASENAME]
- DBCC SHRINKFILE([LOGFILENAME], 5, TRUNCATEONLY)
'개발 > MSSQL' 카테고리의 다른 글
[MSSQL] 산술 오버플로 오류가 발생했습니다. (0) | 2017.04.27 |
---|---|
[MSSQL] 계층형 + 페이징 게시판 (0) | 2017.02.02 |
[MSSQL] 차등백업, 복구 방법 (0) | 2016.12.21 |
[MSSQL] 전체 백업 (FULL BACKUP) (0) | 2016.12.21 |
[MSSQL] 전체 데이터베이스 백업 (Full Database Backups) (0) | 2016.12.21 |