SQL server MERGE auf einer großen Tabelle mit kleiner Protokolldatei

Ich laufe eine MERGE-statement auf einem großen Tisch (5M von Zeilen) mit einer kleinen Protokolldateigröße (2GB). Ich bekomme einen Fehler:

Merge für MyTable fehlgeschlagen: Das Transaktionslog für die database 'MyDb' ist aufgrund von 'ACTIVE_TRANSACTION' voll.

Könnte dies durch eine andere Aktion getriggers werden, als die Protokolldatei zu verlängern? Ich kann es mir nicht leisten, die Log-file zu erweitern.

Wenn Sie eine feste Protokolldateigröße haben, haben Sie im Wesentlichen zwei Möglichkeiten:

  1. Ändern Sie den Wiederherstellungsmodus Ihrer database von FULL zu BULK-LOGGED. Sie verlieren die Fähigkeit, Punkt-in-time-Erholung in diesem timeraum zu tun, aber es ermöglicht Ihnen, schnell die Operation und dann wieder zurück. Es gibt noch andere Einschränkungen, also musst du etwas Forschung machen, um sicherzustellen, dass dies das ist, was du machen willst.

  2. Anstatt das Transaktionslog zu ändern, können Sie einen Batching-Ansatz verabschieden, um kleine Chargen von Änderungen zu einer time zu begehen, so dass das Protokoll nach Bedarf spülen kann.