Реферат: Блокировки в MS SQL Server 2000

Теперь, если в приведенном выше примере изменить константу READ_COMMITTED на REPEATABLE_READ в качестве параметра GetObject, код заработает правильно и без ошибок.

ПРИМЕЧАНИЕ

Совершенно не обязательно менять уровень изоляции транзакций в потоке thread_proc, работа примера не изменится, даже если изменить уровень изоляции на READ_UNCOMMITTED.

Здесь мы ставим блокировку обновления, если транзакция читает данные с уровнем изоляции REPEATABLE_READ.

В заключение, перед тем как привести полностью код с поддержкой первых трех уровней изоляции, давайте поговорим вот о чем. Созданный код реализует блокирующую модель, которая характерна для СУБД MS SQL Server 2000. Существует также версионная модель реализации блокировок, которую поддерживает такая известная СУБД, как Oracle. Чем отличаются эти модели? Рассмотрим такой код:

unsigned __stdcall thread_proc(void*)

{

// Print CObject::value variable

CProxy& fake = CObject::GetObject();

printf("in second session: %d\n",fake.value);

fake.Commit();

return 0;

}

int main(int argc, char* argv[])

{

// Началотранзакции

CProxy& prx = CObject::GetObject();

prx.value = 10;

// Началоновойсессии

_beginthreadex(0,0,thread_proc,0,0,0);

// Эмулируемработу

Sleep(100);

printf("in primary session: %d\n",prx.value);

prx.Commit();

return 0;

}

Здесь во второй сессии (выполняемой в отдельном потоке) мы просто читаем данные и выводим их на консоль. Так как значение переменной value мы изменили перед стартом второй сессии, совершенно очевидно, что на экран будет выведено

in second session: 10

in primary session: 10

К-во Просмотров: 985
Бесплатно скачать Реферат: Блокировки в MS SQL Server 2000