다음 명령을 사용하여 데이터베이스를 미러링하려고 할 때
ALTER AVAILABILITY GROUP SQLAlwaysonGroup ADD DATABASE test0916aj8CJ
다음과 같은 오류가 발생합니다
메시지 1475, 수준 16, 상태 105, 줄 1
데이터베이스 “test0916aj8CJ”에는 백업되지 않은 대량 로그 변경 내용이 포함될 수 있습니다. 주 데이터베이스 또는 기본 데이터베이스에서 로그 백업을 수행하십시오. 그런 다음이 백업을 미러 데이터베이스에서 복원하여 데이터베이스 미러링을 활성화하거나 모든 보조 데이터베이스에서 가용성 그룹에 가입 할 수 있도록하십시오.
데이터베이스를 백업하지 않고도이 작업을 수행 할 수 있습니까? 또는 백업 한 다음 백업을 폐기해야합니다. 새로 생성 된 db 용이므로 지금은 백업이 필요하지 않습니다.
나는 다음을 시도했다 …
BACKUP
DATABASE [test0916aj8CJ] TO DISK = N’NUL’
WITH COPY_ONLY, NOFORMAT, INIT,
NAME = N’test-Full Database Backup’,
SKIP, NOREWIND, NOUNLOAD
GO
그러나 위의 방법도 작동하지 않았습니다.
감사
답변
발생한 오류를 쉽게 재현 할 수 있습니다
- 기본에서 전체 복구 모드로 데이터베이스를 작성하십시오.
- 보조에서 전체 복구 모드로 데이터베이스를 작성하십시오.
- GUI를 시작하고 1 차와 2 차 사이에서 미러링을 구성하십시오.
다음과 같은 오류가 발생합니다.
데이터베이스 “test_mirroring_kin”에는 백업되지 않은 대량 로그 변경 사항이 포함될 수 있습니다. 주 데이터베이스 또는 기본 데이터베이스에서 로그 백업을 수행하십시오. 그런 다음이 백업을 미러 데이터베이스에서 복원하여 데이터베이스 미러링을 활성화하거나 모든 보조 데이터베이스에서 가용성 그룹에 가입 할 수 있도록하십시오. (Microsoft SQL Server, 오류 : 1475)
그 오류가 무엇인지 이해할 수 있습니다.
데이터베이스를 전체 복구 모드로 구성했으며 데이터베이스가 실제로 전체 복구 모드에 있다고 생각합니다.
위의 사실이 아닙니다. 데이터베이스를 생성 한 후 전체 백업을 수행하지 않으면 데이터베이스가 전체 복구 모드에 있더라도 의사 -SIMPLE 복구에 있습니다
당신은 쉽게 그것을 사용하여 확인할 수 있습니다 dbcc dbinfo> – dbi_dbbackupLSN의 값을 갖는 0:0:0(0x00000000:00000000:0000)또는 폴 랜달의 스크립트를 사용하여
dbcc traceon (3604)
go
dbcc dbinfo('test_mirroring_kin') with tableresults
go
dbcc traceoff (3604)
편집 :COPY_ONLY
옵션 으로 첫 번째 전체 백업을 수행해도 백업 체인이 설정되지 않습니다
backup database test_mirroring_kin
to disk = 'D:\test_mirroring_kin_FULL.bak'
with init, stats=10, COPY_ONLY
dbcc dbinfo-> dbi_dbbackupLSN값이 여전히 0:0:0(0x00000000:00000000:0000). 입니다 . 이는 데이터베이스가 여전히 의사 단순 복구 모드임을 의미합니다.
위의 오류를 해결하려면 어떻게해야합니까?
기본에서 전체 백업 + 하나의 트랜잭션 로그 백업을 수행 한 다음 보조 데이터베이스에 복원 with norecovery
한 다음 AG 그룹 또는 미러링의 데이터베이스에 가입해야합니다.
보조 노트로와 완성도를 들어, 스크립트 이야기를 위해 backup to NUL
, 게일 쇼에 의해이 블로그 게시물을 읽어 보시기 바랍니다.
답변
왜
TO DISK = N’NUL’
?
왜 당신이 사용하는지 이해하지 못합니다 TO DISK = N’NUL’
:
BACKUP
DATABASE [test0916aj8CJ] TO DISK = N’NUL’
그렇게하면 백업이에 저장됩니다 NUL
(예 : = 아무 데나 없음). 파일이 없기 때문에 사용할 수 없습니다.
NUL
LOG 백업의 대상으로도 사용할 수 있지만 LOG가 유실되고 백업 체인이 손상되므로 특히 Prod 서버에서도 사용해서는 안됩니다. (~와 유사 SHRINKFILE
)
로그 백업
DB를 그룹에 추가하기 전에 준비해야합니다. 보조 DB를 준비하려면 최소 1 개의 트랜잭션 로그 백업을 수행하고 복원해야합니다. 미러는이를 사용하여 보조 DB에서 이미 동기화 된 트랜잭션과 아직 기본 DB와 동기화되지 않은 트랜잭션을 파악합니다.
따라서 기본 DB에서 트랜잭션 로그를 백업해야합니다.
BACKUP LOG [test0916aj8CJ] TO DISK = N'....bak'
WITH COPY_ONLY, FORMAT, INIT, NAME = N'test0916aj8CJ-Transaction Log Backup', STATS = 10
COPY_ONLY
옵션을 사용해야합니다. LOG 백업이 끝날 때 로그가 잘리지 않도록합니다.
기본 DB 백업 체인
그러나 백업 체인이 없으면 로그 백업 만 복원 할 수 없습니다 (Kin 응답도 참조). 이는 전체 데이터베이스 백업 (필요한 경우 선택적인 차등)을 수행 한 후 트랜잭션 로그 백업을 수행해야 함을 의미합니다.
이 COPY_ONLY
옵션은 백업 체인을 중단하지 않기 때문에 백업 체인도 생성하지 않습니다. 이 COPY_ONLY
옵션은 데이터베이스 백업에 사용할 수 없습니다.
순서대로 백업 :
COPY_ONLY
옵션이 없는 전체 데이터베이스 백업- 선택적 차등 백업
COPY_ONLY
옵션이있는 1 LOG 백업- 필요한 경우 다른 (또는 그 이상) LOG 백업 …
보조 DB 복원
그런 다음 보조에서 데이터베이스 백업을 복원해야합니다 (+ 차등).
NORECOVERY
FULL 백업이 복원되면 LOG 백업도 복원하기 때문에 옵션 으로 복원해야합니다 .
마지막으로 LOG 백업을 복원합니다. NORECOVERY
미러가 트랜잭션을 한 번만 복원하면 계속해서 옵션 을 사용해야합니다 .
NORECOVERY
옵션으로 전체 백업을 복원NORECOVERY
옵션으로 DIFF 백업 복원NORECOVERY
옵션을 사용하여 모든 LOG 백업 복원
모두 함께합시다 (환경에 맞게)
-
기본 서버에서 다음을 실행하십시오.
USE master Go BACKUP DATABASE [test0916aj8CJ] TO DISK = N'....bak' WITH FORMAT, INIT, NAME = N'test0916aj8CJ-Full Database Backup', STATS = 10 GO BACKUP LOG [test0916aj8CJ] TO DISK = N'....bak' WITH COPY_ONLY, FORMAT, INIT, NAME = N'test0916aj8CJ-Transaction Log Backup', STATS = 10 GO
-
보조 서버에서 다음을 실행하십시오.
USE master Go RESTORE DATABASE [test0916aj8CJ] FROM DISK = N'....bak' WITH FILE = 1, NORECOVERY, NOUNLOAD, REPLACE, STATS = 10 GO RESTORE LOG [test0916aj8CJ] FROM DISK = N'....bak' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10
-
그런 다음 가용성 그룹에 새 보조 DB 추가를 진행할 수 있습니다.
선택적 조치
- DISK 옵션을 기본 및 보조 서버에서 모두 사용할 수있는 공유 폴더로 설정하는 것이 좋습니다.
- DB 파일을 기본 및 보조 서버 모두에서 유사한 디스크 및 위치에 저장하는 것이 좋습니다.