Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Wyjaśnij jak powstają deadlocki i omów politykę rozwiązania w SQL Server
- Jest to sytuacja wzajemnego zakleszczenia się dwóch lub większej liczby transakcji. Jeżeli przykładowo mamy pierwszą transakcję, która blokuje dane w tabeli A i próbuje zmodyfikować dane w tabeli B oraz drugą transakcję, która blokuje dane w tabeli B i próbuje zmodyfikować dane w tabeli A to pojawia się deadlock. Obie transakcje będą czekały wzajemnie na zwolnienie blokady aby móc dokończyć swoje działanie. W takiej sytuacji proces sqla przerywa jedną z transakcji zwracając błąd (tytułowy deadlock) tak aby chociaż jedna z transakcji mogła dokończyć działanie. W praktyce SQL Server przerywa transakcję, która wymaga mniejszych zasobów do wykonania rollbacku.
- W ramach jednej sesji wywołujemy transakcję:
- W ramach drugiej sesji wywołujemy transakcję operującą na tym samym zestawie danych co w efekcie prowadzi do zakleszczenia:
- Nie można o ile zależy nam na zachowaniu właściwego poziomu izolacji. Można zmniejszać ryzyko jego wystąpienia poprzez zwiększenie wydajności środowiska lub (jeżeli jest to możliwe) inną konstrukcję zapytań i samej struktury bazy danych. Całkowicie jednak tego problemu nie wyeliminujemy gdyż jest on niejako częścią logiki działania systemu bazodanowego. W praktyce aplikacje przygotowuje się do radzenia sobie z deadlockami w inny sposób – w razie jego wystąpienia transakcja, która została przerwana jest kilkukrotnie ponawiana przez aplikację. Z reguły takie postępowanie jest skuteczne o ile blokada nie jest wynikiem poważniejszego problemu.
- -------
- ‚IDENTITY’ w SQLServer jakie są korzyści i jakie są ograniczenia w jego użyciu. Jakich funkcji i zmiennych systemowych można użyć do przeczytania id nowo dodanego rekordu
- Tworząc nowa tabele przy jej kluczu publicznym możemy zmienić wartość IDENTITY na np ( 100 , 5 ). ID zaczną nie od 100 , krok zostanie ustawiony na 5.
- Aby dodać rekord do tabeli musimy użyć funkcji SET IDENTITY_INSERT następnie podajemy nazwę bazy i schematu oraz nazwę tabeli i ON, jeśli chcemy włączyć opcję lub OFF, gdy ją chcemy wyłączyć. Oprócz tego w poleceniu insert musimy wprost wymienić nazwy kolumn. Tak więc najpierw ustawiamy dla tabeli tab opcję IDENTITY_INSERT na ON.
- @@IDENTITY zwraca ostatnio nadaną wartość auto-numerowaną w całej bazie danych
- Np. SELECT @@IDENTITY
- IDENT_CURRENT zwraca wartość auto-numerowaną z konkretnej tabeli
- Np. SELECT IDENT_CURRENT(table_name);
- SCOPE_IDENTITY zwraca wartość auto-numerowaną dla bieżącego kontekstu.
- Np. SELECT SCOPE_IDENTITY();
- ---
- Jakie jest możliwe ustawienie węzłów integralności w SQLServer przy usuwaniu i modyfikowaniu rekordów będących kluczem obcym ?
- Istnieją cztery reguły usuwania i modyfikowania rekordów:
- 1. Bez akcji To jest akcja domyślna.
- Żadna akcja nie określa, że jeśli podjęta zostanie próba usunięcia lub aktualizacji wiersza kluczem, do którego odnoszą się klucze obce w istniejących wierszach w innych tabelach, zgłaszany jest błąd i wycofywane są DELETE lub UPDATE.
- 2. Kaskada Oznacza to, że jeśli podjęta zostanie próba usunięcia lub aktualizacji wiersza kluczem, do którego odnoszą się klucze obce w istniejących wierszach w innych tabelach, wszystkie wiersze zawierające te klucze obce zostaną również usunięte lub zaktualizowane.
- 3. Ustaw Null Określa, że jeśli podjęta zostanie próba usunięcia lub aktualizacji wiersza kluczem, do którego odwołują się klucze obce w istniejących wierszach w innych tabelach, wszystkie wiersze zawierające te klucze obce zostaną ustawione na NULL.
- 4. Ustaw domyślnie Określa, że jeśli podjęta zostanie próba usunięcia lub aktualizacji wiersza kluczem, do którego odnoszą się klucze obce w istniejących wierszach w innych tabelach, wszystkie wiersze zawierające te klucze obce zostaną ustawione na wartości domyślne.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement