Oracle для профессионалов Том Кайт торгово-издательский дом DiaSoft



Download 0,99 Mb.
Pdf ko'rish
bet59/93
Sana16.03.2022
Hajmi0,99 Mb.
#495509
1   ...   55   56   57   58   59   60   61   62   ...   93
Bog'liq
tom kait oracle dlia professionalov[0001-0091]

create table accounts
( account_number number primary key,
account_balance number
) ;
В реальной таблице счетов будут сотни тысяч строк, но для простоты мы будем рас-
сматривать таблицу всего с четырьмя строками (более детально мы рассмотрим этот при-
мер в главе 3):
Строка
1
2
3
4
Номер счета
123
234
345
456
Баланс
 счета
500.00 $
250,00 $
400,00 $
100,00 $
Требуется создать отчет, который в конце банковского дня позволяет определить ко-
личество денег в банке. Это делается с помощью предельно простого запроса:
select sum(account balance) from accounts;
Конечно, в данном примере ответ очевиден — 1250 $. Однако что произойдет, если
мы прочитаем строку I, а при считывании строк 2 и 3 с одного из банкоматов будет вы-


Разработка успешных приложений для Oracle
полнена транзакция, переводящая 400 $ со счета 123 на счет 456? Наш запрос прочтет
500 $ в строке 4 и выдаст результат 1650 $, не так ли? Конечно, этого надо избежать,
так как подобный результат ошибочен — никогда такого баланса по счетам в базе дан-
ных не было. Нужно понять, как СУБД Oracle избегает подобных ситуаций и чем отли-
чаются используемые при этом методы от используемых во всех остальных СУБД.
Практически в любой другой СУБД для получения "согласованного" и "корректно-
го" ответа на этот запрос необходимо блокировать либо всю таблицу, по которой идет
суммирование, либо строки по мере их чтения. Это предотвратит изменение результата
другими сеансами в ходе его получения. Если заблокировать всю таблицу, будет полу-
чен результат, соответствующий состоянию базы данных в момент начала выполнения
запроса. Если блокировать данные по мере чтения (такая разделяемая блокировка чте-
ния предотвращает изменения, но не чтение данных другими сеансами), будет получен
результат, соответствующий состоянию базы данных в момент завершения выполнения
запроса. Оба эти метода существенно снижают возможности одновременного доступа.
Блокировка таблицы предотвращает любые изменения таблицы во время выполнения
запроса (для таблицы из четырех строк этот период очень короток, но для таблиц с сот-
нями тысяч строк запрос может выполняться несколько минут). Метод "блокирования
по ходу чтения" предотвращает изменение уже прочитанных и обработанных данных и
потенциально может приводить к взаимным блокировкам выполнения вашего запроса
и других изменений.
Как уже было сказано, вы не сможете в полном объеме использовать преимущества
СУБД Oracle, если не понимаете концепцию многовариантности. В СУБД Oracle мно-
говариантность используется для получения результатов, соответствующих моменту
начала выполнения запроса, при этом не блокируется ни единой строки (пока транзак-
ция по переводу денег изменяет строки 1 и 4, они будут заблокированы от других изме-
нений, но не от чтения, выполняемого, например, нашим запросом SELECT SUM...)-
Фактически в СУБД Oracle нет "разделяемых блокировок чтения", типичных для дру-
гих СУБД, — они в ней просто не нужны. Все устранимые препятствия для одновре-
менного доступа были устранены.
Итак, как же СУБД Oracle получает корректный, согласованный результат (1250 $)
при чтении, не блокируя данных, другими словами, не мешая одновременному досту-
пу? Секрет — в механизме выполнения транзакций, используемом в СУБД Oracle. При
любом изменении данных Oracle создает записи в двух разных местах. Одна запись по-
падает в журналы повторного выполнения, где Oracle хранит информацию, достаточ-
ную для повторного выполнения, или "наката", транзакции. Для оператора вставки это
будет вставляемая строка. Для оператора удаления это будет запрос на удаление строки
в слоте X блока Y файла Z. И так далее. Другая запись — это запись отмены, помещае-
мая в сегмент отката. Если транзакция завершается неудачно и должна быть отменена,
СУБД Oracle будет читать "предварительный" образ из сегмента отката, восстанавливая
необходимые данные. Помимо отмены транзакций, СУБД Oracle использует сегменты
отката для отмены изменений в блоках при их чтении, то есть для восстановления дан-
ных блока на момент начала выполнения запроса. Это позволяет читать данные несмотря
на блокировку и получать корректные, согласованные результаты, не блокируя данные.

Download 0,99 Mb.

Do'stlaringiz bilan baham:
1   ...   55   56   57   58   59   60   61   62   ...   93




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish