Impossibile eseguire il mirroring di un database SQL Server 2012


11

Quando si tenta di eseguire il mirroring di un database utilizzando il comando seguente

ALTER AVAILABILITY GROUP SQLAlwaysonGroup ADD DATABASE test0916aj8CJ

Ottengo il seguente errore

Messaggio 1475, livello 16, stato 105, riga 1
Database "test0916aj8CJ" potrebbe contenere modifiche registrate in blocco di cui non è stato eseguito il backup. Eseguire un backup del registro sul database principale o sul database primario. Quindi ripristinare questo backup sul database mirror per abilitare il mirroring del database o su ogni database secondario per consentire di unirlo al gruppo di disponibilità.

Questo può essere fatto senza eseguire il backup del database? O dovrei fare il backup e quindi scartare il backup. È per un db appena creato, quindi a questo punto non ho bisogno del backup.

Ho provato il seguente ...

BACKUP
DATABASE [test0916aj8CJ] TO DISK = NNUL
WITH COPY_ONLY, NOFORMAT, INIT,
NAME = Ntest-Full Database Backup’,
SKIP, NOREWIND, NOUNLOAD
GO

ma il metodo sopra non ha funzionato neanche.

Grazie


Un paio di cose ... In realtà non si esegue il mirroring con quel comando ma si aggiunge un database a un gruppo di disponibilità. Il che quindi mi fa chiedere come è impostata la tua AG, in quale modalità di ripristino sono i tuoi database e perché, per risolvere un problema di registro, stai eseguendo un backup COPY_ONLY che lascia intatto il registro che non è ciò che l'errore ti sta specificando. ? Mi sembra che ti manchi qualche passo o sei molto confuso su ciò che stai cercando di fare.
Steve Mangiameli,

Risposte:


15

È facile riproporre l'errore che hai ricevuto

  • Crea database in modalità di recupero completo su Primario.
  • Crea database in modalità di recupero completo in Secondario.
  • Avviare la GUI e provare a configurare il mirroring tra primario e secondario.

Di seguito è riportato l'errore che otterrai:

Il database "test_mirroring_kin" potrebbe contenere modifiche registrate in blocco di cui non è stato eseguito il backup. Eseguire un backup del registro sul database principale o sul database primario. Quindi ripristinare questo backup sul database mirror per abilitare il mirroring del database o su ogni database secondario per consentire di unirlo al gruppo di disponibilità. (Microsoft SQL Server, errore: 1475)

inserisci qui la descrizione dell'immagine

Consente di capire qual è l'errore:

Hai configurato il tuo database in modalità di recupero COMPLETO e pensi che il database sia effettivamente in modalità di recupero COMPLETO.

Quanto sopra non è vero. Dopo aver creato il database, se non si esegue un backup COMPLETO, anche se il database è in modalità di recupero COMPLETO, è in recupero pseudo-SEMPLICE

Puoi verificarlo facilmente usando dbcc dbinfo-> dbi_dbbackupLSNavendo valore 0:0:0(0x00000000:00000000:0000)o usando lo script di Paul Randal

dbcc traceon (3604)
go
dbcc dbinfo('test_mirroring_kin') with tableresults
go
dbcc traceoff (3604)

inserisci qui la descrizione dell'immagine

Modifica: anche l'esecuzione di un primo backup completo con COPY_ONLYopzione non stabilisce una catena di backup

backup database test_mirroring_kin
to disk = 'D:\test_mirroring_kin_FULL.bak'
with init, stats=10, COPY_ONLY

dbcc dbinfo-> ha dbi_dbbackupLSNancora valore di 0:0:0(0x00000000:00000000:0000). Ciò significa che il database è ancora in modalità di recupero pseudo-semplice.

Cosa è necessario fare per risolvere l'errore sopra riportato?

È necessario eseguire un backup completo + un backup del registro delle transazioni sul primario e quindi ripristinarlo sul database secondario with norecoverye quindi unire il database nel gruppo AG o Mirroring.

Come nota a margine e per completezza, per il racconto della sceneggiatura backup to NUL, leggi questo post sul blog di Gail Shaw.


5

Perché TO DISK = N’NUL’?

Non capisco perché stai usando TO DISK = N’NUL’:

BACKUP
DATABASE [test0916aj8CJ] TO DISK = NNUL

In tal caso, il backup viene salvato in NUL, (cioè = nel nulla / niente) e non può essere utilizzato perché il suo file non esiste.

Sebbene NULpossa essere utilizzato anche come destinazione per i backup di LOG, non dovrebbe essere utilizzato neanche, in particolare sui server Prod perché i log andranno persi e la catena di backup verrà interrotta. (~ simile a a SHRINKFILE)

LOG Backup

Prima di aggiungere un DB al gruppo, è necessario prepararlo. Quando si desidera preparare un DB secondario, è necessario eseguire e ripristinare almeno 1 backup del registro delle transazioni. Il mirror lo utilizza per capire quali transazioni sono già state sincronizzate sul DB secondario e quali transazioni non sono ancora sincronizzate con il DB primario.

Pertanto è necessario eseguire il backup dei registri delle transazioni sul DB primario:

BACKUP LOG [test0916aj8CJ] TO  DISK = N'....bak' 
WITH  COPY_ONLY, FORMAT, INIT,  NAME = N'test0916aj8CJ-Transaction Log  Backup', STATS = 10

L' COPY_ONLYopzione deve essere utilizzata. Si assicura che i log non vengano troncati al termine del backup del LOG.

Catena di backup del database primario

Tuttavia, non è possibile ripristinare un backup del log da solo, ovvero senza una catena di backup (vedere anche la risposta Kin). Ciò significa che il backup del registro delle transazioni deve essere eseguito dopo che è stato eseguito un backup COMPLETO del database (+ un differenziale opzionale se necessario).

Poiché l' COPY_ONLYopzione non interrompe la catena di backup, non crea nemmeno una catena di backup. L' COPY_ONLYopzione non può essere utilizzata per il backup del database.

Backup in ordine:

  • Backup COMPLETO del database senza l' COPY_ONLYopzione
  • Backup differenziale opzionale
  • 1 LOG Backup con COPY_ONLYopzione
  • un altro (o più) backup LOG, se necessario ...

Ripristina il DB secondario

Quindi il backup del database deve essere ripristinato (+ differenziale) sul secondario.

Deve essere ripristinato con l' NORECOVERYopzione perché si desidera ripristinare anche i backup LOG una volta ripristinato il backup COMPLETO.

Infine, ripristinerai LOG Backup. È comunque necessario utilizzare l' NORECOVERYopzione perché il mirror continuerà a ripristinare le transazioni una volta in atto.

  • Ripristina il backup COMPLETO con l' NORECOVERYopzione
  • Ripristina il backup DIFF con l' NORECOVERYopzione
  • Ripristina tutti i backup del LOG in ordine con l' NORECOVERYopzione

Mettiamo tutto insieme (adattalo al tuo ambiente)

  • Sul server primario eseguire:

    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
  • Sul server secondario eseguire:

    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
  • È quindi possibile procedere con l'aggiunta del nuovo DB secondario al gruppo di disponibilità ...

Azioni opzionali

  • È meglio impostare l'opzione DISK su una cartella condivisa disponibile sia dal server primario che secondario.
  • È anche meglio archiviare i file DB su disco e posizione simili sia sul server primario che su quello secondario.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.