Benutzer mit den meisten Antworten
CentralManagementServer - Query Ergebnisse in DB auf dem CMS

Frage
-
Hallo,
ich habe einen Central Management Server eingerichtet. Wenn ich ich eine Query gegen die verbundenen Server absetzte funktioniert dies auch tadellos.Nun habe ich einige Abfragen, die ich gerne in ein DB schreiben möchte.
Bei einem Query über den CMS wird aber jeder einzelne Server befragt.Wie bekomme ich nun die Ergebnisse in eine zentrale DB geschrieben ?
Oder geht das nur über Powershell ?
Danke
Markus
Antworten
-
...
wenn ich die Funktionsweise des CMS richtig verstanden habe, liefert eine Abfrage die Ergebnisse aller abgefragter Server in einem Resultset.
Daher sollte es möglich sein, diese Rückgabe auch in einem INSERT INTO Statement zu verwenden, auch wenn intern 4 Abfragen einer entsprechenden Anzahl an ausgeführten INSERT INTO Statements verwendet werden, also bspw.:
INSERT INTO <ZentraleDatenbank>.dbo.<Tabelle> ( Spalte1, Spalte2, Spalte3 ) SELECT Spalte1, Spalte2, Spalte3 FROM <ViewOderTabelle> ...
...
So funktioniert das leider nicht.
Multiserver-Queries, wie sie auch heissen, sind nichts anders als einzeln ausgeführte Abfragen, die im Management Studio in ein Result zusammengefasst werden - also nicht auf einem der Server.
Was man aber sehr wohl machen kann, ist, über die Multiserverabfrage JEWEILS einen einzigen Zielserver zu beschreiben, und zwar via Linked Server.
INSERT INTO CMS.ZentraleDatenbank.Schema.Tabelle SELECT Spaltenliste FROM DB.Schema.Tabelle
Der Linked Server muss dann natürlich auf allen Servern identisch bestehen. - Was ja per Multiserverquery auch ganz fix geht :)
Letztlich kann man natürlich auch gleich mehrere Linked-Server-Queries für Insert...Select schreiben aber muss man ja nicht :)
Andreas Wolter (Blog | Twitter)
MCSM: Microsoft Certified Solutions Master Data Platform, MCM, MVP
www.SarpedonQualityLab.com | www.SQL-Server-Master-Class.com- Bearbeitet Andreas.WolterMicrosoft employee Dienstag, 3. März 2015 19:54 Typo
- Als Antwort markiert Stefan FalzModerator Dienstag, 21. April 2015 23:19
Alle Antworten
-
Hallo Markus,
wenn ich die Funktionsweise des CMS richtig verstanden habe, liefert eine Abfrage die Ergebnisse aller abgefragter Server in einem Resultset.
Daher sollte es möglich sein, diese Rückgabe auch in einem INSERT INTO Statement zu verwenden, auch wenn intern 4 Abfragen einer entsprechenden Anzahl an ausgeführten INSERT INTO Statements verwendet werden, also bspw.:
INSERT INTO <ZentraleDatenbank>.dbo.<Tabelle> ( Spalte1, Spalte2, Spalte3 ) SELECT Spalte1, Spalte2, Spalte3 FROM <ViewOderTabelle> ...
Siehe dazu bspw. auch:
http://sqlandme.com/2011/05/07/multiple-server-query-execution-management-studio/
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Montag, 2. März 2015 18:00
-
...
wenn ich die Funktionsweise des CMS richtig verstanden habe, liefert eine Abfrage die Ergebnisse aller abgefragter Server in einem Resultset.
Daher sollte es möglich sein, diese Rückgabe auch in einem INSERT INTO Statement zu verwenden, auch wenn intern 4 Abfragen einer entsprechenden Anzahl an ausgeführten INSERT INTO Statements verwendet werden, also bspw.:
INSERT INTO <ZentraleDatenbank>.dbo.<Tabelle> ( Spalte1, Spalte2, Spalte3 ) SELECT Spalte1, Spalte2, Spalte3 FROM <ViewOderTabelle> ...
...
So funktioniert das leider nicht.
Multiserver-Queries, wie sie auch heissen, sind nichts anders als einzeln ausgeführte Abfragen, die im Management Studio in ein Result zusammengefasst werden - also nicht auf einem der Server.
Was man aber sehr wohl machen kann, ist, über die Multiserverabfrage JEWEILS einen einzigen Zielserver zu beschreiben, und zwar via Linked Server.
INSERT INTO CMS.ZentraleDatenbank.Schema.Tabelle SELECT Spaltenliste FROM DB.Schema.Tabelle
Der Linked Server muss dann natürlich auf allen Servern identisch bestehen. - Was ja per Multiserverquery auch ganz fix geht :)
Letztlich kann man natürlich auch gleich mehrere Linked-Server-Queries für Insert...Select schreiben aber muss man ja nicht :)
Andreas Wolter (Blog | Twitter)
MCSM: Microsoft Certified Solutions Master Data Platform, MCM, MVP
www.SarpedonQualityLab.com | www.SQL-Server-Master-Class.com- Bearbeitet Andreas.WolterMicrosoft employee Dienstag, 3. März 2015 19:54 Typo
- Als Antwort markiert Stefan FalzModerator Dienstag, 21. April 2015 23:19
-
Hi Andreas,
mein erster Gedanke war der Gleich wie von Stefan. Es hat wie erwartet auch nicht funktioniert.
Lösungsansatz bedeutet das ich auf jedem abgefragten Server einen LinkedServer erstellen muss.
Die Abfrage soll von dem CMS aus gestartet werden. Den kann ich aber nicht auf sich selbst verweisen lassen.
Danke
-
...
Lösungsansatz bedeutet das ich auf jedem abgefragten Server einen LinkedServer erstellen muss.
Die Abfrage soll von dem CMS aus gestartet werden. Den kann ich aber nicht auf sich selbst verweisen lassen.
...
Hallo Markus,
genau das. und per Multiserverquery musst Du sp_ddlinkedserver auch nur einmal ausführen :)
Und Ja, leider ist der CMS selber von diesen Multiserverqueries ausgenommen. Ich glaube man kann mittels Alias-Namen oder auch versch. Ports da etwas tricksen. Hab ich aber lange nicht mehr gemacht.
Ansonsten musst Du damit leben, die Abfrage 2 mal zu starten. Einmal für den CMS selber, und einmal für alle anderen Server.
Andreas Wolter (Blog | Twitter)
MCSM: Microsoft Certified Solutions Master Data Platform, MCM, MVP
www.SarpedonQualityLab.com | www.SQL-Server-Master-Class.com