powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как работает undo?
25 сообщений из 73, страница 1 из 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
25 сообщений из 73, страница 1 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как работает undo?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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