Отменить оракул, что это такое

Обновлено: 05.07.2024

Oracle позволяет вносить изменения в базу данных в режиме «попробуй, прежде чем купить». Это означает, что изменения, которые вы вносите в базу данных, поначалу видны только вам. Следовательно, вы можете вносить изменения, проверять эти изменения и удостовериться, что они в порядке, прежде чем позволить кому-либо их увидеть. Убедившись, что изменения вам нравятся, вы даете команду фиксации, и все остальные могут их увидеть.

Этот тип функциональности обеспечивает согласованность базы данных. Это означает, что данные в базе данных при запросе всегда соответствуют одному и тому же моменту времени. Например, если вы одновременно запрашиваете две таблицы, скажем, таблицы с именами PARENT и CHILD, вы увидите записи из обеих таблиц, как они выглядели в один и тот же момент времени. Это означает, что никто не может подсунуть запись в таблицу CHILD, пока вы читаете таблицу PARENT, или наоборот. Гарантия того, что записи, которые вы будете читать, будут соответствовать одному и тому же моменту времени, называется согласованностью чтения. Согласованность чтения дает результаты вашего запроса такими, какими они были в момент нажатия Enter.

Сегменты Oracle Undo поддерживают эти согласованные по чтению операции (и другие операции с базой данных, такие как ретроспективные операции, которые мы обсудим позже в этой книге). Oracle создает сегмент отмены в табличном пространстве SYSTEM при создании базы данных. Этот сегмент отмены поддерживает только операции в табличном пространстве SYSTEM. Следовательно, если вы собираетесь использовать другие табличные пространства (а вы должны!), вам понадобятся другие сегменты отмены.

Итак, где мы можем взять эти другие сегменты отмены? Мы создаем табличное пространство отмены с помощью команды create undo tablespace (дальше мы поговорим о табличных пространствах более подробно), а Oracle автоматически создаст сегменты отмены и будет управлять ими за нас.

При первом создании базы данных Oracle в это же время может быть создано табличное пространство отмены, и мы рекомендуем именно этот подход. Прежде чем вы сможете использовать табличное пространство отмены, нам нужно установить несколько параметров (видите, опять эти параметры, они появляются везде!)

Вы можете использовать команду alter system для изменения любого из перечисленных выше параметров в любое время.

Однако обратите внимание, что если вы измените табличное пространство отмены, изменив параметр undo_tablespace, все еще могут быть активные транзакции со старым табличным пространством. Имейте это в виду, прежде чем удалять его, это может привести к одной из самых распространенных ошибок администратора баз данных: ORA-01555, моментальный снимок слишком старый, сегмент отката слишком мал!

Получите полную
информацию о настройке Oracle SQL

Знаменитая книга "Расширенная настройка Oracle SQL. Полное руководство" содержит ценную информацию о настройке Oracle SQL. Эта книга включает сценарии и инструменты для повышения производительности Oracle 11g, и вы можете купить ее со скидкой 30 % непосредственно у издателя.


Бурлесон — американская команда


Примечание. Эта документация по Oracle была создана в качестве справочника по поддержке и обучению Oracle для использования нашими специалистами-консультантами по настройке производительности администраторов баз данных. Не стесняйтесь задавать вопросы на нашем форуме Oracle.

Проверьте опыт! Любой, кто рассматривает возможность использования услуг эксперта службы поддержки Oracle, должен самостоятельно проверить свои полномочия и опыт, а не полагаться на рекламу и самопровозглашенный опыт. Все законные эксперты Oracle публикуют свои квалификации Oracle.

Ошибки? Технология Oracle меняется, и мы стараемся обновлять нашу информацию о поддержке BC Oracle. Если вы обнаружите ошибку или у вас есть предложение по улучшению нашего контента, мы будем признательны за ваш отзыв. Просто электронная почта:


и укажите URL-адрес страницы.


Burleson Consulting

