Kto utworzył, skasował lub zmodyfikował obiekt bazy danych

Jak można się dowiedzieć kto utworzył, skasował czy zmodyfikował obiekt w bazie danych jeśli nie ma założonego audytu? Czy to sytuacja bez rozwiązania ? Jeśli z jakiegoś powodu zniknął nam indeks, tabela i chcemy znaleźć przyczynę możemy skorzystać z funkcji fn_trace_geteventinfo oraz z zapisów w tabeli sys.trace_events. To, że w SQL Server samodzielnie nie mamy włączonego śledzenia przy pomocy trace, nie oznacza, że silnik nie monitoruje podstawowych zdarzeń. Na stałe są monitorowane zdarzenia, które można wyświetlić za pomocą poniższego zapytania. W rezultacie Dowiedz się więcej…

Jak użyć SET XACT_ABORT

SET XACT_ABORT określa, jaką akcję silnik SQL Server powinien wykonać po wystąpieniu błędów wykonań w ramach sesji. Domyślne ustawienie sesji to SET XACT_ABORT OFF, co wskazuje, że tylko instrukcja języka Transact-SQL, która zgłosiła błąd, jest wycofywana, a transakcja jest kontynuowana. W zależności od wagi błędu cała transakcja i/lub partia może zostać wycofana, nawet jeśli SET XACT_ABORT jest WYŁĄCZONE. Efektem ubocznym SET XACT_ABORT OFF jest to, że błąd anulowania/przekroczenia limitu czasu może pozostawić otwartą transakcję, więc to klient jest odpowiedzialny za oczyszczenie po Dowiedz się więcej…

Nieudokumentowana funkcja %%lockres%%

Nieudokumentowana funkcja, nazywa się %%lockres%% i jest związana z implementacją blokowania SQL Server. Silnik bazy danych implementuje hierarchię blokowania i żąda blokad na poziomie tabeli, na poziomie strony i na poziomie rekordu. Gdy wymagana jest blokada na poziomie rekordu, SQL Server nie umieszcza blokady na samym rekordzie — SQL Server po prostu generuje wartość skrótu (hash), a wynikowa wartość jest ostatecznie zablokowana. Aby obliczyć tę wartość skrótu, SQL Server używa nieudokumentowanej funkcji %% lockres%% . Funkcję tę można również wywołać na poziomie Dowiedz się więcej…

Dekodowanie Key i Page WaitResource dla zakleszczeń i blokad

W trakcie analizowania blokowań w SQL Server można często spotkać się z wpisami w XML: waitresource=“PAGE: 7:4:50256 ” lub waitresource=“KEY: 8:72046656561991169 (cd54f92b253d)” Co to oznacza ? Jak to przetłumaczyć ? Pokrótce blokada PAGE występuje na poziomie strony, a KEY na poziomie Klucza no ale po kolei. Page lock waits Jeśli mamy wpis waitresource=“ PAGE: 7:4:50256″ oznacza to, że zapytanie czekało na blokadę na poziomie strony. Silnik podaje nam po kolei PAGE: 7:4:50256 PAGE – blokada na poziomie strony 7 – jest to Dowiedz się więcej…

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ć Dowiedz się więcej…

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 Dowiedz się więcej…