Wenn Sie sich mit den Interna der Implementierung der Snapshot-Isolation in SQL Server befassen, wird klar, warum der Remotezugriff nicht unterstützt wird.
Wenn die Snapshot-Isolation aktiviert ist, werden bis zu 14 Byte Versionsinformationen an jede geänderte Zeile angehängt. Die zusätzlichen Bytes enthalten die Transaktionssequenznummer der Transaktion, die die Zeile geändert hat, sowie einen Zeiger auf die versionierte Zeile in tempdb.
Bei einer Transaktion, die bei der Snapshot-Isolation ausgeführt wird, wird die Version einer Zeile angezeigt, die zum Zeitpunkt des Starts vorhanden war (die zum Zeitpunkt der Ausführung der ersten Anweisung vorhanden war und nicht BEGIN TRAN
). Es ist die Transaktionssequenznummer, mit der die richtige Version im Versionsspeicher identifiziert wird. Da es keine Korrelation zwischen den Sequenznummern auf Ihrem lokalen und dem Remote-Server gibt, kann der Remote-Server die richtige Version nicht abrufen.
Es gibt zweifellos Möglichkeiten, wie eine SQL Server-zu-SQL Server-Verbindung dieses erste Problem lösen kann, falls das SQL-Entwicklungsteam entscheidet, dass es sich lohnt, dies zu tun. Es gibt jedoch ein zweites Problem: Wie würden Sie mit dem Entfernen von Versionen aus dem Versionsspeicher umgehen?
Der für die Bereinigung verantwortliche Hintergrundprozess ermittelt anhand der Transaktionssequenznummer erneut, ob noch eine Zeilenversion erforderlich ist. Dies erfordert lediglich die Identifizierung der ältesten laufenden Transaktionssequenznummer und das Entfernen aller älteren Versionen. Mit einer Remote-Verbindung ... klingt hässlich, weshalb es nicht unterstützt wird.
Könnte ein anderer Ansatz gewählt werden, vielleicht die Durchsetzung REPEATABLE READ
oder SERIALIZABLE
die Remote-Verbindung? Nein, nicht ohne die Konsistenz zu beeinträchtigen, da die Zeile auf dem Remote-Server zum Zeitpunkt des Starts Ihrer lokalen Transaktion nicht gesperrt werden konnte. Sie konnten sich nicht auf das Verhalten verlassen und die ACID-Konformität beeinträchtigen.
Ressourcennutzung bei der Zeilenversionierung und SQL Server 2005 Zeilenversionsbasierte Transaktionsisolation enthalten die meisten wichtigen Details.
Wie Sie dies am besten umgehen können, hängt davon ab, was Sie erreichen möchten. Wenn Sie Ihr spezifisches Szenario erweitern können, können wir die alternativen Ansätze untersuchen.