Abfrage in MS SQL Studio automatisch stündlich ausführen

13

Ich unterstütze eine Anwendung in einem großen Unternehmen. Eine meiner Aufgaben besteht darin, Daten zu bereinigen. Ich muss jede Stunde eine Abfrage ausführen und möchte sie automatisieren. Aufgrund von Organisationsrichtlinien kann ich keine SQL Server-Agent-Jobs erstellen oder das Schema ändern. Ich kann nur Daten bearbeiten.

Ein endloses

WHILE(1=1)
BEGIN 
WAITFOR DELAY '01:00';
--do work
END

macht den Job für mich, aber ich zucke bei dem Gedanken an eine dauerhafte Verbindung mit den Schultern.

Idealerweise würde ich die MS SS selbst skripten, um jede Stunde einen bestimmten Code auszuführen, aber ich bin mir nicht sicher, ob dies möglich ist.

Gibt es eine Lösung für dieses Problem?

Ivan Koshelev
quelle
1
Können Sie Windows Sceduler auf Ihrem PC verwenden?
Sepupic
12
Fragen Sie jemanden, der die Erlaubnis hat, dies für Sie zu planen.
Herr Magoo
@sepupic Das ist mein nächstes Forschungsland, wenn mir nichts in MS SS helfen kann.
Ivan Koshelev
Genau. Ich würde mich sehr unwohl fühlen, wenn ich Loop-Code auf meinem Client-Computer laufen lasse. Was ist, wenn Ihr PC abgestürzt ist, jemand den Stecker gezogen hat usw. Ich habe in ähnlichen Umgebungen gearbeitet, in denen SQL-Jobs für App-Teams nicht verfügbar waren - weil wir eine alternative Option hatten, AutoSys oder ein anderes Scheduling-Tool auf einem Anwendungsserver auszuführen . Versuchen Sie herauszufinden, wie andere geplante Aufgaben verwaltet werden. Eine andere Problemumgehung kann die Verwendung von SQL Server Reporting Services sein . Nicht ideal, weiß ich ...
Terry C
9
Die richtige Lösung besteht darin, die Datenbankadministratoren aufzufordern, einen SQL Server-Agentenjob zu erstellen, um diese Bereinigung stündlich auszuführen. Dann finden Sie heraus, warum Sie Daten in der Datenbank erhalten, die so oft "aufgeräumt" werden müssen, und beheben Sie diese .
Alroc

Antworten:

22

Ihr Freund ist sqlcmd (Microsoft Technet)

  1. Erstellen Sie eine SQL-Datei mit dem Skript, das zum Ausführen Ihres Bereinigungsjobs erforderlich ist
  2. Führen Sie das Skript mit sqlcmd.exe und den erforderlichen Parametern aus
  3. Erstellen Sie eine Windows Scheduled Task und fügen Sie den Befehl mit allen erforderlichen Parametern hinzu

Z.B

sqlcmd -d YOUR_DB -E -i YOUR_SCRIPT.SQL -o OUTPUTFILE.TXT 

Viel Glück.

John aka hot2use
quelle
4
Stellen Sie sicher, dass diese Skripts zusammen mit der geplanten Aufgabe und nicht mit dem Entwicklungscomputer auf einem geeigneten App- / Tool-Server gespeichert sind.
GER
7

Sie benötigen Management Studio nicht, um Abfragen auszuführen.

Wenn Sie wirklich keine Möglichkeit haben, jemanden einen Job für Sie planen zu lassen, sollten Sie sich mit sqlcmd befassen, wie in der Antwort von hot2use angegeben

Wenn Sie eine Version verwenden, die nicht unterstützt wird (da Sie keine Version angegeben haben), gibt es auch osql , einen Befehlszeilenclient, das Tool ist jedoch veraltet.

Sie können dann einen Befehl mit einem beliebigen Scheduler planen (zum Beispiel Windows Task Scheduler) und so etwas ausführen:

OSQL -E -i c:\temp\dowork.sql

Sehen Sie in der Dokumentation nach, welche Optionen Sie für die Serverauswahl und -authentifizierung haben.

Tom V - Team Monica
quelle
-1

Die Verwendung von "SQL Server Agent" in MS SQL Studio (erweitern Sie Ihren Server im Objekt-Explorer und er sollte normalerweise am Ende der Liste stehen) ist wahrscheinlich die beste Wahl.

Dadurch wird ein Job erstellt, der in festgelegten Intervallen ausgeführt werden kann. Die Jobs werden als Dienst auf dem Server und nicht auf dem Client ausgeführt. Dies bedeutet, dass der Job weiterhin ausgeführt wird, wenn der Client die Verbindung trennt und der Server neu gestartet wird (aus einem unbekannten Grund), ohne dass Sie ihn erneut initialisieren müssen.

Der Nachteil ist, dass Sie wahrscheinlich erhöhte Zugriffsrechte benötigen, um dies zu tun.

tc
quelle
3
Sie haben dieses Bit in der Frage wahrscheinlich übersehen: Aufgrund von Organisationsrichtlinien kann ich keine SQL Server-Agent-Jobs erstellen [...]
Andriy M
@Andriy: Es ist immer noch die richtige Antwort. Wir sollten Menschen nicht dabei helfen, IT-Schatten zu legen, die den Wünschen ihrer Organisation entgegenstehen.
Dylan Knoll
1
@DylanKnoll: Nun, ich denke, es wäre durchaus sinnvoll, wenn der Beantworter anerkennt, dass das OP die Richtlinie erwähnt, und Argumente gegen ihre Dummheit hinzufügt (etwas in der Art Ihres Kommentars zum Beispiel), aber "sollte nicht helfen"? Die vorgeschlagene und akzeptierte Option sieht nicht allzu grausam aus, sodass das Festhalten an Grundsätzen in diesem Fall etwas hart erscheinen würde.
Andriy M
Ich verstehe das auch, aber was ist mit der DBAs-Perspektive? Hört sich an, als würde jemand versuchen, Fehler im DB-Design zu verbergen, damit sie nicht ans Licht kommen.
Dylan Knoll
1
Es lautete "SQL Server-Jobs", bevor es in "SQL Server-Agent-Jobs" geändert wurde. Ich glaube nicht, dass Ersteres eine andere Bedeutung haben kann als Letzteres. (Es war übrigens nicht das OP, das das herausgegeben hat; es war eine Person, die den leicht fehlerhaften Begriff genau so verstand wie ich und ihn korrigierte.) Der ursprüngliche Wortlaut ist jedoch noch leichter zu übersehen. So oder so, ich behaupte immer noch, das war ein Versehen auf Ihrer Seite :)
Andriy M