Как выделяются экстенты в табличном пространстве UNDO ?

dbstalker, 08 сентября

По прочнении некоторых статей об пространстве отмены у меня сложилось такое мнение о процессе выделения новых экстентов транзакциям (главное здесь очередность):

  1. Берется экстент со статусом expired, если таковые имеются. Иначе:
  2. Берется новый экстент, если таковой имеется в undo-пространстве. Иначе:
  3. Берется экстент со статусом expired из offline undo segment!!! Иначе:
  4. Расширяется undo-пространство, если это возможно. Иначе:
  5. Берется экстент в статусе unexpired, если таковые имеются . Оракл на установленный параметр retention guarantee не обращает внимания!

Что здесь интересно: оказывается, что если у вас есть undo segment в состоянии offline, то большая вероятность того, что он будет задействован в работе базы данных при условии, что размер действующего пространства отмены не очень велик!

И еще: параметр retention guarantee , оказывается не очень надежный!

Хотелось бы на этот пост получить замечания и исправления.

Тэги: общее, UNDO

ОднаКнопка

5 комментариев

Прокоментировать

Anonymous
8 сентября 2009 г. в 22:04

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

Anonymous
9 сентября 2009 г. в 13:15

А оракл ни когда и не говорил, что параметр retention guarantee гарантирует целостность данных в анду. Если стоит выбор: убить сессию из-за недостатка undo или перезаписать ненужные данные (под защитой этого параметра), то оракл выберет первой вариант. Что и есть правильно

dbstalker
9 сентября 2009 г. в 13:56

Вы ошиблись. Оракл выбирает второй вариант: перезаписывает undo

Lkzcgfvf2000
23 апреля 2012 г. в 19:25

Вы оба ошиблись. При включенном "retention guarantee" и недостатке места в undo Oracle не будет перезаписывать данные защищенные "retention guarantee", но и не прибьет сессию. Он завершит DML операцию с ошибкой (нет места в undo). Proof link
http://docs.oracle.com/cd/B19306_01/server.102/b14231/undo.htm#BJFEHEIC
To guarantee the success of long-running queries or Oracle Flashback operations, you can enable retention guarantee. If retention guarantee is enabled, the specified minimum undo retention is guaranteed; THE DATABASE NEVER OVERWRITES UNEXPIRED UNDO DATA EVEN IF IT MEANS THAT TRANSACTIONS FAIL DUE TO LACK OF SPACE IN THE UNDO TABLESPACE. If retention guarantee is not enabled, the database can overwrite unexpired undo when space is low, thus lowering the undo retention for the system. This option is disabled by default.
WARNING:
Enabling retention guarantee can cause multiple DML operations to fail. Use with caution.

Lkzcgfvf2000
23 апреля 2012 г. в 19:36

Забыл уточнить. На поведение Oracle при поиске места для UNDO влияют 2 основных параметра
"UNDO_RETENTION" и "RETENTION GUARANTEE". UNDO_RETENTION определяет время после которого экстент считается expired. И в этом случае expired экстенты могут быть перезаписаны. А вот с "RETENTION GUARANTEE" Oracle гарантирует что указанное время данные будут доступны в UNDO.
Prooflink тот же

 

Новый комментарий

Я не спамер: введите суму 7+3



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Требуется бухгалтер
21 августа, 1 ответа