Показать сообщение отдельно
Старый 05.06.2007, 10:16   #15  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
ORACLE: Multiversion Read Consistency - MVRC
Привожу цитату отсюда: http://doc.novsu.ac.ru/oracle/conceps/7013scm.10.html про оракловую многоверсионную модель согласованности по чтению (текст там сформатирован так, что представление его здесь с тегом CODE представляется наиболее оптимальным).

Итак, цитата:
Код:
Многоверсионная модель согласованности

--------------------------------------



        ORACLE обеспечивает согласованность по чтению на двух  различных

        уровнях:  на   уровне  предложения   и  на   уровне  транзакции.

        Следующие   секции    объясняют   каждый    из   этих    уровней

        согласованности  по  чтению,  а  также механизмы, которые ORACLE

        использует   для   реализации   своей   многоверсионной   модели

        согласованности данных.



Согласованность по чтению на уровне предложения



        ORACLE всегда обеспечивает  согласованность по чтению  на уровне

        предложения, которая гарантирует, что данные, возвращаемые одним

        запросом,  согласованы  по  отношению  к  моменту  начала  этого

        запроса.   Поэтому  запрос  никогда  не видит никаких изменений,

        осуществленных теми  транзакциями, которые  подтверждены в  ходе

        выполнения данного запроса.



        Чтобы   обеспечить   согласованность   по   чтению   на   уровне

        предложения,  ORACLE  фиксирует  текущий  SCN  (системный  номер

        изменения),  когда  запрос  входит  в  фазу выполнения.  По мере

        выполнения запроса  ему доступны  лишь те  данные, которые  были

        подтверждены  к  моменту  запомненного  SCN;  запрос  не   видит

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

        после того, как запрос начал выполняться.



        Состоятельность множества результатов гарантируется для  каждого

        запроса,  не  требуя  никаких  усилий  со  стороны пользователя.

        Такие предложения SQL, как  SELECT, INSERT с запросом,  UPDATE и

        DELETE, всегда  опрашивают данные,  явно или  неявно, и  все они

        получают  состоятельное  множество   данных.   Каждое  из   этих

        предложений использует  запрос, чтобы  определить, какие  данные

        будут  затронуты  (соответственно  выбраны, вставлены, обновлены

        или  удалены).   Предложение  SELECT  является явным запросом, и

        может   иметь   вложенные   запросы   или   операцию соединения.

        Предложение   INSERT   может   использовать   вложенные запросы.

        Предложения UPDATE и DELETE  могут использовать фразы WHERE  или

        подзапросы,  чтобы  воздействовать   на  подмножество  строк   в

        таблице.   Хотя  запросы,  используемые  предложениями   INSERT,

        UPDATE и DELETE,  получают состоятельное множество  результатов,

        они   не   видят   изменений,   осуществляемых   самими    этими

        предложениями DML.



Согласованность по чтению на уровне транзакции



        ORACLE    также    предоставляет    необязательную   возможность

        согласованности  по   чтению  на   уровне  транзакции,   которая

        гарантирует, что данные, которые видят ВСЕ запросы внутри  одной

        и  той  же  транзакции,  согласованы  по отношению к одной точке

        времени   (моменту    начала   транзакции).     Таким   образом,

        согласованность  по  чтению  на  уровне  транзакции обеспечивает

        повторяемость чтений.



        ORACLE  обеспечивает   согласованность  по   чтению  на   уровне

        транзакции с помощью различных методов:



        транзакции      Транзакции   read-only   (только-чтение)   могут

        read-only       содержать только запросы; они не могут содержать

                        никаких   предложений   DML.   Чтобы  обеспечить

                        повторяемость    чтений    внутри     транзакции

                        read-only,   ORACLE   фиксирует   момент  начала

                        транзакции.   В  течение  транзакции ей доступны

                        лишь  те  данные,  которые  были  подтверждены к

                        моменту начала транзакции.



        монопольные     Если повторяемость чтений необходимо  обеспечить

        блокировки      в  транзакциях,  содержащих  предложения DML, то

        таблиц          транзакция  может  явно  запросить   разделяемые

        и строк         блокировки   по    таблицам   или    монопольные

                        блокировки   по   тем   строкам,   которые будут

                        считываться    неоднократно.     Это     решение

                        обеспечивает согласованность по чтению на уровне

                        транзакции,    хотя    и    уменьшает    степень

                        одновременного доступа к данным.



        Суммируя,  можно  сказать,  что  ORACLE  способен   обеспечивать

        согласованность по чтению  как на уровне  предложения, так и  на

        уровне   транзакции,   предоставляя   каждому   предложению  или

        транзакции  ее  собственную  "версию"  данных  по  состоянию  на

        конкретный  момент  времени  (начало  выполнения предложения или

        транзакции).
Т.е., действительно, можно попробовать отправить прямо в Oracle (через Connection или через ADO) один сложный SELECT и быть уверенным, что данные будут согласованы на момент начала выполнения этого запроса. Если что, готов помочь с его написанием.