Niektóre z najczęściej widzianych stanów SPID w SQL Server i ich znaczenie

Przedstawiam krótki opis stanów sesji (SPID), które można podejrzeć używając sp_who2 lub znanego skryptu Adama Machanica sp_whoisactive. DORMANT SQL Server resetuje sesję. ROLLBACK Sesja jest w trakcie wycofywania transakcji. SPINLOCK Zadanie sesji czeka na zwolnienie blokady spinlock. Zasadniczo oznacza, że zapytanie jest w pewnym sensie uruchomione, w którym jest zajęte oczekiwaniem w procesorze na swoją kolej. RUNNING: (Mam wątki i CPU) Ten stan oznacza, że sesja uruchomiła jeden lub więcej batchów. Po włączeniu Multiple Active Result Sets ( (MARS) sesja może uruchomić Czytaj dalej…

Klauzula OUTPUT w zapytaniach T-SQL

Chciałem napisać kilka słów o klauzuli OUTPUT stosowanej w operacjach DML języka T-SQL. Wydaje mi się, że jest to często zapominana klauzula, a nawet stwierdzam, że wiele osób o niej nie wiem. Wielokrotnie widziałem, kod który miał za zadanie zalogować jakieś zmiant w tabeli. Często stosowano do tego odpowiednie rodzaje wyzwalaczy (triggerów), gdzie w trakcie jednej z operacji DML (Delete, Insert czy Update) wykorzystywane były tabele Inserted i /lub Deleted. SQL Server automatycznie zarządza tymi tabelami i udostępnia je podczas wykonywania wyzwalaczyoraz Czytaj dalej…

Tworzymy login z podanym SID-em

Czasami zdarza się, że należy utworzyć login z góry zadanym SID-em. Problem tego typu można zaobserwować podczas korzystania z usług Log Shipping’u, AlwaysOn Availability Group czy miroringu. W momencie przełączenia się na serwer zapasowy podczas próby podłączenia się do bazy danych występuje błąd logowania. Sytuacja taka dotyczy jedynie loginów SQLowych, a nie kont do logowania się do Windows czy też kont z AD. W sytuacjach opisywanych powyżej zawsze mamy do czynienia z minimum dwoma serwerami SQL. Gdy założymy, że pracujemy z dwoma Czytaj dalej…

Prawa de Morgana

Ostatnio zauważyłem kontrolując kody w T-SQL, że młodzi deweloperzy nie pamiętają prawa de Morgana lub źle go interpretują. W celu przypomnienia takich podstaw omówimy dwa prawa. I prawo de Morgana jest prawem zaprzeczenia koniunkcji Zaprzeczenie koniunkcji dwóch zdań ∼(p∧q) jest równoważne alternatywie zaprzeczeń tych zdań (∼p)∨(∼q). (∼(p∧q))⇔((∼p)∨(∼q)) NOT(a AND b) = (NOT a) OR (NOT b) II prawo de Morgana jest prawem zaprzeczenia alternatyw Zaprzeczenie alternatywy dwóch zdań ∼(p∨q) jest równoważne koniunkcji zaprzeczeń tych zdań (∼p)∧(∼q). (∼(p∨q))⇔((∼p)∧(∼q)) NOT(a OR b) = (NOT Czytaj dalej…

Flagi, mapy bitowe w T-SQL

Flaga to liczba z jedną jedynką (lub więcej) opisująca jakąś cechę. Wartości flag nie powinny się pokrywać, chyba że się nie wykluczają – wspólna (pod)cecha. Generalnie mapy bitowe pozwalają na przechowywanie wielu wartości flag czyli wartości poszczególnych bitów mapy (flag, ustawień) w jednej liczbie. Do sprawdzania flag najlepiej jest używać operatory bitowe. 32-bitowy INT to 32 bity informacji na 4 bajtach, 32 informacje logiczne które zapisane z użyciem typu bit zajmowałyby całe 32 bajty. Operacje logiczne na Mapach bitowych: sprawdzenie ustawienia wybranych Czytaj dalej…