Образовательный портал Claw.ru
Всё для учебы, работы и отдыха
» Шпаргалки, рефераты, курсовые
» Сочинения и изложения
» Конспекты и лекции
» Энциклопедии

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

in second session: 10

in primary session: 10

Однако при использовании версионной модели мы должны получить

in second session: 0

in primary session: 10

Причина в том, что для каждой транзакции хранится своя копия данных (snap-shot), которая синхронизируется с основными данными только в момент фиксирования транзакции.

ПРИМЕЧАНИЕ

Oracle хранит эти копии данных в специальном хранилище, который называется rollback segment.

Версионная модель характеризуется тем, что в ней отсутствует нулевой уровень изоляции транзакций (READ UNCOMMITTED), и вместо него вводится новый уровень, который в приведенном далее коде я назвал SNAP_SHOT. Он отличается от стандартного тем, что позволяет читать действительные зафиксированные данные, даже при наличии незавершенных транзакций обновления.

Вот конечный вариант классов CProxy и CObject, который реализует обе модели и, вдобавок к этому, поддерживает два «хинта»: UPDLOCK и XLOCK. Они предназначены для изменения уровня изоляции непосредственно при работе со значением переменной, а их смысл я поясню в следующих разделах.

#define MSSQL

// #define ORACLE

class CObject;

class CProxy

{

 friend class CObject;

public:

 __declspec(property(get=get_Value,put=put_Value)) int value;

 int get_Value(int level = -1) const;

 void put_Value(int i);

 void Commit();

 void Rollback();

private:

 int _level;


Рекомендуем скачать другие рефераты по теме: решебник по физике, украинские рефераты.


Категории:




Предыдущая страница реферата | 13  14  15  16  17  18  19  20  21  22  23 |


Поделитесь этой записью или добавьте в закладки

   



Рефераты от А до Я