Оракул поддержки баз данных

Когда транзакция изменяет данные, Oracle Database копирует исходные данные перед их изменением. Исходная копия измененных данных называется данными отмены. Сохранение этой информации необходимо по следующим причинам:

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

Для обеспечения согласованности чтения , что означает, что каждый пользователь может получить согласованное представление данных, даже если с данными могут происходить другие изменения. При согласованности чтения пользовательский сеанс не видит незафиксированные изменения, сделанные в других пользовательских сеансах (иногда называемые грязными чтениями). Например, если пользователь отправляет запрос в 10:00.и запрос длится 15 минут, то результаты запроса отражают все состояние данных на 10:00, независимо от операций обновления или вставки, выполненных другими пользователями после запуска запроса.

Для включения определенных функций Oracle Flashback, таких как Oracle Flashback Query и Oracle Flashback Table, которые позволяют просматривать или восстанавливать данные на предыдущий момент времени.

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

При создании базы данных с помощью помощника по настройке базы данных (DBCA) создается автоматически расширяемое табличное пространство отмены с именем UNDOTBS1 с максимальным размером расширения 32 767 МБ.

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

Даже после того, как транзакция была зафиксирована, полезно сохранять (не перезаписывать) ее данные отмены, чтобы гарантировать успех функций Oracle Flashback и согласованность чтения для длительных запросов. С этой целью база данных поддерживает и автоматически настраивает период хранения отмены. Зафиксированные данные отмены, возраст которых меньше срока хранения отмены, сохраняются для использования в запросах или операциях Oracle Flashback.

Концепции базы данных Oracle для получения дополнительной информации о согласованности чтения

Руководство по разработке баз данных Oracle для получения дополнительной информации о функциях Oracle Flashback

Вопрос: что мне делать, чтобы предотвратить рост моего табличного пространства UNDO?

Ответ: Размер табличного пространства UNDO определяется параметром undo_retention. f это не значение по умолчанию и установлено высокое значение, чтобы обеспечить большую область флэш-восстановления. Табличное пространство отмены будет сохранять старые данные до этого периода времени. Также проверьте, есть ли у вас какие-либо транзакции, которые не фиксируются/откатываются, как будто этого не происходит, тогда ваше табличное пространство будет продолжать расти.

См. мои заметки об управлении ростом UNDO с помощью параметра undo_retention.

Данные отмены управляются в табличном пространстве UNDO с помощью сегментов UNDO, которые автоматически создаются и поддерживаются Oracle. Каждая база данных Oracle должна иметь метод сохранения «до образов» строк, который используется для отката изменений в базе данных. Такая информация состоит из записей действий транзакций, прежде всего, до их совершения. Строки UNDO используются для нескольких целей. Мы также видим следующие причины для UNDO:

  • Откат транзакции: UNDO — это механизм, с помощью которого вы можете отменить свои изменения перед фиксацией с помощью команды ROLLBACK. Кроме того, если процесс аварийно завершается, UNDO будет использоваться для очистки любых незафиксированных транзакций.
  • Воспоминание. Oracle 10g и более поздние версии имеют базу данных Flashback. Flashback Query и Flashback Table (но не отброшенная таблица) используют UNDO.
  • Консистенция чтения. Если вы запускаете запрос в 9:00 и он занимает 3 часа, результаты вы видите в 9:00 или в полдень? Ответ: 9 утра, момент, когда вы нажали клавишу ввода. Oracle достигает этого за счет согласованности чтения, которая извлекает требуемые данные из текущих блоков данных или согласованных блоков чтения, то есть UNDO. Если у вас недостаточно UNDO для выполнения ваших длительных запросов, вы можете получить ошибку ORA-01555.
  • Восстановление транзакции: если ваш экземпляр аварийно завершен (kill -9 pmon, завершение работы, отмена), SMON выполнит восстановление при запуске экземпляра. Это включает четыре этапа: подключение базы данных, откат всех повторных операций с момента последней контрольной точки до файлов данных, открытие базы данных и откат всех незафиксированных транзакций.

Следовательно, если в табличном пространстве UNDO большое значение undo_retention, оно займет все дисковое пространство в табличном пространстве UNDO. Я предлагаю вам взглянуть на своего советника UNDO в OEM-производителе и посмотреть, что он рекомендует для размера табличного пространства UNDO для вашей базы данных.

Есть несколько представлений, которые показывают информацию, связанную с действиями UNDO:

  • V$UNDOSTAT: представление в виде гистограммы, показывающее статистику за 10-минутные интервалы.
  • V$TRANSACTION: представление текущего времени с информацией о текущих транзакциях.
  • V$SESSTAT: статистика отдельного сеанса, в том числе статистика использования отмены.

Вы можете запросить v$undostat и представление v$transaction, чтобы увидеть фактическое использование вашего табличного пространства UNDO. Вы также можете запустить этот запрос, чтобы увидеть использование UNDO:

У нас также есть этот запрос для измерения растущего использования табличного пространства UNDO:

имя_пользователя FORMAT A15

Короче говоря, параметр undo_retention используется для регулирования растущего табличного пространства UNDO.

Обучение Oracle от Дона Берлесона

Лучшие на сайте «Учебные курсы Oracle» находятся на расстоянии одного телефонного звонка! Вы можете пройти индивидуальное обучение Oracle от Дональда Берлесона прямо в своем магазине!

Консультации и обучение Oracle

Бурлесон — американская команда


Примечание. Эта документация по Oracle была создана в качестве справочника по поддержке и обучению Oracle для использования нашими специалистами-консультантами по настройке производительности администраторов баз данных. Не стесняйтесь задавать вопросы на нашем форуме Oracle.

Проверьте опыт! Любой, кто рассматривает возможность использования услуг эксперта службы поддержки Oracle, должен самостоятельно проверить свои полномочия и опыт, а не полагаться на рекламу и самопровозглашенный опыт. Все законные эксперты Oracle публикуют свои квалификации Oracle.

Ошибки? Технология Oracle меняется, и мы стараемся обновлять нашу информацию о поддержке BC Oracle. Если вы обнаружите ошибку или у вас есть предложение по улучшению нашего контента, мы будем признательны за ваш отзыв. Просто электронная почта:


и укажите URL-адрес страницы.


Burleson Consulting

Оракул поддержки баз данных

В базе данных Oracle есть метод хранения информации, который используется для отката или отмены изменений в базе данных. База данных Oracle хранит записи о действиях транзакций до того, как они будут зафиксированы, и Oracle нужна эта информация для отката или отмены изменений в базе данных. Эти записи называются записями отката или отмены.

  • Транзакции отката. Когда выполняется инструкция ROLLBACK, записи отмены используются для отмены изменений, внесенных в базу данных незафиксированной транзакцией.
  • Восстановить базу данных. Во время восстановления базы данных записи отмены используются для отмены любых незафиксированных изменений, примененных к файлам данных из журнала повторных изменений.
  • Обеспечение согласованности чтения. Записи отмены обеспечивают согласованность чтения, сохраняя предыдущее изображение данных для пользователей, которые обращаются к данным в то же время, когда другой пользователь изменяет их.
  • Анализ данных на более ранний момент времени с помощью ретроспективного запроса.
  • Восстановление после логических повреждений с помощью функций Flashback.

До Oracle 8i для управления данными отмены в Oracle использовались сегменты отката. В Oracle9i реализовано автоматическое управление откатами, которое позволяет администратору баз данных лучше контролировать, как долго хранится информация об отмене, упрощает управление пространством отката, а также устраняет сложность управления сегментами отката. Oracle настоятельно рекомендует использовать табличное пространство отмены для управления сегментами отмены, а не сегментами отката.

