Eine Datenbank SQL Server 2012 kann nicht gespiegelt werden

11

Wenn Sie versuchen, eine Datenbank mit dem folgenden Befehl zu spiegeln

ALTER AVAILABILITY GROUP SQLAlwaysonGroup ADD DATABASE test0916aj8CJ

Ich erhalte den folgenden Fehler

Meldung 1475, Ebene 16,
Status 105, Zeile 1 Die Datenbank "test0916aj8CJ" enthält möglicherweise protokollierte Massenänderungen, die nicht gesichert wurden. Erstellen Sie eine Protokollsicherung für die Hauptdatenbank oder die Primärdatenbank. Stellen Sie diese Sicherung dann entweder in der Spiegeldatenbank wieder her, um die Datenbankspiegelung zu aktivieren, oder in jeder sekundären Datenbank, damit Sie sie der Verfügbarkeitsgruppe hinzufügen können.

Kann dies ohne Sicherung der Datenbank erfolgen? Oder sollte ich sichern und dann das Backup verwerfen. Es ist für eine neu erstellte Datenbank, daher brauche ich das Backup an dieser Stelle sowieso nicht.

Ich habe folgendes versucht ...

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

aber die obige Methode funktionierte auch nicht.

Vielen Dank

Rechnung
quelle
Ein paar Dinge ... Sie spiegeln nicht wirklich mit diesem Befehl, sondern fügen einer Verfügbarkeitsgruppe eine Datenbank hinzu. Daraufhin frage ich Sie, wie Ihre AG eingerichtet ist, in welchem ​​Wiederherstellungsmodus sich Ihre Datenbanken befinden und warum Sie zur Behebung eines Protokollproblems eine COPY_ONLY-Sicherung durchführen, bei der das Protokoll intakt bleibt. Dies ist nicht das, was der Fehler angibt ? Mir scheint, Sie vermissen ein paar Schritte oder sind sehr verwirrt darüber, was Sie versuchen zu tun.
Steve Mangiameli

Antworten:

15

Es ist einfach, den Fehler, den Sie erhalten haben, zu wiederholen

  • Erstellen Sie eine Datenbank im vollständigen Wiederherstellungsmodus auf Primär.
  • Erstellen Sie eine Datenbank im vollständigen Wiederherstellungsmodus in Secondary.
  • Starten Sie die GUI und versuchen Sie, die Spiegelung zwischen Primär und Sekundär zu konfigurieren.

Unten ist der Fehler, den Sie erhalten:

Die Datenbank "test_mirroring_kin" enthält möglicherweise protokollierte Massenänderungen, die nicht gesichert wurden. Erstellen Sie eine Protokollsicherung für die Hauptdatenbank oder die Primärdatenbank. Stellen Sie diese Sicherung dann entweder in der Spiegeldatenbank wieder her, um die Datenbankspiegelung zu aktivieren, oder in jeder sekundären Datenbank, damit Sie sie der Verfügbarkeitsgruppe hinzufügen können. (Microsoft SQL Server, Fehler: 1475)

Geben Sie hier die Bildbeschreibung ein

Lassen Sie uns verstehen, was dieser Fehler ist:

Sie haben Ihre Datenbank im vollständigen Wiederherstellungsmodus konfiguriert und denken, dass sich die Datenbank tatsächlich im vollständigen Wiederherstellungsmodus befindet.

Das obige ist nicht wahr. Wenn Sie nach dem Erstellen der Datenbank keine vollständige Sicherung durchführen, obwohl sich die Datenbank im vollständigen Wiederherstellungsmodus befindet, befindet sie sich in einer pseudo-EINFACHEN Wiederherstellung

Sie können dies leicht überprüfen, indem Sie dbcc dbinfo-> dbi_dbbackupLSNden Wert von 0:0:0(0x00000000:00000000:0000)oder das Skript von Paul Randal verwenden

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

Geben Sie hier die Bildbeschreibung ein

Bearbeiten: Selbst eine erste vollständige Sicherung mit COPY_ONLYOption erstellt keine Sicherungskette

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

dbcc dbinfo-> dbi_dbbackupLSNhat noch Wert von 0:0:0(0x00000000:00000000:0000). Dies bedeutet, dass sich die Datenbank immer noch im pseudo-einfachen Wiederherstellungsmodus befindet.

Was müssen Sie tun, um den oben genannten Fehler zu beheben?

