Ich untersuche den Protokollversand in einer SQL Server 2005-Umgebung. Die Idee war, häufigen Protokollversand zu einem sekundären Server einzurichten. Die Absicht: Verwenden Sie den sekundären Server, um Berichtsabfragen auszuführen, wodurch der primäre Datenbankserver ausgelagert wird.Ist es möglich, einen sekundären Server in einem Protokollversand-Szenario als schreibgeschützt verfügbar zu haben?
stieß ich auf dieses auf einem sqlservercentral forum thread:
Wenn Sie den Protokollversand Sie die Wahl zwischen 2 haben erstellen. Sie können den Wiederherstellungsprotokoll-Vorgang so konfigurieren, dass er mit der Option "Wiederherstellung" oder mit der Standby-Option ausgeführt wird. Wenn Sie die Option "Wiederherstellen" verwenden, können Sie keine Select-Anweisungen für sie ausgeben. Wenn Sie statt der Wiederherstellung die Standby-Option verwenden, können Sie ausgewählte Abfragen in der Datenbank ausführen. Bedenken Sie mit der Standby-Option, wenn Protokolldateiwiederherstellungen auftreten Benutzer werden ohne Warnung durch den Wiederherstellungsprozess rausgeschmissen. Wenn Sie die Option Protokollversand mit Standby konfigurieren, können Sie auch zwischen zwei Optionen wählen: Alle Prozesse in der sekundären Datenbank beenden und eine Protokollwiederherstellung durchführen oder keine Protokollwiederherstellung durchführen, wenn die Datenbank verwendet wird. Wenn Sie die zweite Option auswählen, wird die Wiederherstellungsoperation möglicherweise nie ausgeführt, wenn jemand eine Verbindung zur Datenbank öffnet und sie nicht schließt. Daher ist es besser, die erste Option zu verwenden.
Also meine Fragen sind:
- Ist die oben wahr? Können Sie den Protokollversand wirklich nicht so verwenden, wie ich es vorschlage?
- Wenn es wahr ist, könnte jemand erklären, warum Sie SELECT-Anweisungen nicht in einer Datenbank ausführen können, während das Transaktionsprotokoll wiederhergestellt wird?
EDIT:
Erste Frage ist Duplikat this serverfault question. Aber ich möchte immer noch die zweite Frage beantwortet: Warum ist es nicht möglich, SELECT-Anweisungen auszuführen, während das Transaktionsprotokoll wiederhergestellt wird?
Der Grund für das Sperren der Datenbank besteht darin, die Konsistenz der Datenbankdaten zu erzwingen. –
Sicher ist ein DB-Lock Overkill? wenn Konsistenz das Problem war? Normale Verriegelung könnte gelten? Oder eskaliert die Sperre während der Wiederherstellung, bis die gesamte Datenbank gesperrt ist? – Bravax
@ John Sansom: Aber wenn die sekundäre db schreibgeschützt ist (nur SELECTs, keine INSERT oder UPDATE). Dann verschwindet der Konsistenzgrund, nicht wahr? – codeape