Пространство для сегментов отмены динамически выделяется, расходуется, освобождается и используется повторно — все это находится под контролем Oracle Database, а не администратором баз данных.

Начиная с Oracle 9i, метод сегментов отката называется «Режимом управления ручной отменой», а новый метод табличных пространств отмены — «Режимом управления автоматической отменой».

  • Хотя поддерживаются как сегменты отката, так и табличные пространства отмены, оба режима нельзя использовать в одном и том же экземпляре базы данных, хотя в целях миграции можно, например, создать табличные пространства отмены в базе данных, использующей сегменты отката, или удалить сегменты отката в базе данных, использующей табличные пространства отмены. Однако вы должны вернуть базу данных, чтобы осуществить переключение на другой метод управления отменой.
  • Сегмент отката системы существует в обоих режимах.
  • При работе в режиме автоматического управления отменой любые операторы SQL для управления отменой вручную и параметры инициализации игнорируются, и сообщение об ошибке не выдается, например. Операторы ALTER ROLLBACK SEGMENT будут игнорироваться.

Следующая настройка параметра инициализации приводит к тому, что команда STARTUP запускает экземпляр в режиме автоматического управления отменой:

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

При запуске экземпляра база данных автоматически выбирает для использования первое доступное табличное пространство отмены. Если нет доступного табличного пространства отмены, экземпляр запускается, но использует сегмент отката SYSTEM для отмены. Это не рекомендуется, и в файл журнала предупреждений записывается предупреждение о том, что система работает без табличного пространства отмены.Ошибка ORA-01552 выдается при любых попытках записать отмену, не связанную с СИСТЕМОЙ, в сегмент отката СИСТЕМА.

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

В этом случае, если вы еще не создали табличное пространство отмены, команда STARTUP завершится ошибкой. Параметр UNDO_TABLESPACE можно использовать для назначения определенного табличного пространства отмены экземпляру в среде Oracle Real Application Clusters (RAC).

Чтобы найти табличные пространства отмены в базе данных
SQL> выберите имя_табличного_пространства, содержимое из dba_tablespaces, где содержимое = 'UNDO';

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

Значение параметра UNDO_RETENTION по умолчанию – 900. Срок хранения указывается в секундах. Это значение указывает количество времени, в течение которого отмена хранится в табличном пространстве. Система сохраняет отмену по крайней мере в течение времени, указанного в этом параметре.

Эффект параметра UNDO_RETENTION проявляется немедленно, но его можно учитывать только в том случае, если в текущем табличном пространстве отмены достаточно места. Если для активной транзакции требуется пространство для отмены, а в табличном пространстве отмены нет свободного места, система начинает повторно использовать неистекшее пространство для отмены (если сохранение не гарантируется). Это действие потенциально может привести к сбою некоторых запросов с сообщением об ошибке ORA-01555 "слишком старый снимок".

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

Oracle Database 10g автоматически настраивает срок хранения отмен, собирая статистику использования базы данных и оценивая объем отмен, необходимый для успешного выполнения запросов. Вы можете установить низкое пороговое значение для параметра UNDO_RETENTION, чтобы система сохраняла отмену по крайней мере в течение времени, указанного в параметре, при условии, что в текущей табличной области отката достаточно места. В условиях нехватки места система может сохранять отмену в течение более короткого времени, чем указано в нижнем пороговом значении, чтобы обеспечить успешное выполнение операций DML.

Количество времени, в течение которого отмена сохраняется в базе данных Oracle для текущего табличного пространства отмены, можно получить, запросив столбец TUNED_UNDORETENTION динамического представления производительности V$UNDOSTAT.

Автоматическая настройка хранения отмены не поддерживается для больших объектов. Значение RETENTION для столбцов LOB устанавливается равным значению параметра UNDO_RETENTION.

