Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в СУБД HyTech.doc
Скачиваний:
11
Добавлен:
01.03.2025
Размер:
2.67 Mб
Скачать

3.3 Операторы управления транзакциями и снимками

Приводится описание SQL операторов управления транзакциями и снимками. Описывается механизм блокировок.

3.3.1 Операторы работы со снимками Операторы работы со снимками

Для того, чтобы разрешить возможные коллизии и создать у пользователей иллюзию их «единственности», в СУБД HyTech используется механизм «фотографий» (мгновенных снимков) состояния БД.

При выполнении первого атомарного запроса из всей группы поисковых операций состояние таблицы «фотографируется». Последующие операции, используя этот «снимок», выполняют поиск для того же состояния БД, которое было на момент первого запроса. Все внесенные другими пользователями изменения «не видны» для данного пользователя. Это позволяет завершить всю сколь угодно длинную цепочку поисковых запросов без нарушения логической целостности.

Для каждой открытой таблицы и для каждого пользователя хранится текущий снимок состояния таблицы. Снимок делается автоматически (при первом поиске по таблице) или при явном вызове функции htMakePhoto.

Текущий снимок можно отменить с помощью оператора fix. Операции, закрывающие доступ к таблице (например, close table), также отменяют текущий снимок. Для таблиц, которые включены в транзакцию, механизм снимков отключается. Для временных таблиц механизм снимков также отключается.

Создание снимка не захватывает таблицы в монопольное пользование. Другие пользователи могут продолжать работать с этими же таблицами.

SQL оператор fix table отменяет текущий снимок у указанной таблицы. При очередном поиске по данной таблице будет сделан новый снимок состояния.

Формат:

fix table Имя_таблицы;

Аргументы:

Аргумент

Значение

Имя_таблицы

Задает имя таблицы, текущий снимок которой надо отменить. Таблица с указанным именем должна существовать.

Результат выполнения оператора можно проверить, вызвав SQL-функцию lastsqlerr.

Пример:

drop table TEST; create table TEST (   FIELD1 int ); insert into TEST values (1); var @i = 0; while(@i <= 10) {   fix table TEST;   insert into TEST select * from TEST;   @i = @i + 1; } fix all; select    FIELD1 from   TEST;

Если в примере убрать оператор fix table, то оператор insert select будет вставлять по одной записи. Всего будет добавлено 10 записей. Если же есть предыдущие снимки таблицы TEST, то поведение оператора insert select будет непосредственно зависеть от них.

Если оставить оператор fix table, то перед выполнением поиска insert select будет сделан снимок, в который попадут записи, добавленные в предыдущей итерации. В результате выполнения этой программы в таблице будет 1024 записи.

Аналогично fix table, SQL оператор fix all отменяет текущий снимок у всех таблиц пользователя. При очередном поиске по таблице будет сделан новый снимок состояния.

Формат:

fix all;

Результат выполнения оператора можно проверить, вызвав SQL-функцию lastsqlerr.

3.3.2 Операторы работы с транзакциями Механизм транзакций и механизм снимков

Транзакции используются в многопользовательских приложениях для обеспечения логической непротиворечивости данных в процессе модификации несколькими пользователями одновременно. Механизм транзакций в HyTech обеспечивает:

  • Согласованное чтение данных;

  • Последовательную запись данных.

Согласованное чтение данных означает, что после того, как один пользователь начал транзакцию, и вплоть до ее завершения, остальные пользователи могут обращаться к данным из модифицируемых таблиц на чтение. При этом данные будут доступны для чтения по состоянию на начало транзакции. Т.е. при использовании механизма транзакций для других пользователей база данных (совокупность нескольких таблиц) «скачком» переходит из одного допустимого состояния в другое.

Последовательная запись данных означает, что после того, как один пользователь начал транзакцию, и вплоть до ее завершения, остальные пользователи могут обращаться к данным из модифицируемых таблиц на запись, но при этом будет выполнена блокировка операции записи до тех пор, пока транзакция не будет завершена.

Отличие механизма транзакций от механизма снимков:

  • Операции записи при использовании снимков не блокируются;

  • Для работы с измененными данными требуется обновление снимка, т.е. выполнение оператора fix all или оператора fix table. В случае транзакции измененные данные сразу доступны пользователю, выполнившему изменение.