태그 보관물: alter-database

alter-database

데이터베이스 SQL Server 2012를 미러링 할 수 없습니다 메시지 1475, 수준 16, 상태 105,

다음 명령을 사용하여 데이터베이스를 미러링하려고 할 때

ALTER AVAILABILITY GROUP SQLAlwaysonGroup ADD DATABASE test0916aj8CJ

다음과 같은 오류가 발생합니다

메시지 1475, 수준 16, 상태 105, 줄 1
데이터베이스 “test0916aj8CJ”에는 백업되지 않은 대량 로그 변경 내용이 포함될 수 있습니다. 주 데이터베이스 또는 기본 데이터베이스에서 로그 백업을 수행하십시오. 그런 다음이 백업을 미러 데이터베이스에서 복원하여 데이터베이스 미러링을 활성화하거나 모든 보조 데이터베이스에서 가용성 그룹에 가입 할 수 있도록하십시오.

데이터베이스를 백업하지 않고도이 작업을 수행 할 수 있습니까? 또는 백업 한 다음 백업을 폐기해야합니다. 새로 생성 된 db 용이므로 지금은 백업이 필요하지 않습니다.

나는 다음을 시도했다 …

BACKUP
DATABASE [test0916aj8CJ] TO DISK = NNUL
WITH COPY_ONLY, NOFORMAT, INIT,
NAME = Ntest-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 = NNUL

그렇게하면 백업이에 저장됩니다 NUL(예 : = 아무 데나 없음). 파일이 없기 때문에 사용할 수 없습니다.

NULLOG 백업의 대상으로도 사용할 수 있지만 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 복원

그런 다음 보조에서 데이터베이스 백업을 복원해야합니다 (+ 차등).

NORECOVERYFULL 백업이 복원되면 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 파일을 기본 및 보조 서버 모두에서 유사한 디스크 및 위치에 저장하는 것이 좋습니다.

답변