이 문서는 VDI(가상 디바이스 인터페이스) 기반 애플리케이션을 사용하여 SQL Server 데이터베이스를 복원할 때 발생하는 문제를 해결하는 데 도움이 됩니다.
증상
SQL Server 2019 이상에서 다중 스트라이프 VDI(가상 디바이스 인터페이스) 전체 백업을 복원하는 경우 다음과 같은 오류 MSSQLSERVER_3456 발생할 수 있습니다.
Msg 3456, Level 16, State 1, Line <LineNumber>
Could not redo log record (120600:18965748:1), for transaction ID (0:1527178398), on page (14:1987189), allocation unit 72057761533001728, database 'DB1_STRIPE' (database ID 8).
Page: LSN = (120598:23255372:8), allocation unit = 72057761317781504, type = 1. Log: OpCode = 6, context 2, PrevPageLSN: (120600:18965371:85).
원인
SQL Server가 VDI에 백업하는 경우 버퍼를 통해 VDI에 데이터를 전달합니다. 그런 다음 VDI는 해당 백업을 저장하는 방법의 서식을 처리합니다. 그러나 대부분의 경우 VDI 클라이언트는 각 데이터 페이지의 단일 복사본만 예상할 수 있습니다.
VDI에 백업을 스트라이프하는 경우 여러 백업 디바이스가 함께 전체 백업의 콘텐츠를 구성합니다. 데이터는 비동기적으로 작성되고 데이터 복사 순서는 VDI 클라이언트의 논리에 의해 처리됩니다. 데이터 복사 단계는 비동기이므로 데이터를 순서대로 작성할 수 있습니다. 그러나 SQL Server 2019 이전의 전체 백업 시나리오에서는 데이터 페이지당 하나의 복사본만 있습니다. 따라서 VDI 클라이언트가 SQL Server가 복원을 위해 읽는 버퍼로 데이터를 보내면 SQL Server는 각 데이터 페이지를 복원하는 위치와 방법을 정확하게 알 수 있습니다. SQL Server 2019에서 지연된 로그 고정이 도입되면 백업 파일에서 데이터 페이지의 여러 복사본을 찾을 수 있습니다. 전체 백업 내에서 발생하는 미니 차등 백업으로 인해 여러 복사본이 존재합니다(자세한 내용은 추가 정보 섹션 참조). VDI 클라이언트는 동일한 데이터 페이지의 여러 복사본을 기대하지 않거나 데이터 페이지를 잘못된 순서로 SQL Server에 다시 전달합니다. 이 동작으로 인해 복원이 실패합니다. 오류 3456 Could not redo log record 은 SQL Server에서 최신 버전의 데이터 페이지가 필요한 로그 레코드를 적용하려고 하지만 이전 버전을 찾습니다.
해결
구성에 따라 하나 이상의 추적 플래그를 SQL Server 인스턴스의 시작 매개 변수로 사용하도록 설정해야 합니다.
인스턴스가 주 복제본 또는 가용성 그룹이 없는 인스턴스로 작동할 때 전체 백업을 수행하는 경우 추적 플래그 3471을 사용하도록 설정하여 전체 백업에 대해 지연된 로그 고정 기능을 사용하지 않도록 설정합니다.
인스턴스가 주 복제본 또는 가용성 그룹이 없는 인스턴스로 작동할 때 차등 백업을 수행하는 경우 추적 플래그 3475를 사용하도록 설정하여 차등 백업에 대해 지연된 로그 고정 기능을 사용하지 않도록 설정합니다.
인스턴스가 보조 복제본 역할을 할 때 COPY_ONLY 전체 백업을 수행하는 경우 추적 플래그 3472를 사용하도록 설정하여 차등 백업에 대해 지연된 로그 고정 기능을 사용하지 않도록 설정합니다.
SQL Server를 다시 시작하십시오.
전체 또는 차등 백업을 다시 수행합니다.
참고 항목
DBCC TRACEON 명령을 사용하여 이러한 추적 플래그를 일시적으로 사용하도록 설정할 수도 있습니다.
DBCC TRACEON(3471,3472,3475,-1)
SQL Server 인스턴스를 즉시 다시 시작할 수 없는 경우 이 명령을 사용하여 문제를 완화할 수 있습니다.
Important
이 문제로 인해 다음 조건이 충족되면 기존 백업을 복원할 수 없습니다.
- 백업은 지연 로그 고정 기능을 사용하도록 설정하여 수행됩니다.
- 백업 도구가 VDI를 사용하고 있습니다.
- 백업은 다중 스트라이프를 사용하여 수행됩니다(여러 파일에 백업).
테스트 서버에서 기존 백업을 복원하여 성공적으로 복원할 수 있는지 확인하는 것이 좋습니다.
자세한 정보
SQL Server 2019에는 지연된 로그 고정이라는 기능이 도입되었습니다. 이 기능이 도입되기 전에 SQL Server는 전체 데이터베이스 백업 중에 트랜잭션이 발생하지 않도록 차단하고(로그를 고정), 데이터 및 로그를 복사한 다음, 시작 부분에 핀을 제거합니다. 이 기능이 제공되면 SQL Server는 트랜잭션이 시작이 아닌 백업 기간이 끝날 때까지 트랜잭션이 발생하는 것을 지연합니다(로그 고정). 이 기능은 완료하는 데 시간이 오래 걸리는 전체 백업 중에 전체 트랜잭션 로그 문제(MSSQLSERVER_9002 오류)를 방지하도록 설계되었습니다. 로그 고정이 지연되므로 백업이 진행되는 동안에도 트랜잭션을 데이터베이스의 데이터 페이지에 적용할 수 있습니다. SQL Server는 진행 중인 전체 백업의 시작 시간 이후 변경된 페이지를 식별하기 위해 비트맵을 유지 관리하므로 최소 차등 백업을 수행할 수 있습니다. 이러한 방식으로 전체 데이터베이스를 백업하는 동안 변경된 각 데이터 페이지의 업데이트된 복사본을 가져옵니다. 이로 인해 일부 데이터 페이지의 추가 복사본이 생성됩니다. 또한 전체 백업의 이 추가 섹션이 만들어집니다.