powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как работает undo?
73 сообщений из 73, показаны все 3 страниц
как работает undo?
    #37583614
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

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

Когда транзакция начинает выполняться, она генерирует редо лог(для повторного выполнения в случае crash) и андо лог(для отката непримененных данных).Это понятно.
Далее,когда мы нажимаем в конце транзакции rollback, применяются все записи из сегментов отката и приводят в первоначальное состояние - это тоже понятно.
Если сервер упал,то при восстановлении сначала накатывается редо для повторного наката всех закомиченных и незакомиченных транзакций,а потом накатывается весь андо для отката всех незакомиченных транзакций,таким образом в БД остаются только закомиченные транзакции на момент падения - это понятно.

Но вот непонятно вот что:ведь андо еще используется для совместного доступа к данным,т.е. пользователь видит неизмененные данные до тех пор,пока их не закоммитит другой,т.е. андо служит для хранения неизмененных данных.Получается так,что пользователь выбирает данные,они берутся в том виде,в котором они сейчас есть в SGA или на диске,а потом смотрим в андо и если там есть записи,то применяем их все и показываем пользователю именно это,т.е. то,что было до изменений?
вот тут немного физику в последнем не понял( Если бы в андо хранились именно блоки,то понятно,но там нет блоков,там записи изменений,которые генерируются БД во время работы транзакции

подскажите плиз как это происходит.

Заранее спасибо
...
Рейтинг: 0 / 0
как работает undo?
    #37583623
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LudeV,

понятно,что если при восстановлении в редо логе содержится фраза rollback, то записи для отката берутся из андо,а затем эти записи удаляются.

то есть к моменту открытия БД после наката всего редо в андо остаются записи только по незакомиченным транзакциям, по которым не было ни commit, ни rollback
...
Рейтинг: 0 / 0
как работает undo?
    #37583648
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LudeVПолучается так,что пользователь выбирает данные,они берутся в том виде,в котором они сейчас есть в SGA или на диске,а потом смотрим на заголовок блока, в частности на ITL слоты.
По этой информации узнаем, какая транзакция у нас активна и где в анду лежит нужная информация для построения консистентной версии блока.
Дальше создаем клон этого блока и "откатываем" его состояние на нужный нам момент времени при помощи анду информации.
...
Рейтинг: 0 / 0
как работает undo?
    #37583650
hoarfrost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LudeVто есть к моменту открытия БД после наката всего редо в андо остаются записи только по незакомиченным транзакциям, по которым не было ни commit, ни rollback
Там лежат версии данных в соответствии с UNDO_RETENTION. На каждую запись может быть по нескольку версий. :)
...
Рейтинг: 0 / 0
как работает undo?
    #37583662
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hoarfrost,

не понял?

ведь при commit или rollback данные из андо удаляются,поэтому в итоге после наката всего редо в андо останутся только те,которые не были ни закомичены, ни откатаны обратно.

Откуда там несколько версии одного и того же?

