Udostępnij za pośrednictwem


Kursor współbieżności (aparat bazy danych)

Microsoft SQL Server supports four concurrency options for server cursors:

  • TYLKO_DO_ODCZYTU

  • OPTYMISTYCZNA WARTOŚCIAMI

  • ZARZĄDZANIE WERSJAMI WIERSZA OPTYMISTYCZNY

  • BLOKADA PRZEWIJANIA

  • TYLKO_DO_ODCZYTU
    Niedozwolone są pozycjonowane aktualizacji za pośrednictwem kursor i blokady nie są aktywne w wierszach, które składają się z zestaw wyników.

  • OPTYMISTYCZNA WARTOŚCIAMI
    Optymistyczna współbieżność formantu jest standardowym elementem teorii kontroli transakcji.Optymistyczna współbieżność formantu jest używany w sytuacjach, gdy istnieje tylko nieznaczne ryzyko przez innego użytkownika lub procesu może zaktualizować wiersz w interwału między przy otwieraniu kursor i przy aktualizacji wiersza.Gdy kursor zostanie otwarty za pomocą tej opcji, bez blokowania są przechowywane na wiersze, co pomaga zmaksymalizować wydajność.Jeżeli użytkownik usiłuje zmodyfikować wiersz, bieżącej wartości w wierszu są porównywane z wartościami pobierane, gdy wiersz został ostatnio pobrana.Jeśli wartości uległy zmianie, serwer wie, że innego użytkownika lub proces został już zaktualizowany wiersz i zwraca błąd.Jeśli wartości są takie same, serwer wykonuje modyfikacji.

    Wybranie tej opcji Współbieżność zmusza użytkownika lub programisty do przyjęcia odpowiedzialności zajmowanie okazjonalnych błąd wskazujący inny użytkownik zmodyfikował wiersza.Typowe akcja podjęte przez aplikację, która odbiera ten błąd jest odświeżyć kursor, nowe wartości, a następnie umożliwiają użytkownikowi zdecydować, czy wykonać modyfikacji na nowe wartości.text, ntext, i image kolumny nie są używane dla porównań współbieżność w SQL Server w wersja 6.5 lub starszej.

  • ZARZĄDZANIE WERSJAMI WIERSZA OPTYMISTYCZNY
    Ta opcja Kontrola optymistycznej współbieżność opiera się na wersji wiersza.Zarządzanie wersjami wiersza tabela źródłowa musi mieć identyfikator wersja pewnego typu, można ustalić, czy wiersz został zmieniony po odczytu do kursor serwera.W SQL Server, że możliwości jest dostarczana przez timestamp typu danych, czyli liczbę binarną, który wskazuje względną sekwencji zmian w bazie danych.Każda baza danych ma globalnych bieżącą wartość sygnatury czasowej, **@@**DBTS.Każdy czas wiersz z timestamp kolumna zostanie zmodyfikowany w jakikolwiek sposób SQL Server przechowuje bieżącą **@@**wartość DBTS w timestamp kolumna, a następnie przyrostach **@@**DBTS.Jeśli tabela ma timestamp kolumna, a następnie sygnatury czasowe są podejmowane niedziałający poziom wiersza.Serwer można następnie porównać bieżącą wartość sygnatury czasowej wiersza z wartość sygnatury czasowej, który był zapisany, gdy wiersz został ostatnio pobrana do ustalenia, czy wiersz został zaktualizowany.Serwer nie ma porównywać wartości do wszystkich kolumn, tylko timestamp kolumna.Jeśli aplikacja żąda optymistycznej współbieżność z wersji wiersza w tabela, która nie ma timestamp kolumna domyślne kursor do formantu na podstawie wartości optymistycznej współbieżność.

    Ostrzeżenie

    Dla otwartych kursorów nad dane zdalne źródeł, aktualizacje nie są obsługiwane przez kursor, jeśli źródło zdalnego nie zawiera kolumna sygnatury czasowej.

  • BLOKADA PRZEWIJANIA
    Ta opcja implementuje Współbieżność pesymistyczna formantu, w którym aplikacja próbuje zablokować wiersze podstawowej bazy danych na czas odczytu do zestaw wyników kursor.Podczas używania 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, dopóki transakcja przekazana lub wycofana; kursor blokada jest usuwane, gdy pobierane następnego wiersza.Kursor został otwarty poza transakcji, blokada jest odrzucany podczas pobierane następnego wiersza.Dlatego kursor powinien być otwarty w transakcji w każdym przypadku, gdy użytkownik chce Współbieżność pesymistyczna pełnej kontroli.Blokada aktualizacji uniemożliwia pobieranie aktualizacji innych zadań lub blokada na wyłączność, który uniemożliwia wszelkie inne zadania z aktualizacją wiersza.Blokada aktualizacji, jednak nie blokuje blokada współużytkowana, więc nie zapobiega ono inne zadania czytania wiersza, chyba że drugie zadanie również żąda odczytu z blokada aktualizacji.

Blokada 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.Blokada przewijania są nabyte na każdy wiersz pobrania i przetrzymywane do pobrania następnej lub zamknij kursor, cokolwiek nastąpi najpierw.Na pobranie następnego serwera nabywa blokad przewijania w wierszach pobrania nowych i następnie zwalnia blokad przewijania w wierszach pobrania poprzednich.Blokada przewijania są niezależne od blokady zatwierdzanie i może pozostać w przeszłości zatwierdzanie lub wycofywanie operacji.Jeśli opcja Zamknij kursory na zatwierdzanie jest wyłączone, zatwierdzanie nie zamyka jakiekolwiek otwarte kursory i blokad przewijania są zachowywane w przeszłości zatwierdzanie, aby zachować izolacji pobranych danych.

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

Ostrzeżenie

Blokada przewijania są obsługiwane tylko dla napędzane zestawu kluczy i dynamiczne kursory.

Wskazówki blokowania

Tylko do odczytu

Optymistyczna wartościami

Zarządzanie wersjami wiersza optymistyczny

Blokowanie

Nie wskazówek

-

-

-

Aktualizacja

NOLOCK *

-

-

-

-

HOLDLOCK

-

-

-

Aktualizacja

UPDLOCK

-

-

-

Aktualizacja

TABLOCKX

-

-

-

Aktualizacja

Wszystkie inne

-

-

-

Aktualizacja

* Określając wskazówka NOLOCK dzięki tabela, w którym określono tylko do odczytu przez kursor.

Określanie opcji Współbieżność kursora

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

  • Transact-SQL kursory

    Określić słowa kluczowe, TYLKO_DO_ODCZYTU, SCROLL_LOCK i OPTIMISTIC w instrukcja DECLARE CURSOR.Optymistyczny z wersji wiersza określa OPTYMISTYCZNE słowa kluczowego Transact-SQL kursorów nie obsługują optymistyczny z wartości opcji współbieżność.

  • Aplikacje ADO

    Określ adLockReadOnly, adLockPessimistic, adLockOptimistic, lub adLockBatchOptimistic w typu blokady właściwość rekordów obiektu.

  • Aplikacje ODBC

    Atrybut instrukcja SQL_ATTR_CONCURRENCY SQL_CONCUR_READ_ONLY, SQL_CONCUR_ROWVER, SQL_CONCUR_VALUES lub SQL_CONCUR_LOCK.