it-swarm.com.de

Fragen Sie zwei SQL Server-Datenbanken auf zwei verschiedenen Servern ab

Angenommen, ich habe zwei Datenbankserver (DB-SERVER-1 & DB-SERVER-2), und auf jedem Server befindet sich eine einzelne Datenbank (DB1 & DB2). Beide sind SQL Server-Datenbanken.

Ist es möglich, beide Datenbanken mit demselben T-SQL-Befehl oder derselben Funktion abzufragen? Vielleicht indem Sie eine Verbindung zu einem herstellen, dann eine Ergebnismenge abrufen, dann eine Verbindung zum anderen herstellen und diese Ergebnismenge abrufen. Dann eine Vereinigung mit beiden Ergebnismengen durchführen?

Ich kann dies in .NET oder Java Code) tun, aber ich möchte dies ausschließlich von der Datenbankseite aus tun. Ist dies überhaupt möglich?

6
MacGyver

Sie können dies zwar tun, aber ich empfehle dagegen. Sie können einen Verbindungsserver auf DB-SERVER-1 Erstellen und ihn mit DB-SERVER-2 Verbinden.

(Eine Verbindungsserverdefinition wird vom DBA eingerichtet. Sie enthält die Anmeldeinformationen für den Remoteserver. Wenn Sie die Anmeldeinformationen jedes Mal selbst bereitstellen möchten, ist dies ein openquery oder openrowset Befehl.)

Sie können dann eine Abfrage unter Verwendung der vierteiligen Namenskonvention wie folgt schreiben, vorausgesetzt, Sie führen diese Abfrage unter DB-SERVER-1 Aus:

select * 
  from DB1.dbo.YourTable a
  join [DB-SERVER-2].DB2.dbo.OtherTable b on b.ID = a.ID

Serverübergreifende Joins sind bekannt für Leistungsprobleme. Ich würde es nur zu Verwaltungszwecken tun und definitiv nicht gegen große Ergebnismengen.

4
datagod

Ich habe datagods Antwort bewertet, weil es technisch korrekt ist, wie man es erreicht. Ich würde jedoch die gegenteilige Empfehlung aussprechen. Das heißt, ich würde empfehlen, Verbindungsserver für das zu verwenden, was Sie tun. Dies liegt daran, dass Sie anscheinend die Frage zur Architektur stellen Verbundserver, die Techniken für verteilte partitionierte Ansichten verwenden .

Bei der Architektur sind viele Regeln und Standards zu implementieren. Es ist wahr, dass Verbindungsserver nicht einfach in eine Mischung geworfen werden sollten, um mehr als eine Server-Ergebnismenge zu verbinden. Es gibt Gründe, Objekte und Techniken aus den richtigen Gründen zu verwenden.

In diesem Fall habe ich erfolgreich Verbundserver/verteilte Ansichten in einem VLDB-Szenario verwendet, für das mehrere Server erforderlich waren. Darum geht es bei dieser Technik. Es handelt sich um fortgeschrittene Dinge, seien Sie also gewarnt, aber es beantwortet genau das, was Sie tun müssen, um Verbindungsserver für den Zweck der Verbundserver/verteilten Ansichten ordnungsgemäß zu verwenden.

Ich wollte, dass ein Server unser aktuelles Jahr der Versanddaten ist und dann die nächsten 2-7 Jahre auf zusätzlichen Servern für die Archivierung. Aufgrund des Datenvolumens musste ich mehrere Server verwenden und die unabhängigen Serverressourcen für jede Abfrageergebnismenge verwenden, abhängig vom Jahr der Anforderung.

Die Technologie der verteilten Ansicht in der Engine wusste, zu welchem ​​Server die Ergebnisse abgerufen werden müssen. Wegen der Check Constraints. Ist es teuer: ja; funktioniert es wie erforderlich: ja. Sind Verbindungsserver stabil: Ja, aber wir mussten den Fehlerpunkt berücksichtigen. Es ist also nichts, was normalerweise mit ähnlichen Anforderungen nicht geplant werden kann.

Stellen Sie sicher, dass die verteilten Abfragen ordnungsgemäß erstellt und auf Leistung und Fehlerpunkte getestet wurden.

Zusammenfassend: Möglich, ja; Machbar, ja; Empfohlen, da es für Verbundserver und verteilte Abfragen benötigt wird. Ja; Sehr zu empfehlen, nicht ohne gründliches Verständnis und Testen der Techniken.

4
SnapJag