Не понял(
...
Рейтинг: 0 / 0
как работает undo?
    #37583671
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pravednik,

спасибо большое за разъяснение!

вот ток непонятно.а где мы создаем этот клон блока данных?если бы в buffer cache, то его потом бы пришлось скидывать на диска он нам там не нужен вроде как.
...
Рейтинг: 0 / 0
как работает undo?
    #37583678
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hoarfrost,

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

или я неправ где-то?
...
Рейтинг: 0 / 0
как работает undo?
    #37583690
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LudeVесли бы в buffer cache
да, там

LudeVто его потом бы пришлось скидывать на диска он нам там не нужен вроде как.
Зачем?
У такого клона есть флаг, который говорит, что это консистентная версия, а не текущая.
...
Рейтинг: 0 / 0
как работает undo?
    #37583691
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pravednik,

спасибо большое!!
...
Рейтинг: 0 / 0
как работает undo?
    #37583695
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LudeVhoarfrost,

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

или я неправ где-то?
До выделенного не совсем понятно, а по поводу жирненького, подумайте сами, какие бы тупняки хватал оракл, если бы вы были правы.
Код: plsql
1.
2.
3.
 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0008.000.0000110d  0x008005a4.1040.09  ----    1  fsc 0x0000.00000000
0x02   0x0009.025.00001149  0x008007ca.109e.03  ----    1  fsc 0x0000.00000000
...
Рейтинг: 0 / 0
как работает undo?
    #37583698
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pravednik,

Скажите, пожалуйста,

У такого клона есть флаг, который говорит, что это консистентная версия, а не текущая.

А потом по принципу LRU текущая версия будет сброшена на диск,а эта очищена из памяти?
...
Рейтинг: 0 / 0
как работает undo?
    #37583703
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pravednik,

или она просто там не хранится в buffer cahe?а сразу очищается после доступа к этому блоку?
...
Рейтинг: 0 / 0
как работает undo?
    #37583704
брадобрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на диск может сбрасываться только current версии
...
Рейтинг: 0 / 0
как работает undo?
    #37583708
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pravednik,

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

неправильно выразился,попозже попробую сформулировать вопрос корректнее.

спасибо
...
Рейтинг: 0 / 0
как работает undo?
    #37583713
hoarfrost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LudeVhoarfrost,

не понял?

ведь при commit или rollback данные из андо удаляются,поэтому в итоге после наката всего редо в андо останутся только те,которые не были ни закомичены, ни откатаны обратно.

Откуда там несколько версии одного и того же?

Не понял(

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
%>SQLPLUS %/%@%

SQL*Plus: Release 10.2.0.4.0 - Production on Mon Dec 19 18:23:32 2011

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining Scoring Engine and Real Application Testing options

SQL> CREATE TABLE UNDO_SHOW AS SELECT * FROM DBA_OBJECTS WHERE 1 = 0;

Table created.

SQL> SELECT COUNT(*) FROM UNDO_SHOW;

  COUNT(*)
----------
         0

SQL>



Ждём одну минуту, а затем:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> INSERT INTO UNDO_SHOW SELECT * FROM DBA_OBJECTS;

10682 rows created.

SQL> COMMIT;

Commit complete.

SQL> SELECT COUNT(*) FROM UNDO_SHOW;

  COUNT(*)
----------
     10682

SQL> SELECT COUNT(*) FROM UNDO_SHOW AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '1' MINUTE);

  COUNT(*)
----------
         0

SQL>



Ждём ещё одну минуту, после чего:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
SQL> SELECT COUNT(*) FROM UNDO_SHOW AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '1' MINUTE);

  COUNT(*)
----------
     10682

SQL> DELETE FROM UNDO_SHOW WHERE OWNER = 'SYS';

7016 rows deleted.

SQL> COMMIT;

Commit complete.

SQL> SELECT COUNT(*) FROM UNDO_SHOW;

  COUNT(*)
----------
      3666

SQL> SELECT COUNT(*) FROM UNDO_SHOW AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '1' MINUTE);

  COUNT(*)
----------
     10682

SQL>



Спустя ещё одну минуту:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SQL> SELECT COUNT(*) FROM UNDO_SHOW AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '1' MINUTE);

  COUNT(*)
----------
      3666

SQL>



Flashback ...
...
Рейтинг: 0 / 0
как работает undo?
    #37583742
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hoarfrost,

теперь понял,что вы имели ввиду,но я хотел сказать другое:

вот вы сначала создали таблицу,закинули данные,сделали commit - эта транзакция будет в андо в соответствии с настройкой undo_retention, но эта транзакция при восстановлении экземпляра после падения не будет rollback из андо,потому что она была закомичена и она уже накатилась с помощью редо во время восстановления.А накатываться здесь будут только те транзакции,по которым не было commit или rollback. Я хотел сказать,что в вашем примере при восстановлении экземпляра ничего откатываться из андо не будет.Эти данные в андо сохранятся,как и раньше,но вот откатываться там нечему. Все эти транзакции во время восстановления пройдут через редо и закоммитяться,а в процессе rollback во время восстановления ничего не будет сделано.
Так ли это?

To_pravednik

скажите, пожалуйста, какое время будет храниться этот клон в буфере?
мне кажется,что он сразу будет очищен после доступа к нему,это так?

спасибо всем большое за разъяснения физики процессов
...
Рейтинг: 0 / 0
как работает undo?
    #37583747
брадобрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LudeVскажите, пожалуйста, какое время будет храниться этот клон в буфере?
мне кажется,что он сразу будет очищен после доступа к нему,это так?

не так,
он будет жить там по всем правилам LRU & touch cnt
...
Рейтинг: 0 / 0
как работает undo?
    #37583751
брадобрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LudeVhoarfrost,

теперь понял,что вы имели ввиду,но я хотел сказать другое:

