РУКОВОДСТВО ПО РЕЛЯЦИОННОЙ СУБД DB2


ЧТО ТАКОЕ ТРАНЗАКЦИЯ


Транзакция в том смысле, в котором мы используем этот термин,— это логическая единица работы. Рассмотрим следующий пример (обобщенный вариант примера 6.2.4 из главы 6, представленный в форме встроенного SQL): заменить номер 'Sx' поставщика на 'Sy', где Sx и Sy — параметры. Для простоты опустим ряд проверок достоверности данных, которые обычно включаются в реальную программу. Кроме того, опустим все объявления.

TRANEX: PROC OPTIONS (MAIN);      /* пример транзакции */

EXEC SQL      WHENEVER SQLERROR GO TO UNDO;

GET LIST        (SX, SY);

EXEC SQL      UPDATE         S

                        SET                  НОМЕР_ПОСТАВЩИКА = :SY

WHERE           НОМЕР_ПОСТАВЩИКА = :SX;

EXEC SQL      UPDATE         SP

                        SET                  НОМЕР_ПОСТАВЩИКА == :SY

                        WHERE           НОМЕР_ПОСТАВЩИКА = :SX;

EXEC SQL      COMMIT;

GO TO FINISH;

UNDO:     EXEC SQL ROLLBACK;

FINISH:    RETURN;

END TRANEX;

Смысл данного примера заключается в том, что выражение «Заменить номер поставщика Sx на Sy», воспринимаемое конечным пользователем, вероятно, как единственная атомарная операция, требует на самом деле двух операций UPDATE над базой данных. Более того, между этими двумя операциями может даже нарушаться непротиворечивость базы данных. Например, в ней могут временно содержаться некоторые записи поставок, для которых не имеется соответствующих записей поставщиков. Заметим, что это наблюдение остается в силе, если изменить порядок исполнения двух операций UPDATE в приведенном примере. Таким образом, транзакция или логическая единица работы — не обязательно только одна операция языка SQL. В общем случае это, скорее, последовательность

нескольких таких операций, которая преобразует некоторое непротиворечивое состояние базы данных в другое непротиворечивое состояние, но не гарантирует сохранения непротиворечивости во все промежуточные моменты времени.

Ясно теперь, что в данном примере не следует допускать таких случаев, когда одна из двух операций




- Начало -  - Назад -  - Вперед -



Книжный магазин