데이터베이스에 대한 단순 또는 전체 복구 모델?


38

전체 복구 모델을 사용해야하는시기와 데이터베이스에 간단한 복구 모델을 사용해야하는시기는 언제입니까?

기본값이기 때문에 항상 전체 복구 모델을 사용했지만 오늘이 오류가 발생했습니다.

SQL Server 용 Microsoft OLE DB 공급자 (0x80040E14) 'DATABASE NAME'데이터베이스의 트랜잭션 로그가 가득 찼습니다. 로그의 공간을 재사용 할 수없는 이유를 확인하려면 sys.databases의 log_reuse_wait_desc 열을 참조하십시오.

특정 데이터베이스는 실제로 내 서버에서 가장 작고 가장 비활성 인 데이터베이스 중 하나이므로 다른 데이터베이스가 아니라이 데이터베이스에서 로그가 가득 찬 방법을 모릅니다.

로그를 축소하고 데이터베이스에 다시 액세스 할 수 있도록하려면 다음 명령을 사용하여 복구 모델을 FULL에서 SIMPLE로 변경하고 논리 파일 로그를 축소했습니다.

alter database myDbName SET recovery simple
go
dbcc shrinkfile('LOG FILE LOGICAL NAME', 100)
go

그것은 도움이 있지만, 지금은 이해하는 데 필요한 이유 는, 도움이 어떻게 이 상황이 시작하고 어떻게 앞으로이 문제를 방지하기 위해?

편집하다:

매일 밤 1시에 서버에있는 모든 데이터베이스의 스크립트 백업을 수행합니다. 이것은 가장 중요한 부분이 31 줄 스크립트에 의해 수행됩니다

set @Filename = 'D:\backup\' + convert(varchar, getDate(), 112) + ' - ' + @DBName + '.bak'
set @Description = 'Full backup of database ' + @Filename
BACKUP DATABASE @DBName TO DISK = @Filename WITH INIT , NOUNLOAD , NAME = @Description, NOSKIP , STATS = 10, NOFORMAT

새로운 복구 모델과 데이터베이스 축소가이 스크립트와 충돌합니까?

우리는 다른 종류의 데이터베이스 백업을 수행하지 않으므로 트랜잭션 로그가 아닌가?


지금 주목할 가치가있는 것은 현재 Azure SQL에서는 선택 사항이 아니며 항상 전체 복구를 사용한다는 것입니다. azure.microsoft.com/ko-kr/blog/…
jocull

답변:


60

전체 복구 모델을 사용해야하는시기와 데이터베이스에 간단한 복구 모델을 사용해야하는시기는 언제입니까?

데이터베이스의 특정 시점 복구가 필요한 경우 전체 복구 모델을 사용해야합니다. 데이터베이스를 특정 시점으로 복구 할 필요가없고 마지막 전체 또는 차등 백업이 복구 지점으로 충분한 경우 간단한 복구 모델을 사용해야합니다. (참고 : 대량 복구 된 다른 복구 모델이 있습니다. 대량 로그 복구 모델에 대한 자세한 내용은 이 참조를 참조 하십시오 )

SQL Server 용 Microsoft OLE DB 공급자 (0x80040E14) 'DATABASE NAME'데이터베이스의 트랜잭션 로그가 가득 찼습니다. 로그의 공간을 재사용 할 수없는 이유를 확인하려면 sys.databases의 log_reuse_wait_desc 열을 참조하십시오.

오류가 발생한 이유는 트랜잭션 로그를 백업하지 않았기 때문입니다. 백업되지 않으면 트랜잭션 로그의 "부분"(가상 로그 파일)을 재사용 할 수 없으므로 트랜잭션 로그 파일을 물리적으로 계속 증가시킵니다 (자동 증가가 활성화되어 있고 maxsize가 허용 된 경우). 이러한 VLF 만 재사용으로 표시하고 트랜잭션 로그 백업을 수행 할 때 트랜잭션 로그의 "랩 어라운드"특성을 허용 할 수 있습니다 (활성 트랜잭션이 없거나 일부 복제 측면과 같은 몇 가지 다른 요구 사항).

로그를 축소하고 데이터베이스에 다시 액세스 할 수 있도록하려면 다음 명령을 사용하여 복구 모델을 FULL에서 SIMPLE로 변경하고 논리 파일 로그를 축소했습니다.

......

도움이되었지만 지금은 왜 도움이되었는지 이해해야합니다.이 상황이 시작된 방법과 향후이를 방지하는 방법은 무엇입니까?

데이터베이스를 단순 복구 모델로 설정하면 SQL Server에 더 이상 특정 시점 복구에 대해 신경 쓰지 않으며 가상 로그 파일을 더 이상 보존 및 활성으로 표시하지 않아도되도록 요구하기 때문에 도움이되었습니다. 이제 체크 포인트 프로세스는 이러한 VLF를 비활성으로 표시합니다.

이 MSDN 참조 에서 발췌 / 인용 :

단순 복구 모델에서 일부 요소가 로그 잘림을 지연시키지 않는 한 자동 검사 점이 트랜잭션 로그의 사용되지 않은 섹션을 자릅니다. 반대로 전체 및 대량 로그 복구 모델에서는 로그 백업 체인이 설정되면 자동 검사 점이 로그 잘림을 유발하지 않습니다.

그런 다음 실제 데이터베이스 파일 축소를 수행했으며 트랜잭션 로그에 여유 공간이 있었기 때문에 NTFS 파일을 실제로 축소 할 수있었습니다.

시간을 할애 할 가치가있는 독서 :

  1. 복구 모델
  2. 트랜잭션 로그 관리 (Gail Shaw)
  3. 로그 잘림을 지연시킬 수있는 요소

편집 후 편집 :

새로운 복구 모델과 데이터베이스 축소가이 스크립트와 충돌합니까?

BACKUP DATABASE명령은 복구 모델 중 하나에서 작동합니다. 일상적인 데이터베이스 축소에 관해서는 ... IT를하지 마십시오 !!!! 심각하게 데이터베이스의 크기를 적절하게 조정하고 전체 복구 모델을 사용하는 경우 트랜잭션 로그 크기를 유지하는 것뿐만 아니라 복구 지점 개체를 충족시키기 위해 일상적이고 자주 트랜잭션 로그 파일을 수행하고 있는지 확인하십시오.

우리는 다른 종류의 데이터베이스 백업을 수행하지 않으므로 트랜잭션 로그가 아닌가?

데이터베이스가 전체 복구 모델을 사용하는 경우 트랜잭션 로그 백업을 수행해야합니다. 데이터베이스가 단순 복구 상태 인 경우 트랜잭션 로그 백업을 실제로 수행 할 수 없습니다.

사용할 복구 모델 (단순 대 전체)에 대해서는 그러한 결정을 내릴 수 없습니다. 귀하, 비즈니스 팀 및 SLA 만 가능합니다.


데이터베이스 미러링을 사용하는 경우 로그 파일을 사용하여 미러를 업데이트 된 상태로 전체 복구 모델을 사용해야한다고 덧붙일 수도 있습니다.
Holger

그건이었다 훌륭한 대답 . 내가 이해하지 못하는 부분은“복구 지점 개체도 충족시키는 것”입니다. 그 문구를 명확히 해 주시겠습니까? 나는 처음에 당신이“목표”를 쓰려고한다고 생각했지만 그 가정을 확신 할 수는 없습니다.
Anthony G-Monica에 대한 정의
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.