вот вы сначала создали таблицу,закинули данные,сделали commit - эта транзакция будет в андо в соответствии с настройкой undo_retention, но эта транзакция при восстановлении экземпляра после падения не будет rollback из андо,потому что она была закомичена и она уже накатилась с помощью редо во время восстановления.А накатываться здесь будут только те транзакции,по которым не было commit или rollback. Я хотел сказать,что в вашем примере при восстановлении экземпляра ничего откатываться из андо не будет.Эти данные в андо сохранятся,как и раньше,но вот откатываться там нечему. Все эти транзакции во время восстановления пройдут через редо и закоммитяться,а в процессе rollback во время восстановления ничего не будет сделано.
Так ли это?

To_pravednik

скажите, пожалуйста, какое время будет храниться этот клон в буфере?
мне кажется,что он сразу будет очищен после доступа к нему,это так?

спасибо всем большое за разъяснения физики процессов
Фокус твоего вопроса по поводу поведения instance recovery после падения или общая механика?
...
Рейтинг: 0 / 0
как работает undo?
    #37583778
hoarfrost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LudeVhoarfrost,

теперь понял,что вы имели ввиду,но я хотел сказать другое:

вот вы сначала создали таблицу,закинули данные,сделали commit - эта транзакция будет в андо в соответствии с настройкой undo_retention, но эта транзакция при восстановлении экземпляра после падения не будет rollback из андо,потому что она была закомичена и она уже накатилась с помощью редо во время восстановления.
Да. Этим я демонстрировал, что данные из UNDO при COMMIT или ROLLBACK - не удаляются. Более того, там их может быть несколько версий, на разные моменты времени.

А накатываться здесь будут только те транзакции,по которым не было commit или rollback.
Накатываться будет всё, что было сделано после контрольной точки, если я понимаю правильно. И то, что не было зафиксированно - потом будет откатываться.

Я хотел сказать,что в вашем примере при восстановлении экземпляра ничего откатываться из андо не будет.Эти данные в андо сохранятся,как и раньше,но вот откатываться там нечему. Все эти транзакции во время восстановления пройдут через редо и закоммитяться,а в процессе rollback во время восстановления ничего не будет сделано.

Так ли это?
В этом смысле - да.
...
Рейтинг: 0 / 0
как работает undo?
    #37583781
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LudeVскажите, пожалуйста, какое время будет храниться этот клон в буфере?
мне кажется,что он сразу будет очищен после доступа к нему,это так?
Нет, сразу очищен он не будет. Построение консистентной версии из анду - это трата ресурсов, на которой можно сэкономить, если оставить блок в буфере. А вдруг он нам(или другой транзакции) еще понадобиться ;). С другой стороны, плодить кучу версий одного блока и держать их постоянно на подхвате - тоже ресурсы. Если правильно помню, то максимальное число копий - это 6. После они начинают перезатираться.
Какой алгоритм по времени - я не знаю да и информации вроде не встречал.
...
Рейтинг: 0 / 0
как работает undo?
    #37583783
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
брадобрейLudeVскажите, пожалуйста, какое время будет храниться этот клон в буфере?
мне кажется,что он сразу будет очищен после доступа к нему,это так?

не так,
он будет жить там по всем правилам LRU & touch cnt
Пасиб
...
Рейтинг: 0 / 0
как работает undo?
    #37583849
Brodiaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скажите, пожалуйста, какое время будет храниться этот клон в буфере?
pravednik... С другой стороны, плодить кучу версий одного блока и держать их постоянно на подхвате - тоже ресурсы. Если правильно помню, то максимальное число копий - это 6. После они начинают перезатираться. ...

Oracle Support говорит, что количество CR блоков может быть ограничено только размером buffer cache (пока не заполниться). Помниться на одном из семинаров даже такой вопрос был на майку :)
...
Рейтинг: 0 / 0
как работает undo?
    #37583876
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
брадобрей,

фокус моего вопроса скорее относится к поведению экземпляра после падения.

в обыкновенной повседневной работе все более менее понятно..тот же редо+андо..тем более когда рассматриваешь ситуацию после падения становится многое понятно в повседневной работе.

спасибо большое всем за объяснения.

вроде все усвоил и понял
...
Рейтинг: 0 / 0
как работает undo?
    #37583909
pravednikЕсли правильно помню, то максимальное число копий - это 6. После они начинают перезатираться.Это не максимальное, это target (по аналогии с pga_aggregate_target)

BrodiagaOracle Support говорит, что количество CR блоков может быть ограничено только размером buffer cache (пока не заполнит Ь ся)Правильно
...
Рейтинг: 0 / 0
как работает undo?
    #37584241
