Udostępnij za pośrednictwem


Współbieżność kursor (aparat bazy danych)

Microsoft SQL Server obsługuje cztery opcje współbieżność kursory serwera:

  • READ_ONLY

  • OPTYMISTYCZNA WARTOŚCIAMI

  • OPTYMISTYCZNA Z WERSJI WIERSZA

  • BLOKADY PRZEWIJANIA

  • READ_ONLY
    Pozycjonowane aktualizacji za pośrednictwem kursor nie są dozwolone, i blokady nie są przechowywane na wiersze, które wchodzą w skład zestaw wyników.

  • OPTYMISTYCZNA WARTOŚCIAMI
    Formant optymistycznej współbieżność jest standardowym elementem teorii kontrola transakcji.Optymistycznej współbieżność formantu jest używany w sytuacjach, gdy jest tylko niewielka szansę że inny użytkownik lub proces może aktualizować wiersza w polu Interwał między kiedy kursor jest otwarty, a po zaktualizowaniu wiersza.Gdy kursor zostanie otwarty za pomocą tej opcji, blokady nie są przechowywane na podstawowej wierszy, co pozwala zmaksymalizowania przepustowości.Jeśli użytkownik podejmie próbę zmodyfikowania wiersza, bieżącej wartości w wierszu są porównywane z wartościami pobierane, kiedy wiersz został ostatnio pobrana.Jeśli wartości zostały zmienione, serwer wie, że inny użytkownik lub proces już został zaktualizowany w wierszu i zwraca błąd.Jeśli wartości są takie same, serwer wykonuje modyfikacji.

    Wybranie tej opcji Współbieżność wymusza na użytkowniku lub programista zaakceptować odpowiedzialność zajmowanie sporadyczny błąd wskazujący, inny użytkownik zmodyfikował w wierszu.Typowe akcja podejmowanych przez aplikację, która odbierze ten błąd jest odświeżyć kursor, nowe wartości, a następnie umożliwiają użytkownikowi podejmowanie decyzji dotyczącej wykonywania modyfikacji na nowe wartości.text, ntext, a image kolumny nie są używane do porównywania współbieżność w SQL Server w wersja 6.5 lub starszej.

  • OPTYMISTYCZNA Z WERSJI WIERSZA
    Tę opcję kontroli optymistycznej współbieżność opiera się na przechowywanie wersji wiersza.Z wersja wiersza tabela podstawowej musi mieć identyfikator wersja z pewnego typu, na serwerze można użyć w celu ustalenia, czy wiersz został zmieniony po odczytu do kursor.W SQL Server, że funkcja jest udostępniany przez timestamp Typ danych, czyli liczbę binarną, która wskazuje względną sekwencji zmian w bazie danych. Każda baza danych zawiera globalne bieżącą wartość sygnatury czasowej, **@@**DBTS.Przy każdym wierszu z timestamp Kolumna zostanie zmodyfikowany w jakikolwiek sposób SQL Server Zapisuje bieżący **@@**DBTS wartości timestamp kolumny, a następnie przyrostach **@@**DBTS.Jeśli tabela ma timestamp kolumna, a następnie sygnatury czasowe są pobierane niedziałający poziom wiersza. Serwer może następnie porównywać bieżącą wartość sygnatury czasowej wiersza o wartości sygnatury czasowej, który był zapisany, gdy wiersz został ostatnio pobieranych do ustalenia, czy wiersz został zaktualizowany.Serwer nie ma do porównywania wartości ze wszystkich kolumn, tylko timestamp Kolumna. Jeśli aplikacja żąda optymistycznej współbieżność z wersji wiersza w tabela, która nie ma timestamp kolumna, kursor domyślnie oparte na wartości optymistycznej współbieżność formantu.

    Uwaga

    Liczby kursorów otwarte za pośrednictwem urządzenie źródłowe dane zdalne aktualizacje nie są obsługiwane przez kursor Jeśli zdalnego źródłowych nie zawiera kolumna sygnatury czasowej.

  • BLOKADY PRZEWIJANIA
    Ta opcja implementuje Współbieżność pesymistyczna formantu, w którym aplikacja próbuje zablokować wiersze podstawowej bazy danych w czasie, są one odczytywane do zestaw wyników kursor.W przypadku korzystania z serwera kursory, blokada aktualizacji jest umieszczany w wierszu przeczytaniu do kursor.Jeśli kursor zostanie otwarty w obrębie transakcji, blokada aktualizacji transakcji jest używana, aż do chwili, kiedy transakcja przekazana lub wycofana; blokada kursor jest usuwane, gdy pobieranych następnego wiersza.Jeśli kursor zostanie otwarty poza transakcją, blokada jest usuwane, gdy pobieranych następnego wiersza.Dlatego kursor powinien być otwarty w transakcji za każdym razem, gdy użytkownik chce Współbieżność pesymistyczna pełnej kontroli.Blokada aktualizacji uniemożliwia pobieranie aktualizacji lub wyłączności blokady, co zapobiega aktualizacji wiersza innych zadań inne zadania.Blokada aktualizacji, jednak nie blokuje blokady udostępnionego, to nie zapobiega innych zadań odczytywania wiersza, chyba że drugie zadanie również żąda odczytu z blokada aktualizacji.

