VPN nutrūksta praėjus dvidešimčiai minučių nuo indekso perstatymo pradžios, jūsų SQL klientas rodo nutrūkusį ryšį, o akivaizdus klausimas tame klaidos pranešime atsakymo neturi. Ar sakinys baigėsi, buvo atšauktas, ar tęsė darbą be jūsų? Prisijungti iš naujo ir išsiųsti iš naujo yra blogiausias iš trijų variantų, nes vieną neaiškų rezultatą paverčia dviem galimais. Perkelkite darbą į ką nors su ilgalaikiu savininku prieš kitą langą.

Ko ryšio klaida jums nepasako

Kliento pusės klaida apibūdina klientą. Ji praneša, kad lizdas buvo uždarytas, o ne ką serveris padarė su transakcija. Sakinys gali vis dar vykdyti, galėjo būti patvirtintas prieš pat ryšiui nutrūkstant arba atšauktas, kai jo sesija buvo išvalyta. Visi trys jūsų nešiojamajame kompiuteryje pateikia tą patį pranešimą.

Tai gali išspręsti tik serverio būsena. Pažiūrėkite ten, prieš ką nors nuspręsdami.

Perduokite darbą serverio pusės savininkui

Darbui, kuriam nereikia žmogaus priežiūros, leiskite duomenų bazės serveriui turėti vykdymą. SQL Server Agent vykdo užduotis pagal poreikį arba pagal grafiką ir įrašo kiekvieną vykdymą, todėl užduoties gyvavimo ciklas nepriklauso nuo jūsų VPN sesijos. Užduoties tapatybei reikia būtent tų teisių, kurių reikalauja užduotis, o ne viso administratoriaus interaktyvaus konteksto. Tada nešiojamasis kompiuteris pradeda darbą ir skaito rezultatus, o ne būna procesas, kuris palaiko jį gyvą.

EXEC msdb.dbo.sp_start_job @job_name = N'nightly-customer-reindex';

Agent prieinamumas priklauso nuo įdiegtos versijos ir paslaugos. Naudokite mechanizmą, kurį jūsų platforma iš tikrųjų teikia, o ne manykite, kad šis yra visur.

Šuolio serveris netoli duomenų bazės sutrumpina kelią ir vertas turėti, bet jis nekeičia nuosavybės klausimo. Sesija vis tiek baigiasi, kai baigiasi tinklas. Naudokite jį stebėjimui, o ne kaip tai, kas palaiko darbą gyvą.

Palikite įrašą, kurį galės perskaityti kita sesija

Užsirašykite užduoties pavadinimą arba identifikatorių, tikslinę duomenų bazę ir rezultatą, kurio tikitės. Būtent šis įrašas leidžia kitai sesijai ar kitam žmogui atsakyti į klausimą, į kurį klaida neatsakė. Be jo lieka miglotas atsiminimas apie atnaujinimą ir jokio būdo patikrinti.

EXEC msdb.dbo.sp_help_jobhistory @job_name = N'nightly-customer-reindex';

Istorija rodo rezultatą ir laiką kiekvienam žingsniui, o tai naudingiau nei viena sėkmės vėliava. Užduotims, kurios keičia duomenis, pridėkite ir pačios programos patikrinimą: eilučių skaičių, kontrolinę sumą ar užduoties įrašytą būsenos eilutę. Du nepriklausomi įrašai yra tai, kas padaro pakartojimą saugų, o įrašyta užduoties istorija yra pirmasis iš jų.

Suderinkite prieš siųsdami iš naujo

Kai stebėjimo ryšys dingsta, suraskite esamą vykdymą, prieš pradėdami kitą. Perskaitykite jo žingsnių rezultatus ir nuspręskite, ar darbas buvo patvirtintas, iš dalies atliktas, ar niekada neprasidėjo. Tik tada taikykite pakartojimo taisyklę, kurią apibrėžia darbo eiga, nes aklas pakartotinis siuntimas gali dubliuoti įkėlimą arba antrą kartą nepavykti įpusėjus.

Išsaugokite ilgalaikį savininką ir patikrinamą rezultatą, ir trumpas prieigos sutrikimas tampa nepatogumu, o ne spėjimu. Toks ir yra visas dizaino tikslas: darbas turėtų gyventi ilgiau nei jį užsakiusi sesija.

Susiję straipsniai