wurdu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hoarfrostТам лежат версии данных в соответствии с UNDO_RETENTION. На каждую запись может быть по нескольку версий. :)UNDO_RETENTION начиная с 10.2 может и игнорироваться в случаях:
UNDO_RETENTIONFor fixed- size undo tablespaces, the system automatically tunes for the maximum possible undo retention period, based on undo tablespace size and usage history, and ignores UNDO_RETENTION unless retention guarantee is enabled
hoarfrostНакатываться будет всё, что было сделано после контрольной точки, если я понимаю правильно. И то, что не было зафиксированно - потом будет откатыватьсяНе совсем, т.к. используется Two Pass recovery. Этот CHECKPOINT .
Вообще, автору я прежде всего рекомендовал бы прочитать Oracle Core: Essential Internals for DBAs and Developers. Там крайне подробно описаны механизмы, которые его интересуют.
...
Рейтинг: 0 / 0
как работает undo?
    #37584338
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wurdu,

спасибо всем.
...
Рейтинг: 0 / 0
как работает undo?
    #37584401
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wurdu,

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

просто раньше я думал,что в андо инфа попадает сразу напрямую в undo tablespace без buffer cache,а терь прочитал, что андо блоки также хранятся в буфер кеше,а потом сбрасывается на диск как и все данные.

Но в любом случае самым первичным остается редо.Он чаще всего сбрасывается и содержит все,что необходимо для восстановления в случае падения и для обыкновенной работы.Т.е. даже если андо из буфера не скинется вместе с данными,сервер упадет,то при восстановлении накатятся все логи и тем самым восстановится андо в кеше,с которого потом и откатимся.

или я неправильно понял про хранение undo записей?
...
Рейтинг: 0 / 0
как работает undo?
    #37584421
wurdu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LudeV...
или я неправильно понял про хранение undo записей?Да правильно вроде.
...
Рейтинг: 0 / 0
как работает undo?
    #37584443
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wurdu,

вот теперь все разложилось по полочкам.


спасибо всем большое
...
Рейтинг: 0 / 0
как работает undo?
    #37585028
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LudeVНо в любом случае самым первичным остается редо.Он чаще всего сбрасывается и содержит все,что необходимо для восстановления в случае падения и для обыкновенной работы.Т.е. даже если андо из буфера не скинется вместе с данными,сервер упадет,то при восстановлении накатятся все логи и тем самым восстановится андо в кеше,с которого потом и откатимся.


Скажем так, redo пишется на диск не то чтобы чаще. Транзакция не считается зафиксированной до тех пор, пока её redo не записан в оперативный журнал. Т.е. commit ждет завершения этой записи. А грязные блоки из буферного кэша (в сегменты таблиц или в undo) сбрасываются на диск асинхронно. Для завершения транзакции сохранение этих данных на диск некритично.

Грязные блоки (сегментов данных и отката) потерянные в результате аварии экземпляра будут восстановлены из redo, но говорить про их восстановление именно в кэше наверное не стоит.
...
Рейтинг: 0 / 0
как работает undo?
    #37585051
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenab,

а куда их восстановит БД при восстановлении из редо лога?она прочтет,что такие-то и такие-то блоки модифицировались,генерились такие-то записи андо,вот она и восстановит их в кеше,а потом сбросит этот кэш на диск как в обычной работе.

или не так?
...
Рейтинг: 0 / 0
как работает undo?
    #37585127
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LudeV,

недавно узнал, что восстанавливается весь блок
напр в блоке есть записи с ид 1,2,3
для select * from t where ід=1
если запись 1 менялась, то востанавливается весь блок (все три записи),
и если запись 2 которая нам НЕ НУЖНА! восстановить нельзя, то получим ору

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

.....
stax
...
Рейтинг: 0 / 0
как работает undo?
    #37585132
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..,

спасибо,интересно
...
Рейтинг: 0 / 0
как работает undo?
    #37585153
wurdu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabТ.е. commit ждет завершения этой записиНу, конечно, не все так просто в современных версиях. Есть PL/SQL оптимизация и в том же PL/SQL цикле уже не ждет и закоммиченные транзакции могут быть потеряны. Опять же, есть параметры commit_logging и commit_wait, да и сам commit бывает batch, immediate, wait, nowait.
...
Рейтинг: 0 / 0
как работает undo?
    #37585216
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wurdumcureenabТ.е. commit ждет завершения этой записиНу, конечно, не все так просто в современных версиях. Есть PL/SQL оптимизация и в том же PL/SQL цикле уже не ждет и закоммиченные транзакции могут быть потеряны. Опять же, есть параметры commit_logging и commit_wait, да и сам commit бывает batch, immediate, wait, nowait.
что-то с трудом верится что закоммиченные (в обычном смысле) "транзакции могут быть потеряны"