В случае, если в вашем коде есть команды изменения транзакции, которые выполняют операции управления отменой вручную. Установите для этого параметра значение true, чтобы подавить ошибки, возникающие при выполнении SQL-операций ручного управления в режиме автоматического управления.

Oracle Database 10g позволяет гарантировать сохранение отмены. Когда вы включаете эту опцию, база данных никогда не перезаписывает неистекшие данные отмены, т. е. данные отмены, возраст которых меньше срока хранения отмены. Этот параметр отключен по умолчанию, что означает, что база данных может перезаписать неистекшие данные отмены, чтобы избежать сбоя операций DML, если в табличном пространстве отмены недостаточно свободного места.

Вы включаете опцию гарантии, указав предложение RETENTION GUARANTEE для табличного пространства отмены, когда оно создается оператором CREATE DATABASE или CREATE UNDO TABLESPACE, или вы можете позже указать это предложение в операторе ALTER TABLESPACE. Вы не гарантируете сохранение незавершенных операций отмены, если укажете условие RETENTION NOGUARANTEE.

Чтобы гарантировать успешность запросов даже ценой ущерба для успешности операций DML, вы можете включить гарантию хранения. Эту опцию следует использовать с осторожностью, поскольку она может привести к сбою операций DML, если табличное пространство отмены недостаточно велико. Однако при правильных настройках длительные запросы могут выполняться без риска получения сообщения об ошибке ORA-01555 "слишком старый снимок", и вы можете гарантировать временное окно, в течение которого функции Flashback будут выполняться успешно.

Начиная с версии 10g вы можете использовать представление DBA_TABLESPACES для определения параметра RETENTION для табличного пространства отмены. Столбец с именем RETENTION будет содержать значение GUARANTEE, NOGUARANTEE или NOT APPLY (используется для табличных пространств, отличных от табличного пространства отмены).

Обычно вариант гарантии используется, когда вы хотите обеспечить детерминированное и предсказуемое поведение Flashback Query, гарантируя доступность необходимых данных отмены.

Вы можете изменить размер табличного пространства отмены, используя автоматическое расширение табличного пространства отмены, или вручную оценив пространство.

Oracle Database поддерживает автоматическое расширение табличного пространства отмены для облегчения планирования емкости табличного пространства отмены в производственной среде. Когда система впервые запускается в производственной среде, вы можете быть не уверены в требованиях к пространству для табличного пространства отмены. В этом случае вы можете включить автоматическое расширение для файлов данных табличного пространства отмены, чтобы они автоматически увеличивались в размере, когда требуется больше места. Комбинируя автоматическое расширение табличного пространства отката с автоматически настроенным сохранением отката, вы можете гарантировать успешное завершение длительных запросов, гарантируя отмену, необходимую для таких запросов.

После того, как система стабилизируется и вы лучше ознакомитесь с требованиями к пространству для отката, Oracle рекомендует установить максимальный размер табличного пространства немного (на 10 %) больше, чем текущий размер табличного пространства отката.

Если вы выбрали табличное пространство отмены фиксированного размера, помощник по отмене поможет нам оценить необходимую емкость, а затем вы сможете рассчитать объем хранения, который потребуется вашей системе. Вы можете получить доступ к Undo Advisor через Enterprise Manager или через пакет DBMS_ADVISOR.

Советник по отмене использует для анализа данные, собранные в автоматическом репозитории рабочей нагрузки (AWR). Корректировка интервала сбора и периода хранения статистики AWR может повлиять на точность и тип рекомендаций, выдаваемых советником.

Oracle Database предоставляет помощника по отмене, который дает советы и помогает автоматизировать создание среды отмены. Вы активируете советник по отмене, создавая задачу советника по отмене через структуру советника. В следующем примере создается задача советника по отмене для оценки табличного пространства отмены. Советник называется Undo Advisor. Анализ основан на моментальных снимках AWR, которые необходимо указать, задав параметры START_SNAPSHOT и END_SNAPSHOT.

Читайте также: