2011-05-19 14 views
6

Zastanawiam się, czy istnieje sposób na użycie zaplanowanych zadań w SQL Azure? Każda pomoc jest doceniana.Zaplanowane zadania z Sql Azure?

Chodzi o to, że chcę uruchamiać proste, jednoliniowe oświadczenie każdego dnia i chciałbym zapobiec ustawieniu roli robota.

+0

Pojedziemy na http://www.mygreatwindowsazureidea.com/ i zagłosujemy na tę funkcję! – ryancrawcour

Odpowiedz

6

Dzisiaj nie ma odpowiednika SQL Agent dla SQL Azure. Będziesz musiał zadzwonić do wyciągu z jednej linii z zadania w tle. Jeśli jednak masz już ról internetowych, możesz łatwo odradzić wątek, aby obsłużyć to w roli internetowej bez konieczności tworzenia roli pracownika. Blogowałem o koncepcji here. Aby utworzyć wątek, możesz to zrobić w procedurze obsługi zdarzenia OnStart(), w której instancja roli nie została jeszcze dodana do modułu równoważenia obciążenia) lub w metodzie Run() (w której instancja roli została dodana do obciążenia stabilizator). Zwykle dobrym pomysłem jest zrobienie konfiguracji w OnStart().

Jedna uwaga, która może nie być oczywista, niezależnie od tego, czy wywołujesz tę komendę we własnej roli roboczej, czy w wątku tła istniejącej roli internetowej: Jeśli zmienisz swoją rolę na, powiedzmy, dwie instancje, musisz upewnić się, że codzienne wywołanie następuje tylko z jednej z instancji (w przeciwnym razie można by uzyskać albo duplikaty, albo operację, która może kosztować wiele razy). Istnieje kilka technik, których możesz tego uniknąć, na przykład blokada wiersza tabeli lub dzierżawa blob Azure Storage. W pierwszym przypadku możesz użyć tego wiersza do przechowywania znacznika czasu ostatniego wykonania operacji. Jeśli zdobędziesz blokadę, możesz sprawdzić, czy operacja nastąpiła w określonym oknie czasowym (może godzinę?), Aby zdecydować, czy jedna z innych instancji już ją wykonała. Jeśli nie uda ci się uzyskać blokady, możesz założyć, że inna instancja ma blokadę i wykonuje polecenie. Istnieją inne techniki - to tylko jeden pomysł.

+0

Brzmi interesująco. – BitKFu

+0

hmmm. ale mam tylko rolę usługi WCF w miejscu. Czy rola usługi WCF może być przeciążona? – BitKFu

+1

Termin "rola" jest synonimem "szablonu maszyny wirtualnej". Wszystkie role Windows Azure odpowiadają systemom Windows Server 2008 z dodatkiem SP2 lub Windows Server 2008 R2. Podobnie jak rola internetowa i rola pracownika, rola internetowa WCF ma funkcję OnStart() i Run(). Możesz uruchomić swoje zadania w tle w dowolnym z nich. –

3

Oprócz odpowiedzi Dawida, jeśli masz dużo zaplanowanych zadań zrobić to może być warte patrząc na:

(można użyć quartz.net w wątku, który David wspomniano, ale lokad.cloud wymagałoby nieco większe zmiany architektoniczne)

+0

+1 dla wstępnie zbudowanych ram harmonogramów. Opcja Lokad jest częścią większego zestawu rozwiązań do budowania aplikacji Windows Azure, a jeśli wszystko czego potrzebujesz to planowanie, rozwiązanie quartz.net wydaje się być lepszym rozwiązaniem. –

2

Mam nadzieję, że można rozmawiać o własnej firmie. Mamy usługę internetową, która pozwala to zrobić. Możesz kliknąć ten link, aby uzyskać więcej informacji na temat tego, jak wykonać schedule execution of SQL Azure queries.

+1

Próbowałem tego rozwiązania, jest świetnie! – ryancrawcour

2

Przezwyciężyć problem wielu ról wykonujących to samo zadanie, można sprawdzić id instancji roli i upewnić się, że tylko pierwsza instancja wykona zadanie.

using Microsoft.WindowsAzure.ServiceRuntime; 

     String g = RoleEnvironment.CurrentRoleInstance.Id; 
     if (!g.EndsWith("0")) 
     { 
      return; 
     }