.....
stax
...
Рейтинг: 0 / 0
как работает undo?
    #37585490
stax..недавно узнал, что восстанавливается весь блок
stax..что-то с трудом верится что закоммиченные (в обычном смысле) "транзакции могут быть потеряны"
О сколько нам открытий чудных...

http://www.sql.ru/forum/actualsearch.aspx?search=lazy+commit&sin=0&bid=3&a=Barkovsky&ma=0&dt=-1&s=1&so=1
...
Рейтинг: 0 / 0
как работает undo?
    #37586053
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..что-то с трудом верится что закоммиченные (в обычном смысле) "транзакции могут быть потеряны"

.....
stax

ничего сверхестественного - утрата базы данных, неполное восстановление.

недокоммиты, это вообще говоря не совсем commit, а иногда совсем не commit. но, в ряде случаев мы можем потерять транзакции, чтобы повторить из первоисточника, а не из журнала БД. соглашаясь с такими маловероятными ситуациями можно неплохо поднять производительность операций массового изменения данных ничего не теряя
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
как работает undo?
    #39272828
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
брадобрейна диск может сбрасываться только current версии

1. блоки данных находятся в кэше - buffer cache.
2. блоки undo также находятся в buffer cache.


если буффер переполнен, куда же деваться undo блоку, тогда как не на диск?
...
Рейтинг: 0 / 0
как работает undo?
    #39272846
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
правильно ли я понимаю, что Undo block также находится в SGA в buffer cache?
тогда у нас в buffer cache два типа блоков есть: блоки данных и блоки undo?
ранее я себе представлял, что при изменении данных запись происходит непосредственно
в undo tablespace - непосредственно в файл, минуя кэш.
...
Рейтинг: 0 / 0
как работает undo?
    #39272856
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LudeVhoarfrost,

не понял?

ведь при commit или rollback данные из андо удаляются

с х*****я бы? Как бы тогда открытый курсор мог читать "удалённые" данные?

тест-кейс, 1,2 - сессии

Код: plsql
1.
2.
3.
4.
1.   открываем курсор, select * from t; 
2. delete from t;
2. commit;
1. fetch...  



и всё фетчится хорошо
...
Рейтинг: 0 / 0
как работает undo?
    #39272859
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри на некропостинг ), не увидел дату сообщения
...
Рейтинг: 0 / 0
как работает undo?
    #39272862
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мог бы кто-нибудь мне любезно ответить?
а то я читаю Льюиса и немного запутался с undo.

Если undo блоки также находятся в общем кэше SGA,
как можно узнать, сколько у нас в buffer cache обычных блоков,
и сколько блоков Undo.

хочется видеть примерно следующее:

Код: plsql
1.
2.
3.
4.
    name               count
data block       11111111111111111
undo block       1234
 
...
Рейтинг: 0 / 0
как работает undo?
    #39272877
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В версиях 11.2.0.3, 11.2.0.4 и 12c при чтениях CR блоков REDO генерируется?
имеется ввиду, когда другие сессии читают в consistent режиме.

сессия 1 изменяет данные в таблице и ещё не зафиксировала их.
сессия 2 читает данные из Undo, которые были до того момента, как сессия 1 начала их менять.
...
Рейтинг: 0 / 0
как работает undo?
    #39272896
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жвачкинВ версиях 11.2.0.3, 11.2.0.4 и 12c при чтениях CR блоков REDO генерируется?

реду генерируется при изменениях данных
...
Рейтинг: 0 / 0
как работает undo?
    #39272910
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JonhsonжвачкинВ версиях 11.2.0.3, 11.2.0.4 и 12c при чтениях CR блоков REDO генерируется?

реду генерируется при изменениях данных
select - это не изменение данных. а REDO в исключительных случаях при select генерируются.
вот вам пример:
http://www.sql.ru/forum/129951/otlozhennaya-ochistka-blokov-i-select-vzyato-u-t-kayta

правда те обсуждения были аж в 2004 году. стало интересно, этот механизм до сих пор работает?
...
Рейтинг: 0 / 0
как работает undo?
    #39272912
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторПростой Select (без update clause) будет генерировать REDO еще в одном случае.
Это происходит когда делается consistent gets блоков, то есть когда select читает данные изминенные
и незакоммиченные в другой сессии.

а что в этом случае пишется в REDO? какой вектор изменения? чего?
...
Рейтинг: 0 / 0
как работает undo?
    #39272915
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жвачкинкакой вектор изменения? чего?
Какое слово из "данные изминенные и незакоммиченные в другой сессии" тебе непонятно?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как работает undo?
    #39272917
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть мнение, что изменённые пишется через "е"
...
Рейтинг: 0 / 0
как работает undo?
    #39272924
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonhsonесть мнение, что изменённые пишется через "е"

опечатка.
...
Рейтинг: 0 / 0
как работает undo?
    #39272928
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovжвачкинкакой вектор изменения? чего?
Какое слово из "данные изминенные и незакоммиченные в другой сессии" тебе непонятно?..


не понятно, что будет записано в журнал повтора, в случае согласованного чтения CR?

обычная ситуация: update data

в redo log (буффер журнала) записывается:

1. пишем вектор - запись отмены в undo block
2. пишем вектор - данные, до изменения в блоке данных и после изменения
3. объединяем две записи выше в одну общую запись (вектор)
...
Рейтинг: 0 / 0
как работает undo?
    #39272936
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вопрос по-русскому языку:

почему слово буфер пишут с одной буквой "Ф", когда на оригинале пишется с двумя - buffer?
...
Рейтинг: 0 / 0
как работает undo?
    #39272937
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жвачкинзаписывается
Но не сразу. А когда жареный петух клюнет. Например, в виде вышеназванной параллельной
сессии. Вот она-то и запишет. Когда читать захочет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как работает undo?
    #39272950
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovжвачкинзаписывается
Но не сразу. А когда жареный петух клюнет. Например, в виде вышеназванной параллельной
сессии. Вот она-то и запишет. Когда читать захочет.


а как получить примерно такую выборку, с количеством undo блоков в кэше и data блоков?

Код: plsql
1.
2.
3.
    name               count
data block       11111111111111111
undo block       1234
...
Рейтинг: 0 / 0
как работает undo?
    #39272976
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ундо блок это не дата блок?
...
Рейтинг: 0 / 0
как работает undo?
    #39272980
xaxa.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
жвачкин,

v$bh
...
Рейтинг: 0 / 0
как работает undo?
    #39272983
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonhsonа ундо блок это не дата блок?

из прочитанного, я так понял, что ундо блок - это клон блока данных.
сам же исходный блок данных становится грязным, т.е. модифицированным.
...
Рейтинг: 0 / 0
как работает undo?
    #39272988
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xaxa.жвачкин,
v$bh
Код: plsql
1.
2.
3.
select count(block#)
from v$bh b
where B.STATUS='cr';



правильно ли я понял, что все блоки со статусом cr - относятся к Undo?
...
Рейтинг: 0 / 0
как работает undo?
    #39272999
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторКогда вы выполняете commit, ваша сессия обновит соответствующий слот таблицы транзакций в заголовке сегмента отката,
то есть пометит транзакцию как завершенную (state=9 - зафиксирована).

Могли бы вы любезно пояснить,

сегмент отката - блок в buffer_cache/на диске с исходными данными до изменения?

таблица транзакций - находится в каждом таком блоке, в его заголовке?

не совсем понял...

спасибо!
...
Рейтинг: 0 / 0
как работает undo?
    #39273030
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
жвачкинавторКогда вы выполняете commit, ваша сессия обновит соответствующий слот таблицы транзакций в заголовке сегмента отката,
то есть пометит транзакцию как завершенную (state=9 - зафиксирована).

Могли бы вы любезно пояснить,

сегмент отката - блок в buffer_cache/на диске с исходными данными до изменения?

таблица транзакций - находится в каждом таком блоке, в его заголовке?

не совсем понял...

спасибо!

сегмент отката - я так понял - это выделенный экстент в табличном пространстве Undo.

Не понимаю, что будет являться заголовком сегмента отката - какой-то блок из этого экстента?
...
Рейтинг: 0 / 0
как работает undo?
    #39273043
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
жвачкинжвачкинпропущено...


Могли бы вы любезно пояснить,

сегмент отката - блок в buffer_cache/на диске с исходными данными до изменения?

таблица транзакций - находится в каждом таком блоке, в его заголовке?

не совсем понял...

спасибо!

сегмент отката - я так понял - это выделенный экстент в табличном пространстве Undo.

Не понимаю, что будет являться заголовком сегмента отката - какой-то блок из этого экстента?
конец-то нагуглил.

авторПри создании сегмента отката выделяется minextents пока еще пустых экстентов, причем первый оракловский блок первого экстента зарезервирован под таблицу транзакций, или заголовок сегмента отката.
Мы будем говорить, что голова и хвост [прим.5]сегмента отката находятся в начале второго блока первого экстента сразу после заголовка (см. рис. 1). При назначении транзакции на этот сегмент отката, информация отката записывается, начиная со второго блока, причем у каждой активной транзакции существует также голова и хвост в сегменте отката.
...
Рейтинг: 0 / 0
как работает undo?
    #39273313
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мог бы кто-нибудь любезно мне рассказать, правильно ли я описываю процесс ниже и поправить в случае ошибок:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
1. Сессия начинает выполнять update
2. Выделенный серверный процесс читает блоки данных в buffer cache, если они там отсутствуют.
3. Перед началом транзакции изменяется SCN (после завершения транзакции?)
4. Идёт запись в журнальный буфер, описывающая как вставить запись отмены в undo block
5. Идёт запись в журнальный буфер, описывающая изменения в блоке данных
6. Идёт запись в сегмент Undo (запись в файл undotbs.dbf на диске), обновляется таблица транзакций 
7. Создаётся клон блока (cr block) в buffer cache, чтобы другие сессии могли читать данные в согласованном режиме
8. Оригинальный грязный блок, который сессия модифицирует в случае переполнения buffer cache сбрасывается на диск
9. cr block в случае, если buffer cache переполнен другими cr блоками также сбрасывается на диск.
10. Происходит фиксация транзакции - commit;
11. Выделенный серверный процесс ищет undo block (cr) в buffer cache, чтобы узнать, зафиксирована транзакция или нет
12. Если не находит, читает блок с диска
13. Обращается к сегменту Undo и просматривает таблицу транзакций, видит что транзакция завершена
14. Происходит очистка undo блока (cr block) - commit cleanout
...
Рейтинг: 0 / 0
как работает undo?
    #39273341
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11 - 13 не понятно, зачем анду читать лишний раз?

впрочем настолько детально меня не интересовал вопрос.
...
Рейтинг: 0 / 0
как работает undo?
    #39273352
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возник ещё один вопрос, если запрос ниже всегда показывает свободные блоки - free, повод ли это думать, что
буферный кэш имеет достаточный размер и точно не нуждается в увеличении размера?

Код: plsql
1.
2.
3.
select count(block#)
from v$bh b
where B.STATUS='free';



например, выставил PGA и SGA вручную, указал минимальное значение для buffer_cache=5G. и вижу, что 512 Мб всегда свободно...
...
Рейтинг: 0 / 0
как работает undo?
    #39273475
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жвачкинxaxa.жвачкин,
v$bh
Код: plsql
1.
2.
3.
select count(block#)
from v$bh b
where B.STATUS='cr';



правильно ли я понял, что все блоки со статусом cr - относятся к Undo?Нет, статус CR -- это блок используемый для чтения на какой-то момент времени (consistent read). Возможно, восстановленный с помощью применения UNDO. Возможно, никогда не существоваший именно в таком виде в БД (хоть на диске, хоть в кеше). Никогда не пишется на диск. Соответственно, не генерит REDO (отложенная очистка блоков работает с CURRENT версией)
Поэтому все твои дальнейшие рассуждения (после пункта 6) -- это фантазии.
Читать Oracle Core: Essential Internals for DBAs and Developers By Jonathan Lewis , есть перевод на русский, довольно неплохой (насколько я понял, переводил местный в свое время завсегдатай?)
по типам блоковС 9i
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
select decode(decode(least(class#, 17), 17, 18-mod(class#, 2), class#),
		 0, 'free',
		 1, 'data block',
		 2, 'sort block',
		 3, 'save undo block',
		 4, 'segment header',
		 5, 'save undo header',
		 6, 'free list',
		 7, 'extent map',
		 8, '1st level bmb',
		 9, '2nd level bmb',
		10, '3rd level bmb',
		11, 'bitmap block',
		12, 'bitmap index block',
		13, 'file header block',
		14, 'unused (space header block ???)',
		15, 'system undo header',
		16, 'system undo block',
		17, 'undo header',
		'undo block') Class,
	count(*)
from v$bh
group by decode(least(class#, 17), 17, 18-mod(class#, 2), class#)
/

В принципе, начиная с 15 идут блоки для UNDO/ROLLBACK с номером USN (15+USN*2 -- заголовок UNDO/ROLLBACK сегмента V$ROLLNAME.USN, 15+USN*2+1 -- блок UNDO/ROLLBACK сегмента)
...
Рейтинг: 0 / 0
как работает undo?
    #39273554
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров, большое спасибо за подробный ответ!

Скажите любезно, cr блоки - единственные блоки, которые не сбрасываются из кэша на диск в Oracle?

автор8. Оригинальный грязный блок, который сессия модифицирует в случае переполнения buffer cache сбрасывается на диск разве не так, если кэш переполнен?
...
Рейтинг: 0 / 0
как работает undo?
    #39273556
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модифицируется только CURRENT версия блока -- она одна на весь кеш и одна может быть грязной
...
Рейтинг: 0 / 0
как работает undo?
    #39273563
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЧитать Oracle Core: Essential Internals for DBAs and Developers By Jonathan Lewis
да я в процессе, только сразу походу чтения столько вопросов возникают, начиная со второй главы.

Интересна следующая ситуация (не было возможности имитировать):

Код: plsql
1.
2.
3.
4.
1. Размер SGA 4 Гб
2. Размер Redo Log 128 Мб, всего три журнала.
3. Выполняется полное обновление большой таблицы ~ 260 Гб. 
4. Коммит ставится лишь после того, как все строки таблицы обновлены



В результате работы транзакции первый redo заполнился, произошло переключение на второй журнал.
В этот момент кэш переполнился и грязные буферы стали сбрасываться на диск.
Транзакция продолжает идти. Второй журнал заполнился и переключился на третий.
В buffer cache уже не хватает места, чтобы хранить cr блоки, которые не сбрасываются на диск.
В этот момент третий журнал заполнился. Четвёртого журнала нет, транзакция ещё не завершена.

Что произойдёт в тот момент, когда все Redo переполнятся, а транзакция ещё не завершится?
Где держать новые cr блоки, когда в кэше нет места - он заполнен другими cr блоками?

Ошибка ORA- ???
...
Рейтинг: 0 / 0
как работает undo?
    #39273581
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забудь про CR блоки
Обновляются только CURRENT блоки
Нет места -- вытесняются на диск
Транзакция подтверждена -- у какой-то части блоков, находящихся в кэше, прописывается этот признак (быстрая очистка), остальным он пропишется при чтении (отложенная очистка) другим процессом (с диска или из кэша)
Транзакция откачена -- по всем блокам будет выполнен откат, если блок уже на диске, то прочитается в память и откатится, опять не хватит места в памяти -- измененные блоки уедут на диск. И та же фигня с признаками активных транзакций. Только еще и сегментах отмены надо будет пометить, что запись применена, что точно также "пачкает" блоки отмены
...
Рейтинг: 0 / 0
как работает undo?
    #39273594
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровЧитать Oracle Core: Essential Internals for DBAs and Developers By Jonathan Lewis , есть перевод на русский, довольно неплохой (насколько я понял, переводил местный в свое время ]

Перевод - Киселёв А. Н.
...
Рейтинг: 0 / 0
как работает undo?
    #39273653
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. быстрая и отложенная очистка применима только к current блокам, всё верно?
...
Рейтинг: 0 / 0
как работает undo?
    #39273825
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жвачкинпочему слово буфер пишут с одной буквой "Ф", когда на оригинале пишется с двумя - buffer?
Потому же, почему и буфет. :)
...
Рейтинг: 0 / 0
как работает undo?
    #39274130
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonhsonа ундо блок это не дата блок?
"Данные в базе уже модифицированы, так что 99,9% работы выполнено, например, перечисленные ниже операции.
- Блоки undo сгенерированы в области SGA
- Модифицированные блоки данных сгенерированы в области SGA".

(с) Том Кайт, Oracle для профессионалов, глава 9, Повтор и отмена страница 392

так что Undo Блок и data блок с точки зрения Кайта разные блоки, если я правильно прочёл то, что написано выше.
...
Рейтинг: 0 / 0
как работает undo?
    #39274352
жвачкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, таблица транзакций в сегменте отката - одна единственная на всю БД
или в каждом сегменте отката своя таблица транзакций и таких таблиц несколько?
...
Рейтинг: 0 / 0
73 сообщений из 73, показаны все 3 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как работает undo?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]