Sie müssen eine vollständige Sicherung + eine Transaktionsprotokollsicherung auf der primären Datenbank erstellen und diese dann auf der sekundären Datenbank wiederherstellen with norecoveryund dann der Datenbank in der AG-Gruppe oder in der Spiegelung beitreten.

Als Randnotiz und für die Vollständigkeit, für Ihr Skript erzählt backup to NUL, lesen Sie diesen Blog - Post von Gail Shaw.

Kin Shah
quelle
5

Warum TO DISK = N’NUL’?

Ich verstehe nicht, warum Sie verwenden TO DISK = N’NUL’:

BACKUP
DATABASE [test0916aj8CJ] TO DISK = NNUL

Wenn Sie dies tun, wird die Sicherung in NUL(dh = nirgendwo / nichts) gespeichert und kann nicht verwendet werden, da ihre Datei nicht vorhanden ist.

Während NULkann auch als Ziel für Log - Sicherungen verwendet wird, sollte es auch nicht verwendet werden, vor allem auf Prod - Servern , weil LOGs verloren gehen und die Backup - Kette unterbrochen wird. (~ ähnlich wie a SHRINKFILE)

LOG-Sicherung

Bevor Sie der Gruppe eine Datenbank hinzufügen, müssen Sie diese vorbereiten. Wenn Sie eine sekundäre Datenbank vorbereiten möchten, muss mindestens 1 Transaktionsprotokollsicherung erstellt und wiederhergestellt werden. Der Spiegel verwendet es, um herauszufinden, welche Transaktionen bereits in der sekundären Datenbank synchronisiert wurden und welche Transaktionen noch nicht mit der primären Datenbank synchronisiert sind.

Daher müssen Sie die Transaktionsprotokolle in der primären Datenbank sichern:

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

Die COPY_ONLYOption muss verwendet werden. Es stellt sicher, dass die Protokolle am Ende der LOG-Sicherung nicht abgeschnitten werden.

Primäre DB-Sicherungskette

Sie können eine Protokollsicherung jedoch nicht alleine wiederherstellen, dh ohne Sicherungskette (siehe auch Kin-Antwort). Dies bedeutet, dass die Transaktionsprotokollsicherung durchgeführt werden muss, nachdem eine vollständige Datenbanksicherung (+ ein optionales Differential, falls erforderlich) durchgeführt wurde.

Da die COPY_ONLYOption die Sicherungskette nicht unterbricht, wird auch keine Sicherungskette erstellt. Die COPY_ONLYOption kann nicht für die Datenbanksicherung verwendet werden.

Backups in der Reihenfolge:

  • VOLLSTÄNDIGE Datenbanksicherung ohne die COPY_ONLYOption
  • Optionale differenzielle Sicherung
  • 1 LOG Backup mit COPY_ONLYOption
  • ein weiteres (oder mehr) LOG-Backup, falls erforderlich ...

Stellen Sie die sekundäre Datenbank wieder her

Dann muss die Datenbanksicherung auf der Sekundärseite wiederhergestellt werden (+ Differential).

Es muss mit der NORECOVERYOption wiederhergestellt werden, da Sie auch die LOG-Sicherung (en) wiederherstellen möchten, sobald die vollständige Sicherung wiederhergestellt wurde.

Schließlich stellen Sie die LOG-Sicherung wieder her. Sie müssen die NORECOVERYOption weiterhin verwenden, da der Spiegel weiterhin Transaktionen wiederherstellt, sobald diese vorhanden sind.

  • Stellen Sie die vollständige Sicherung mit der NORECOVERYOption wieder her
  • Stellen Sie die DIFF-Sicherung mit der NORECOVERYOption wieder her
  • Stellen Sie alle LOG-Sicherungen der Reihe nach mit der NORECOVERYOption wieder her

Lassen Sie uns alles zusammenfügen (passen Sie es an Ihre Umgebung an)

  • Auf dem Primärserver ausführen:

    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
  • Führen Sie auf dem sekundären Server Folgendes aus:

    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
  • Anschließend können Sie die neue sekundäre Datenbank zur Verfügbarkeitsgruppe hinzufügen ...

Optionale Aktionen

  • Es ist besser, die DISK-Option auf einen freigegebenen Ordner festzulegen, der sowohl vom primären als auch vom sekundären Server verfügbar ist.
  • Es ist auch besser, DB-Dateien auf einer ähnlichen Festplatte und einem ähnlichen Speicherort sowohl auf dem primären als auch auf dem sekundären Server zu speichern.
Julien Vavasseur
quelle