Ich habe einige Standard-SQL-Anweisungen, die ich für mehrere Datenbanken auf einem einzelnen Server ausführe, um Probleme zu diagnostizieren:
select
so.name,
so.type,
MAX(case when sc.text like '%remote%' then '' ELSE 'N' END) AS Relevant,
@@ServerName as Server,
DB_Name() as DBName
from
sysobjects so with (nolock)
join syscomments sc with (nolock) on so.id = sc.id
where (sc.text like '%emote%')
group by so.name, so.type
order by so.type, so.name
Wie kann ich dies für alle Datenbanken auf einem einzelnen Server ausführen? (Neben dem manuellen Herstellen einer Verbindung zu einem bestimmten Zeitpunkt und dem Ausführen)
sql-server
Andrew Bickerton
quelle
quelle
Antworten:
sp_MSForEachDB
Eine Option ist sp_MSForEachDB . Es ist undokumentiert, aber dennoch nützlich
Eine Suche in den Interwebs hat auch viele weitere Beispiele
Hinweis: Da es sich um eine nicht unterstützte Funktion handelt (die einige bekannte Fehler aufweist), möchten Sie möglicherweise Ihre eigene Version schreiben (danke @Pradeep).
Das obige SQL-Beispiel müsste folgendermaßen umstrukturiert werden:
ANMERKUNGEN:
quelle
, ''?'' AS DBName
einer beliebigen Select-Anweisung hinzufügen . Nach meinem BeispielNur meine $ 0.05: SQL Multi Script (Ausführung mehrerer Skripte gegen mehrere SQL Server).
quelle
Das SSMS Tools Pack funktioniert einwandfrei und ist für Datenbankserver vor 2012 kostenlos. Die Funktion: "Auf mehreren Zielen ausführen" - http://www.ssmstoolspack.com/Features?f=6
quelle
Es gibt eine weitere Methode, die eine Ausgabe in einer einzelnen, halb zusammengeführten Ergebnismenge liefert. Öffnen Sie zuerst Registrierte Server und erstellen Sie eine neue Gruppe unter Lokale Servergruppen. Registrieren Sie dann Ihren Server einmal für jede Datenbank und setzen Sie die Standard-Datenbank jeweils auf die gewünschte.
Wenn Sie fertig sind, klicken Sie mit der rechten Maustaste auf Ihre Gruppe und wählen Sie Neue Abfrage. Das sich öffnende Abfragefenster hat "mehrere", in denen normalerweise ein Servername in der Statusleiste angezeigt wird. Alle in diesem Fenster ausgeführten Abfragen werden auf jedem registrierten Server ausgeführt, der sich in der Gruppe befand. Die erste Spalte der Ergebnisse ist der Name des registrierten Servers. Die Ergebnismenge wird durch diese erste Spalte fragmentiert, und die Reihenfolge der Testamente wird nur innerhalb dieses Fragments ausgeführt.
Sehr leistungsstarke, aber übersehene Funktionalität für den Fall, dass Sie routinemäßig dasselbe SQL auf mehreren Servern ausführen müssen.
quelle
Mein Unternehmen hat ein Tool namens xSQL Script Executor entwickelt . Es ist kostenlos für den persönlichen Gebrauch und für mich hat es die Bereitstellung von Skripten auf mehreren Zielen sehr einfach gemacht.
quelle
Ich habe dieses Tool entwickelt: https://github.com/andreujuanc/TakoDeploy
Ich schreibe noch ein paar Zeilen darauf, aber es ist mittlerweile ziemlich stabil. Ich habe es gegen Produktionsdatenbanken verwendet und arbeitet wie ein Zauber.
quelle