none
CentralManagementServer - Query Ergebnisse in DB auf dem CMS RRS feed

  • 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

    Montag, 2. März 2015 14:29

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


    Montag, 2. März 2015 21:03

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://blog.sqlauthority.com/2014/01/02/sql-server-tools-for-proactive-dbas-central-management-server-notes-from-the-field-009/

      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




    Montag, 2. März 2015 17:52
    Moderator
  • ...

    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


    Montag, 2. März 2015 21:03
  • 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

    Dienstag, 3. März 2015 12:46
  • ...

    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

    Dienstag, 3. März 2015 13:03
  • Vielen Dank.
    Ich werde es schnellstmöglich ausprobieren.

    Danke dir.
    Markus

    Dienstag, 3. März 2015 17:57