Blokowanie przewijania

Te opcje współbieżność kursor może generować blokady przewijania, w zależności od wskazówek blokowania, określona w instrukcja SELECT w definicji kursora.Blokady przewijania są nabytych na każdy wiersz pobrania i przechowywane do czasu następnego pobrania lub zamknięciu za kursor, zależności od tego, co nastąpi najpierw.Na następnej pobierania serwer uzyskuje blokad przewijania w pobrania nowych wierszach i zwolniony blokad przewijania dla wierszy w poprzednich pobrania.Blokady przewijania są niezależne od blokady transakcji i może trwać poza zatwierdzanie lub wycofywanie operacji.Jeśli opcję, aby zamknąć kursorów na zatwierdzanie jest wyłączone, zatwierdzanie jakiekolwiek otwarte kursory nie zamyka się i przewijania blokady są zachowywane w przeszłości zatwierdzanie do zachowania izolacji pobranych danych.

Typ przewijania blokad nabyte zależy od opcji Współbieżność kursor i blokowania wskazówki w instrukcja SELECT kursor.

Uwaga

Blokady przewijania są obsługiwane tylko w przypadku zestawu kluczy o zmiennych i dynamiczne kursory.

Wskazówki blokowania

W trybie tylko do odczytu

Optymistyczna wartościami

Optymistyczna z wersji wiersza

Blokowanie

Nie wskazówki

-

-

-

Aktualizacja

NOLOCK *

-

-

-

-

HOLDLOCK

-

-

-

Aktualizacja

UPDLOCK

-

-

-

Aktualizacja

TABLOCKX

-

-

-

Aktualizacja

Wszystkie inne

-

-

-

Aktualizacja

* Określanie wskazówka NOLOCK dzięki tabela, na którym jest określony, tylko do odczytu przy użyciu kursor.

Określanie opcje współbieżność kursor

Opcje współbieżność są określone inaczej w każdym środowisku kursor:

  • Transact-SQL kursory

    Określ słowa kluczowe TYLKO_DO_ODCZYTU SCROLL_LOCK i OPTIMISTIC na instrukcja DECLARE kursor.Słowo kluczowe OPTYMISTYCZNEGO określa optymistycznego z wersji wiersza Transact-SQL kursory nie obsługują optymistycznego z opcją współbieżność wartości.

  • Aplikacje ADO

    Określ adLockReadOnly, adLockPessimistic, adLockOptimistic, or adLockBatchOptimistic in the LockType Właściwość Zestaw rekordów obiektu.

  • Aplikacje ODBC

    Atrybut deklaracji SQL_ATTR_CONCURRENCY SQL_CONCUR_READ_ONLY, SQL_CONCUR_ROWVER, SQL_CONCUR_VALUES lub SQL_CONCUR_LOCK.