Automatycznie wykonuj zapytanie w MS SQL Studio co godzinę

13

Obsługuję aplikację w dużym przedsiębiorstwie, jedną z moich ról jest czyszczenie danych. Jest pytanie, które muszę wykonywać co godzinę i chciałbym je zautomatyzować. Ze względu na zasady organizacji nie mogę tworzyć zadań agenta SQL Server ani modyfikować schematu, mogę jedynie manipulować danymi.

Niekończący się

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

wykonuje za mnie pracę, ale wzruszam ramionami na myśl o perma-otwartym połączeniu.

Idealnie byłoby napisać skrypt do MS SS, aby wykonywał dany fragment kodu co godzinę, ale nie jestem pewien, czy jest to możliwe.

Czy jest jakieś rozwiązanie tego problemu?

Ivan Koshelev
źródło
1
Czy możesz używać scedulera Windows na swoim komputerze?
sepupiczny
12
Zapytaj kogoś, kto ma pozwolenie, aby zaplanować to dla Ciebie.
Mister Magoo,
@sepupic To moja kolejna kraina badań, jeśli nic w MS SS nie może mi pomóc.
Ivan Koshelev,
Zgadzam się. Czułbym się bardzo niekomfortowo z uruchomieniem pętli na moim komputerze klienckim. Co się stanie, jeśli komputer się zawiesi, ktoś odłączy go od sieci itp. Pracowałem w podobnych środowiskach, w których zadania SQL nie były dostępne dla zespołów aplikacji - ponieważ mieliśmy alternatywną opcję użycia AutoSys lub innego narzędzia do planowania działającego na serwerze aplikacji. Spróbuj dowiedzieć się, jak zarządzane są inne zaplanowane zadania? Innym obejściem może być korzystanie z SQL Server Reporting Services ? Nie idealnie wiem ...
Terry C
9
Prawidłowym rozwiązaniem jest przejście do baz danych DBA i zlecenie im utworzenia zadania agenta programu SQL Server, aby uruchamiał to czyszczenie co godzinę. Następnie dowiedz się, dlaczego tak często pobierasz do bazy danych dane, które wymagają „czyszczenia”, i napraw to .
alroc

Odpowiedzi:

22

Twój przyjaciel to sqlcmd (Microsoft Technet)

  1. Utwórz plik SQL ze skryptem wymaganym do uruchomienia zadania czyszczenia
  2. Uruchom skrypt za pomocą narzędzia sqlcmd.exe i dowolnych wymaganych parametrów
  3. Utwórz zaplanowane zadanie systemu Windows i dodaj polecenie ze wszystkimi wymaganymi parametrami

Na przykład

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

Powodzenia.

John aka hot2use
źródło
4
Upewnij się, że te skrypty są umieszczone gdzieś na odpowiednim serwerze aplikacji / narzędzi wraz z Zaplanowanym Zadaniem, a nie na komputerze programistycznym.
GER
7

Nie potrzebujesz Management Studio do wykonywania zapytań.

Jeśli naprawdę nie masz opcji, aby ktoś zaplanował dla ciebie pracę, powinieneś zajrzeć do sqlcmd, jak zaznaczono w odpowiedzi hot2use

Jeśli korzystasz z wersji, która nie jest obsługiwana (ponieważ nie określiłeś wersji), istnieje również osql, który jest klientem wiersza poleceń, ale to narzędzie jest przestarzałe.

Następnie możesz zaplanować polecenie za pomocą dowolnego harmonogramu (na przykład Harmonogram zadań systemu Windows) i uruchomić coś takiego:

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

Przejrzyj dokumentację, aby zobaczyć, jakie masz opcje wyboru serwera i uwierzytelnienia.

Tom V - spróbuj topanswers.xyz
źródło
-1

Korzystanie z „SQL Server Agent”, który znajduje się w MS SQL studio (w eksploratorze obiektów, rozwiń swój serwer i zwykle powinien znajdować się na dole listy) jest prawdopodobnie najlepszym wyborem.

Spowoduje to utworzenie zadania, które można ustawić na wykonywanie w określonych odstępach czasu. Zadania będą działać jako usługa na serwerze, a nie na kliencie. Oznacza to, że jeśli klient się rozłączy, nadal będzie działać, a jeśli serwer zostanie zrestartowany (z nieznanego powodu), zadanie będzie kontynuowane bez konieczności jego ponownego inicjowania.

Minusem jest to, że prawdopodobnie będziesz potrzebować podwyższonych praw dostępu, aby móc to zrobić.

tc
źródło
3
Prawdopodobnie przeoczyłeś ten fragment pytania: Z powodu zasad organizacji nie mogę tworzyć zadań SQL Server Agent [...]
Andriy M
@Andriy: To wciąż poprawna odpowiedź. Nie powinniśmy pomagać ludziom w śledzeniu IT w przeciwieństwie do potrzeb ich organizacji.
Dylan Knoll,
1
@DylanKnoll: Cóż, myślę, że miałoby to sens, gdyby osoba odpowiadająca potwierdziła, że ​​OP wspomniał o polityce i zawierała argumenty przeciwko jej głupocie (na przykład coś w stylu twojego komentarza), ale „nie powinno pomagać”? Sugerowana i zaakceptowana opcja nie wygląda zbyt okropnie, więc trzymanie się zasad wydaje się w tym przypadku nieco surowe.
Andriy M,
Rozumiem również twój punkt widzenia, ale co z perspektywą DBA? Wygląda na to, że ktoś próbuje ukryć błędy w projekcie DB, aby nie zostały ujawnione.
Dylan Knoll,
1
Przeczytał „Zadania serwera SQL”, zanim został zmieniony na „Zadania agenta serwera SQL”. Nie wydaje mi się, żeby to pierwsze mogło mieć inne znaczenie niż drugie. (Nawiasem mówiąc, nie był to OP, który to zredagował; była to osoba, która zrozumiała nieco błędny termin dokładnie tak, jak ja to zrobiłem, i poprawiła go). Jednak oryginalne sformułowanie jest jeszcze łatwiejsze do przeoczenia, więc, w ten czy inny sposób, nadal twierdzę, że był to przeoczenie po twojej stronie :)
Andriy M