УПРАВЛЕНИЕ СЕГМЕНТАМИ ОТКАТА


ГЛАВА 9

        ----------------------------------------------------------------

        УПРАВЛЕНИЕ СЕГМЕНТАМИ ОТКАТА



        Эта глава объясняет, как управлять сегментами отката.  Темы этой
        главы включают обсуждение следующих вопросов:

            *  указания по сопровождению сегментами отката

            *  создание сегментов отката и установка для них параметров
               памяти

            *  изменение сегментов отката

            *  перевод сегментов отката в онлайн и офлайн

            *  явное назначение транзакции сегменту отката

            *  удаление сегментов отката

            *  отслеживание сегментов отката

[Trusted]

        Если вы используете Trusted ORACLE в режиме DBMS MAC, обратитесь
        к  документу  Trusted  ORACLE7  Server Administrator's Guide для
        дополнительной информации об управлении сегментами отката в этом
        окружении.

[Parallel]

        Если  вы  используете  ORACLE  с  опцией  параллельного сервера,
        обратитесь к документу  ORACLE7 Parallel Server  Administrator's
        Guide  для  дополнительной  информации  об управлении сегментами
        отката в этом окружении.
























                                       Управление сегментами отката  9-1


----------------

Указания по сопровождению сегментов отката

        Примите  во  внимание  следующие  рекомендации  при  создании  и
        управлении сегментами отката в ваших базах данных.


Используйте множественные сегменты отката
-----------------------------------------

        Использование   нескольких    сегментов   отката    распределяет
        соперничество за сегменты отката по разным сегментам и  улучшает
        производительность  системы.    Множественные  сегменты   отката
        требуются в следующих ситуациях:

            *  При создании базы данных в табличном пространстве  SYSTEM
               создается единственный  сегмент отката  с именем  SYSTEM.
               Если   база   данных   должна   иметь   другие  табличные
               пространства,  то  она   ДОЛЖНА  иметь  не   меньше  двух
               сегментов отката в табличном пространстве SYSTEM.  Вы  не
               можете  создавать  объекты  в  табличных   пространствах,
               отличных от SYSTEM (даже сегменты отката), пока у вас  не
               создан  и  не  переведен  в  онлайн  по меньшей мере один
               дополнительный  сегмент  отката  в табличном пространстве
               SYSTEM.

            *  В параллельном сервере  ORACLE, каждая инстанция  требует
               доступа  к  своему  собственному  сегменту отката (помимо
               сегмента   отката   SYSTEM),   чтобы   стартовать.    Для
               дополнительных   подробностей   обратитесь   к  документу
               ORACLE7 Parallel Server Administrator's Guide.

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


Добавьте сегмент отката в табличное пространство SYSTEM

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

        Инстанция всегда получает сегмент  отката SYSTEM в дополнение  к
        любым сегментам отката, в  которых она нуждается.  Однако,  если
        существуют   несколько   сегментов   отката,   ORACLE  старается
        использовать  сегмент   отката  SYSTEM   лишь  для   специальных
        системных транзакций, и распределяет пользовательские транзакции
        среди остальных сегментов  отката; лишь если  транзакций слишком

9-2  Руководство администратора


        много  для   сегментов  отката,   отличных  от   SYSTEM,  ORACLE
        использует сегмент отката SYSTEM.  Поэтому, после создания  базы
        данных, создайте по меньшей мере еще один дополнительный сегмент
        в табличном пространстве SYSTEM.


Выбирайте между общими и личными сегментами отката
--------------------------------------------------

        Если вы не используете  опцию параллельного сервера, то  общие и
        личные сегменты отката идентичны.  Поэтому вы можете создать все
        сегменты  отката  общими.   База  данных  с опцией параллельного
        сервера может также иметь лишь общие сегменты отката, пока число
        этих  сегментов  достаточно  высоко,  чтобы  каждая   инстанция,
        открывающая базу  данных, могла  получить по  меньшей мере  один
        сегмент отката в дополнение к сегменту отката SYSTEM.  Однако  в
        среде   параллельного   сервера   ORACLE   вы   можете  захотеть
        использовать   личные   сегменты   отката.    Для дополнительной
        информации  обратитесь  к  документу  ORACLE7  Parallel   Server
        Administrator's Guide.


Специфицируйте сегменты отката для их автоматического получения
---------------------------------------------------------------

        По умолчанию, когда инстанция запускается, она пытается получить
        TRANSACTIONS/TRANSACTIONS_PER_ROLLBACK_SEGMENT сегментов отката.
        Если   вы   хотите   гарантировать,   чтобы   инстанция получала
        конкретные  сегменты  отката  (например,  сегменты   конкретного
        размера, или в конкретных табличных пространствах, или сегменты,
        специфичные  для  инстанции,  в  случае  параллельного сервера),
        специфицируйте   сегменты   отката   по   именам   в   параметре
        ROLLBACK_SEGMENTS в файле параметров инстанции.

        Инстанция  получает  все  сегменты  отката, перечисленные в этом
        параметре,  даже  если  это  дает  количество  сегментов отката,
        превышающее      TRANSACTIONS/TRANSACTIONS_PER_ROLLBACK_SEGMENT.
        Получаемые сегменты отката могут быть личными или общими.

Правильно подбирайте размеры сегментов отката
---------------------------------------------

        Общий размер  сегмента отката  должен устанавливаться  на основе
        размеров наиболее типичных транзакций, выдаваемых в базе данных.
        В общем,  короткие транзакции  выигрывают в  производительности,
        когда  база  данных  имеет  больше  сегментов  отката   меньшего
        размера, тогда как  долгоидущие транзакции (такие,  как пакетные
        задания)  лучше  работают  при  больших  сегментах  отката.    В
        большинстве   случаев,   сегменты   отката   легко   обслуживают
        транзакции  любого  размера;  однако  в  крайних  случаях, когда
        транзакции  либо  очень  малы,  либо  очень велики, пользователь
        может  захотеть  использовать  сегмент  отката  соответствующего
        размера.

        Если  система  выполняет  только  короткие  транзакции, сегменты
        отката должны быть небольшими, чтобы они всегда были  кэшированы
        в основной  памяти.  Если  сегменты отката  достаточно малы, они
        имеют  больше  шансов  кэшироваться  в  SGA,  согласно алгоритму
        вытеснения  LRU,  и  производительность  базы данных улучшается,
        потому что требуется  меньше ввода-вывода.  Основной  недостаток
        маленьких сегментов отката  - это повышенная  вероятность ошибки
        "spapshot  too  old"  ("снимок  слишком  стар")  при  выполнении

                                       Управление сегментами отката  9-3


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

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

        Когда приложения базы данных одновременно выдают смесь из  очень
        коротких и  очень длинных  транзакций, производительность  можно
        оптимизировать, если явно назначать транзакцию сегменту  отката,
        основываясь  на  соотношении  размеров  транзакции  и   сегмента
        отката;   динамическое   распределение   экстентов   и  усечение
        сегментов отката могут  быть минимизированы.  (Это  не требуется
        для большинства систем,  и предназначено лишь  для исключительно
        больших  или  маленьких  транзакций.)   Для  оптимизации   таких
        ситуаций, выполните следующие шаги:

        1. Создайте по  нескольку сегментов  отката подходящего  размера
           для каждого типа  транзакций (например, маленьких,  средних и
           больших).      Большинство     сегментов     отката    должно
           соответствовать  типичным  транзакциям,  и меньшее количество
           сегментов  отката   -  нетипичным   транзакциям.   Установите
           OPTIMAL для каждого такого сегмента отката, с тем, чтобы этот
           сегмент  отката  возвращался  к  своему назначенному размеру,
           если он был вынужден расти.

        2. Сообщите   разработчикам   приложений   или   пользователям о
           различных комплектах сегментов отката, соответствующих разным
           типам транзакций.   В большинстве  случаев, явное  назначение
           транзакции  конкретному  сегменту  отката  НЕ  дает   никакой
           выгоды;   однако   нетипичную   транзакцию   можно  назначить
           подходящему сегменту отката, созданному для транзакции такого
           типа.  Например, вы  можете назначить транзакцию,  содержащую
           длинное пакетное задание, большому сегменту отката.

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

        Вообще  говоря,   вы  должны   устанавливать  высокое   значение
        MAXEXTENTS для сегментов  отката; это позволяет  сегменту отката
        распределять дополнительные экстенты по мере необходимости.











9-4  Руководство администратора


Обеспечивайте много экстентов одинакового размера
-------------------------------------------------

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

        Определив полный  начальный размер  сегмента отката  и начальное
        число  экстентов  для  этого  сегмента,  используйте   следующую
        формулу,  чтобы  вычислить  размер  каждого  экстента   сегмента
        отката:

        T / n = s

        где:

            T  =  общий размер начального сегмента отката, в байтах
            n  =  число экстентов начального распределения
            s  =  вычисляемый размер, в байтах, каждого экстента
                  начального распределения

        Затем создайте сегмент отката, задав параметры памяти INITIAL  и
        NEXT  равными  s,  а  MINEXTENT  равным  n.   Заметьте,  что для
        сегментов   отката   нельзя   специфицировать   PCTINCREASE  (по
        умолчанию он равен 0).  Заметьте также, что если размер экстента
        (s)  не  кратен  размеру  блока  данных, он округляется вверх до
        ближайшего кратного.


Установите оптимальное число экстентов для каждого сегмента отката
------------------------------------------------------------------

        Параметр  OPTIMAL  для  каждого  сегмента  отката  должен   быть
        тщательно  подобран  согласно  типу  транзакций,  выполняемых  в
        системе.   Для  системы,  часто  выполняющей  долго   работающие
        транзакции, OPTIMAL должен  быть достаточно велик,  чтобы ORACLE
        не  приходилось  часто  сжимать  и  распределять  экстенты.  Для
        систем, выполняющих  длинные запросы  по активным  (одновременно
        обновляемым) данным,  OPTIMAL также  должен быть  большим, чтобы
        избежать  ошибок  "снимок  слишком  стар".   OPTIMAL должен быть
        меньше для систем, в основном выполняющих короткие транзакции  и
        короткие   запросы,   так   чтобы   сегменты   отката оставались
        достаточно   малы   для   кэширования   в   памяти   и улучшения
        производительности системы.

        Для  получения  оценок  и  отслеживания  эффективности установок
        OPTIMAL  для  сегментов  отката,  используйте  средство  MONITOR
        ROLLBACK SQL*DBA.  В этом  мониторе для каждого сегмента  отката
        выдается следующая статистика:

        Sizes, High Water       наибольшая  память,  которая  когда-либо
                                была  распределена  сегменту  отката,  в
                                байтах

        Sizes, Optimal          размер OPTIMAL сегмента отката, в байтах

        Occurences, Wraps       общее   число   раз,   когда  транзакция
                                переключалась с одного экстента сегмента
                                отката на другой существующий экстент


                                       Управление сегментами отката  9-5


        Occurrences, Extends    общее  число  раз,  когда  для  сегмента
                                отката распределялся новый экстент
        Shrinks                 общее  число  раз,  когда  ORACLE усекал
                                экстенты от сегмента отката
        Average Sizes, Shrunk   средний  размер  памяти,  отбиравшейся у
                                сегмента отката при усечениях
        Average Sizes, Active   среднее число байт в активных  экстентах
                                сегмента отката, измеряемое во времени

        В предположении, что инстанция имеет сегменты отката одинакового
        размера со сравнимыми  экстентами, параметр OPTIMAL  для данного
        сегмента  отката  должен  устанавливаться  несколько  выше,  чем
        значение Average Sizes, Active.

        Табл.9-1   содержит   дополнительную   информацию   о   том, как
        интерпретировать статистику, предоставляемую этим монитором.

Табл.9-1
Анализ эффективности текущих значений OPTIMAL

        г=========T=========T==========================================¬
        ¦ Shrinks ¦ Average ¦                                          ¦
        ¦         ¦  Sizes, ¦      Анализ и рекомендации               ¦
        ¦         ¦ Shrunk  ¦                                          ¦
        ¦---------+---------+------------------------------------------¦
        ¦ Низкое  ¦ Низкое  ¦ Если Average Sizes, Active близко к      ¦
        ¦         ¦         ¦ Sizes, Optimal, то значение OPTIMAL      ¦
        ¦         ¦         ¦ корректно. В противном случае значение   ¦
        ¦         ¦         ¦ OPTIMAL слишком велико (делается мало    ¦
        ¦         ¦         ¦ усечений).                               ¦
        ¦---------+---------+------------------------------------------¦
        ¦ Низкое  ¦ Высокое ¦ Очень хорошее значение OPTIMAL.          ¦
        ¦---------+---------+------------------------------------------¦
        ¦ Высокое ¦ Низкое  ¦ Значение OPTIMAL слишком мало - делается ¦
        ¦         ¦         ¦ много усечений.                          ¦
        ¦---------+---------+------------------------------------------¦
        ¦ Высокое ¦ Высокое ¦ Вероятно, такая статистика вызывается    ¦
        ¦         ¦         ¦ периодически выполняющимися длинными     ¦
        ¦         ¦         ¦ транзакциями. Повышайте значение OPTIMAL,¦
        ¦         ¦         ¦ пока значение Shrinks не станет низким.  ¦
        L=========¦=========¦==========================================-


Выбирайте местоположение для сегментов отката
---------------------------------------------

        Если возможно, создайте  одно табличное пространство  специально
        для сегментов отката, отличных от тех двух, которые требуются  в
        табличном  пространстве  SYSTEM.   Таким  образом,  все   данные
        сегментов отката  будут размещаться  отдельно от  всех остальных
        типов данных.  Это правило обеспечит вам следующие преимущества:

            *  Пространство,  содержащее  сегменты  отката, можно всегда
               поддерживать  в  онлайне,  тем  самым  максимизируя общую
               емкость  памяти  для  сегментов  отката  во  все времена.
               (Если некоторые  сегменты отката  недоступны, может  быть
               затронута общая работоспособность базы данных.)

            *  Так  как  табличные  пространства  с активными сегментами
               отката  нельзя  переводить   в  офлайн,  выделение   всех
               сегментов  отката  базы  данных  в  отдельное   табличное
               пространство  гарантирует,   что  данные,   хранящиеся  в

9-6  Руководство администратора


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

            *  Свободные   экстенты   табличного   пространства   больше
               подвержены   фрагментации,   если   в   этом    табличном
               пространстве  содержатся  сегменты  отката, которые часто
               распределяют и освобождают свои экстенты.


----------------

Создание сегментов отката

        Чтобы  создать  дополнительный  сегмент  отката для базы данных,
        используйте  либо  диалоговое   окно  Create  Rollback   Segment
        SQL*DBA, либо  команду SQL  CREATE ROLLBACK  SEGMENT.  Табличное
        пространство, в котором создается сегмент отката, должно быть  в
        онлайне.

        Диалоговое окно  Create Rollback  Segment позволяет  вам создать
        новый сегмент отката.  Это окно показано на рис.9-1.

Рис.9-1
Диалог Create Rollback Segment

        ---------------------------------------------------------------¬
        ¦ File  Edit  Session  Instance  Storage  Log  Backup  Security¦
        ¦--------------------------------------------------------------+
        ¦¦                                                             ¦
        ¦¦        г============ Create Rollback Segment ==========¬    ¦
        ¦¦        ¦                                               ¦    ¦
        ¦¦        ¦ (o) Public (Available to All Instances)       ¦    ¦
        ¦¦        ¦ ( ) Private (Available to Specific Instance)  ¦    ¦
        ¦¦        ¦                                               ¦    ¦
        ¦¦        ¦ Name: users_rs---------------------------     ¦    ¦
        ¦¦        ¦                                               ¦    ¦
        ¦¦        ¦ In Tablespace: USERS-------------             ¦    ¦
        ¦¦        ¦                                               ¦    ¦
        ¦¦        ¦ Storage Parameters: ---------------------     ¦    ¦
        ¦¦        ¦                                               ¦    ¦
        ¦¦        ¦-----------------------------------------------¦    ¦
        ¦¦        ¦                         (OK)  (Cancel)        ¦    ¦
        ¦¦        L===============================================-    ¦
        ¦L-------------------------------------------------------------+
        ¦--------------------------------------------------------------+
        ¦¦                                                             ¦
        ¦¦                                                             ¦
        ¦L-------------------------------------------------------------+
        L---------------------------------------------------------------

        Этот пример  создает общий  сегмент отката  с именем  USERS_RS в
        табличном  пространстве  USERS,  с  использованием  умалчиваемых
        параметров памяти табличного пространства USERS.

        Следующее    предложение    является    командным   эквивалентом
        диалогового  окна  Create   Rollback  Segment,  показанного   на
        рис.9-1:

        CREATE PUBLIC ROLLBACK SEGMENT users_rs
          TABLESPACE users;



                                       Управление сегментами отката  9-7


Привилегии, требуемые для создания сегментов отката
---------------------------------------------------

        Для  создания  сегментов   отката  вы  должны   иметь  системную
        привилегию CREATE ROLLBACK SEGMENT.


Перевод новых сегментов отката в онлайн
---------------------------------------

        После того, как новый сегмент отката создан, он не доступен  для
        использования транзакциями никакой  инстанции, пока он  не будет
        переведен в состояние онлайн.   См. "Перевод сегментов отката  в
        онлайн и офлайн" для дополнительной информации.

        Если вы создаете личный  сегмент отката, вы должны  добавить имя
        этого  нового  сегмента  отката  в  параметр ROLLBACK_SEGMENTS в
        файле параметров базы данных.  Это позволит инстанции  захватить
        этот личный сегмент отката при запуске.  Например, если  созданы
        два  новых  личных  сегмента  отката  с  именами  RS1  и RS2, то
        параметр  ROLLBACK_SEGMENTS  в  файле  параметров  должен был бы
        иметь вид, подобный следующему:

        ROLLBACK_SEGMENTS = (RS1, RS2)


----------------

Спецификация параметров памяти для сегментов отката

        При  создании  сегмента  отката  вы можете задать необязательные
        параметры памяти для экстентов этого сегмента.  Вы можете  также
        изменять параметры памяти для существующего сегмента отката.


Установка параметров памяти при создании сегмента отката
--------------------------------------------------------

        В качестве  примера, предположим,  что вы  хотите создать  общий
        сегмент отката DATA1_RS со следующими характеристиками:

            *  Сегменту отката распределяется начальный экстент 50K.

            *  Сегменту отката распределяется второй экстент 50K.

            *  Оптимальный размер сегмента отката составляет 750K.

            *  Минимальное   число   экстентов   (и   начальное    число
               распределяемых экстентов) равно 15.

            *  Максимальное   число   экстентов,   которое   может  быть
               распределено сегменту отката, включая начальный  экстент,
               равно 100.

        Следующее   предложение   создает   сегмент   отката   с   этими
        характеристиками:

        CREATE PUBLIC ROLLBACK SEGMENT data1_rs
            TABLESPACE users
            STORAGE (



9-8  Руководство администратора


                INITIAL 50K
                NEXT 50K
                OPTIMAL 750K
                MINEXTENTS 15
                MAXEXTENTS 100);

        Диалоговое окно SQL*DBA Create Rollback Segment также  позволяет
        задавать параметры памяти при создании сегмента отката.


Изменение параметров памяти сегмента отката
-------------------------------------------

        Вы можете изменять параметры памяти сегмента отката после  того,
        как он создан.  Однако вы не можете изменить размеры  экстентов,
        уже распределенных сегменту отката;  вы можете повлиять лишь  на
        будущие экстенты.

        Чтобы  изменить  параметры  памяти  сегмента отката, используйте
        либо  диалоговое  окно  Alter  Rollback Segment Storage SQL*DBA,
        либо  команду  SQL  ALTER  ROLLBACK SEGMENT.  Рис.9-2 показывает
        диалоговое  окно  Alter  Rollback  Segment  Storage,  изменяющее
        максимальное число  экстентов, которое  может быть  распределено
        сегменту отката DATA1_RS.

Рис.9-2
Диалог Alter Rollback Segment Storage

        ---------------------------------------------------------------¬
        ¦ File  Edit  Session  Instance  Storage  Log  Backup  Security¦
        ¦--------------------------------------------------------------+
        ¦¦                                                             ¦
        ¦¦        г========= Alter Rollback Segment Storage ======¬    ¦
        ¦¦        ¦                                               ¦    ¦
        ¦¦        ¦ Rollback Segment:                             ¦    ¦
        ¦¦        ¦ --------------------------------------------¬ ¦    ¦
        ¦¦        ¦ ¦ DATA1_RS                                  ¦ ¦    ¦
        ¦¦        ¦ ¦ SYSTEM                                    ¦ ¦    ¦
        ¦¦        ¦ ¦                                           ¦ ¦    ¦
        ¦¦        ¦ L-------------------------------------------- ¦    ¦
        ¦¦        ¦                                               ¦    ¦
        ¦¦        ¦ [ ] Next Extent Size:     -----  (o)K  ( )M   ¦    ¦
        ¦¦        ¦ [ ] Optimal Extent Size:  -----  (o)K  ( )M   ¦    ¦
        ¦¦        ¦ [ ] Minimum # of Extents: ---                 ¦    ¦
        ¦¦        ¦ [X] Maximum # of Extents: 120                 ¦    ¦
        ¦¦        ¦                                               ¦    ¦
        ¦¦        ¦-----------------------------------------------¦    ¦
        ¦+--------¦      Mandatory          (OK)  (Cancel)        ¦----+
        ¦¦        L===============================================-    ¦
        ¦¦                                                             ¦
        ¦L-------------------------------------------------------------+
        L---------------------------------------------------------------

        Следующее    предложение    является    командным   эквивалентом
        диалогового окна Alter Rollback Segment Storage, показанного  на
        рис.9-2:

        ALTER PUBLIC ROLLBACK SEGMENT data1_rs
          STORAGE (MAXEXTENTS 120);




                                       Управление сегментами отката  9-9


        Замечание: Вы можете изменять характеристики для сегмента отката
        SYSTEM, включая  параметр OPTIMAL,  точно так  же, как изменяете
        любые другие сегменты отката.

        Для рекомендаций  по установке  размеров сегментов  отката и  их
        параметров памяти  (в том  числе OPTIMAL),  обратитесь к  секции
        "Указания по сопровождению сегментов отката" на странице 9-2.

        Замечание: Если  вы изменяете  общий сегмент  отката, вы  должны
        включить ключевое слово PUBLIC в команду ALTER ROLLBACK SYSTEM.


Привилегии, требуемые для изменения сегментов отката
----------------------------------------------------

        Для  изменения  сегментов  отката  вы  должны  иметь   системную
        привилегию ALTER ROLLBACK SEGMENT.


----------------

Перевод сегментов отката в онлайн и офлайн

        Сегмент  отката  находится  либо  в  состоянии  ОНЛАЙН (доступен
        транзакциям), либо в состоянии ОФЛАЙН (недоступен  транзакциям).
        В  большинстве  случаев  сегменты  отката  находятся в онлайне и
        доступны для использования их транзакциями.

        Вы можете захотеть перевести онлайновые сегменты отката в офлайн
        в следующих ситуациях:

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

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

        Замечание: Нельзя переводить в офлайн сегмент отката SYSTEM.

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


Перевод сегментов отката в онлайн
---------------------------------

        Вы  можете  перевести  в  онлайн  любой  сегмент отката, текущее
        состояние   которого   (показываемое   обзором   словаря  данных

9-10  Руководство администратора


        DBA_ROLLBACK_SEGS)  равно  "OFFLINE"  или  "PARTLY   AVAILABLE".
        Чтобы  перевести  сегмент  отката  в  онлайн,  используйте  либо
        диалоговое  окно  Set  Rollback  Segment  Online  SQL*DBA,  либо
        команду SQL ALTER ROLLBACK SEGMENT с опцией ONLINE.

        Рис.9-3 показывает диалоговое окно Set Rollback Segment  Online,
        которое переводит в онлайн сегмент отката USER_RS_2.

Рис.9-3
Диалог Set Rollback Segment Online

        ---------------------------------------------------------------¬
        ¦ File  Edit  Session  Instance  Storage  Log  Backup  Security¦
        ¦--------------------------------------------------------------+
        ¦¦                                                             ¦
        ¦¦        г=========== Set Rollback Segment Online =======¬    ¦
        ¦¦        ¦                                               ¦    ¦
        ¦¦        ¦ Rollback Segment:                             ¦    ¦
        ¦¦        ¦ --------------------------------------------¬ ¦    ¦
        ¦¦        ¦ ¦ T_RS1                                     ¦ ¦    ¦
        ¦¦        ¦ ¦ USERS_RS_2                                ¦ ¦    ¦
        ¦¦        ¦ ¦                                           ¦ ¦    ¦
        ¦¦        ¦ L-------------------------------------------- ¦    ¦
        ¦¦        ¦                                               ¦    ¦
        ¦¦        ¦-----------------------------------------------¦    ¦
        ¦+--------¦      Mandatory          (OK)  (Cancel)        ¦----+
        ¦¦        L===============================================-    ¦
        ¦¦                                                             ¦
        ¦L-------------------------------------------------------------+
        L---------------------------------------------------------------

        Следующее    предложение    является    командным   эквивалентом
        диалогового  окна  Set  Rollback  Segment Online, показанного на
        рис.9-3:

        ALTER ROLLBACK SEGMENT users_rs_2 ONLINE;

        После перевода сегмента отката  в онлайн его состояние  в обзоре
        словаря данных  DBA_ROLLBACK_SEGS изменяется  на "ONLINE".   См.
        "Вывод информации о  сегментах отката" на  странице 9-16 о  том,
        как опросить состояние сегмента отката, и приложение B об обзоре
        DBA_ROLLBACK_SEGS.

    Перевод в онлайн частично доступного сегмента отката

        Сегмент отката частично доступен (его состояние в обзоре словаря
        данных DBA_ROLLBACK_SEGS выдается как "PARTLY AVAILABLE"),  если
        он содержит данные  для сомнительной распределенной  транзакции.
        Обычно сегмент отката остается в этом состоянии до тех пор, пока
        транзакция  не  будет  разрешена  (либо автоматически, процессом
        RECO,  либо  вручную,   администратором).   Однако,  вы   можете
        обнаружить, что у вас все сегменты отката имеют состояние PARTLY
        AVAILABLE.  В этом случае вы можете перевести частично доступный
        сегмент отката в онлайн, как описано выше.









                                      Управление сегментами отката  9-11


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

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

    Автоматический перевод сегмента отката в онлайн

        Если вы хотите, чтобы сегмент отката автоматически переводился в
        онлайн  при  каждом  запуске  базы  данных,  добавьте  имя этого
        сегмента в  параметр ROLLBACK_SEGMENTS  в файле  параметров базы
        данных.  (См. приложение A.)


Перевод сегментов отката в офлайн
---------------------------------

        Чтобы  перевести  сегмент  отката  в  офлайн,  используйте  либо
        диалоговое  окно  Set  Rollback  Segment  Offline  SQL*DBA, либо
        команду SQL  ALTER ROLLBACK  SEGMENT с  опцией OFFLINE.  Текущее
        состояние  этого  сегмента  отката  (в  обзоре  словаря   данных
        DBA_ROLLBACK_SEGS) должно быть "ONLINE", и сегмент отката должен
        быть получен текущей инстанцией.

        Рис.9-4 показывает диалоговое окно Set Rollback Segment Offline,
        которое переводит в офлайн сегмент отката USER_RS_2.

Рис.9-4
Диалог Set Rollback Segment Offline

        ---------------------------------------------------------------¬
        ¦ File  Edit  Session  Instance  Storage  Log  Backup  Security¦
        ¦--------------------------------------------------------------+
        ¦¦                                                             ¦
        ¦¦        г=========== Set Rollback Segment Offline ======¬    ¦
        ¦¦        ¦                                               ¦    ¦
        ¦¦        ¦ Rollback Segment:                             ¦    ¦
        ¦¦        ¦ --------------------------------------------¬ ¦    ¦
        ¦¦        ¦ ¦ T_RS1                                     ¦ ¦    ¦
        ¦¦        ¦ ¦ USERS_RS_2                                ¦ ¦    ¦
        ¦¦        ¦ ¦                                           ¦ ¦    ¦
        ¦¦        ¦ L-------------------------------------------- ¦    ¦
        ¦¦        ¦                                               ¦    ¦
        ¦¦        ¦-----------------------------------------------¦    ¦
        ¦+--------¦      Mandatory          (OK)  (Cancel)        ¦----+
        ¦¦        L===============================================-    ¦
        ¦¦                                                             ¦
        ¦L-------------------------------------------------------------+
        L---------------------------------------------------------------

        Следующее    предложение    является    командным   эквивалентом
        диалогового окна  Set Rollback  Segment Offline,  показанного на
        рис.9-4:

        ALTER ROLLBACK SEGMENT users_rs_2 OFFLINE;




9-12  Руководство администратора


Проверка перевода сегмента отката в офлайн
------------------------------------------

        Если  вы  переводите  в  офлайн  сегмент  отката,  не содержащий
        активных записей отката, то ORACLE немедленно переводит  сегмент
        в офлайн и изменяет его состояние на "OFFLINE".

        Напротив, если вы пытаетесь  перевести в офлайн сегмент  отката,
        содержащий  записи  отката  для  активных транзакций (локальных,
        удаленных или дистрибутивных),  то ORACLE помечает  этот сегмент
        отката как недоступный для будущих транзакций, и переводит его в
        офлайн,   как   только   завершатся   все   активные транзакции,
        использующие  этот  сегмент  отката.   Пока не завершились такие
        транзакции, этот сегмент отката не может быть возвращен в онлайн
        никакой инстанцией, кроме той, которая пыталась перевести его  в
        офлайн.   В  течение  этого  периода,  состояние  этого сегмента
        отката в  обзоре DBA_ROLLBACK_SEGS  остается "ONLINE";  однако в
        обзоре V$ROLLSTAT его состояние выдается как "PENDING  OFFLINE".
        (См.  "Вывод информации о  сегментах отката" на странице  9-16 о
        том,  как  получить  сведения  о  состоянии сегмента отката; см.
        также приложение B об обзорах DBA_ROLLBACK_SEGS и V$ROLLSTAT.)

        Инстанция, которая попыталась перевести сегмент отката в  офлайн
        и перевела его в  состояние PENDING OFFLINE, может  вернуть этот
        сегмент в онлайн в любой момент; сегмент отката, возвращенный  в
        онлайн, возобновит нормальную работу.


Перевод в офлайн общих и личных сегментов отката
------------------------------------------------

        После того, как вы переведете в офлайн ОБЩИЙ сегмент отката,  он
        остается в офлайне (даже после останова и перезапуска инстанции)
        до  тех  пор,  пока  вы  не  переведете  его  обратно  в онлайн.
        Переведенный в офлайн ЛИЧНЫЙ  сегмент отката остается в  офлайне
        до его  явного перевода  в онлайн  ИЛИ до  перезапуска инстанции
        (если только  имя этого  личного сегмента  отката не  удалено из
        списка в файле параметров).


Привилегии, требуемые для изменения состояния сегментов отката
--------------------------------------------------------------

        Для  перевода  сегментов  отката  в  онлайн или офлайн вы должны
        иметь системную привилегию ALTER ROLLBACK SEGMENT.


















                                      Управление сегментами отката  9-13


----------------

Явное назначение транзакции сегменту отката

        Транзакция может явно назначаться конкретному сегменту отката  с
        помощью  команды  SET  TRANSACTION  с  параметром  USE  ROLLBACK
        SEGMENT.   Транзакции  явно  назначаются  сегментам  отката   по
        следующим причинам:

            *  Предвидимый   объем   информации   отката,   генерируемой
               транзакцией, уместится  в текущих  экстентах назначаемого
               сегмента отката.

            *  Не   потребуется   динамически   распределять   (а  потом
               освобождать) дополнительные экстенты для сегмента отката,
               так что общая производительности системы не снизится.

        Чтобы явно  назначить транзакцию  сегменту отката,  этот сегмент
        отката  должен   быть  в   онлайне  для   текущей  инстанции,  а
        предложение  SET  TRANSACTION  USE  ROLLBACK SEGMENT должно быть
        первым предложением транзакции.   Если указанный сегмент  отката
        не  в  онлайне,  или  предложение  SET  TRANSACTION USE ROLLBACK
        SEGMENT не первое в транзакции, то возвращается ошибка.

        Например,  если  вы   собираетесь  начать  транзакцию,   которая
        содержит  значительный  объем  работы  (превышающий  большинство
        транзакций),  вы  можете   назначить  эту  транзакцию   большому
        сегменту отката, например:

        SET TRANSACTION USE ROLLBACK SEGMENT large_rs1;

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


Привилегии, требуемые для назначения транзакции сегменту отката
---------------------------------------------------------------

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




















9-14  Руководство администратора


----------------

Удаление сегментов отката

        Сегменты  отката  могут  быть  удалены,  когда экстенты сегмента
        стали  слишком  фрагментированными  на  диске,  или если сегмент
        необходимо переместить в другое табличное пространство.

        Перед  тем,  как  удалять  сегмент  отката,  убедитесь,  что его
        текущее  состояние  -  OFFLINE.   Нельзя удалить сегмент отката,
        находящийся в одном из состояний ONLINE, PARTLY AVAILABLE, NEEDS
        RECOVERY или  INVALID.  (Если  состояние сегмента  - INVALID, то
        сегмент  уже   был  удален.)    Перед  удалением   сегмента  его
        необходимо перевести в офлайн; см.  "Перевод сегментов отката  в
        офлайн" на странице 9-12.

        Чтобы  удалить  офлайновый  сегмент  отката,  используйте   либо
        диалоговое окно Drop Rollback Segment SQL*DBA, либо команду  SQL
        DROP ROLLBACK SEGMENT.  Рис.9-5 показывает диалоговое окно  Drop
        Rollback Segment, которое удаляет сегмент отката DATA1_RS.

Рис.9-5
Диалог Drop Rollback Segment

        ---------------------------------------------------------------¬
        ¦ File  Edit  Session  Instance  Storage  Log  Backup  Security¦
        ¦--------------------------------------------------------------+
        ¦¦                                                             ¦
        ¦¦        г============ Drop Rollback Segment ============¬    ¦
        ¦¦        ¦                                               ¦    ¦
        ¦¦        ¦ Rollback Segment:                             ¦    ¦
        ¦¦        ¦ --------------------------------------------¬ ¦    ¦
        ¦¦        ¦ ¦ USERS_RS_2                                ¦ ¦    ¦
        ¦¦        ¦ ¦ DATA1_RS----------------------------------¦ ¦    ¦
        ¦¦        ¦ ¦                                           ¦ ¦    ¦
        ¦¦        ¦ L-------------------------------------------- ¦    ¦
        ¦¦        ¦                                               ¦    ¦
        ¦¦        ¦-----------------------------------------------¦    ¦
        ¦+--------¦                         (OK)  (Cancel)        ¦----+
        ¦¦        L===============================================-    ¦
        ¦¦                                                             ¦
        ¦L-------------------------------------------------------------+
        L---------------------------------------------------------------

        Следующее    предложение    является    командным   эквивалентом
        диалогового окна Drop Rollback Segment, показанного на рис.9-5:

        DROP PUBLIC ROLLBACK SEGMENT data1_rs;

        Если вы  используете команду  DROP ROLLBACK  SEGMENT, указывайте
        корректный тип  удаляемого сегмента  отката (общий  или личный),
        включая или опуская ключевое слово PUBLIC.

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








                                      Управление сегментами отката  9-15


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

        После  удаления  сегмента  отката  его  состояние  заменяется на
        INVALID.  Когда будет  создаваться очередной сегмент  отката, он
        займет  в   словаре  данных   строку,  освобожденную   удаленным
        сегментом отката (если есть  такая строка), и удаленный  сегмент
        отката  исчезнет  из  обзора  DBA_ROLLBACK_SEGS.   (См.   "Вывод
        информации о сегментах отката"  на странице 9-16 и  приложение B
        об обзоре DBA_ROLLBACK_SEGS.)


Привилегии, требуемые для удаления сегментов отката
---------------------------------------------------

        Для  удаления  сегментов   отката  вы  должны   иметь  системную
        привилегию DROP ROLLBACK SEGMENT.


----------------

Отслеживание информации о сегментах отката

        Используйте средство SQL*DBA MONITOR ROLLBACK, чтобы отслеживать
        информацию  о   сегментах  отката,   такую  как   размер,  число
        экстентов, оптимальное число экстентов, активность динамического
        освобождения   экстентов   и   текущее   использование активными
        транзакциями; это  средство описано  в документе  ORACLE7 Server
        Utilities   User's   Guide.    См.   также   секцию  "Установите
        оптимальное  число  экстентов  для  каждого  сегмента отката" на
        странице 9-5 для подробного описания того, как применять MONITOR
        для соответствующей операции.


Вывод информации о сегментах отката
-----------------------------------

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

        SELECT segment_name, tablespace_name, status
            FROM sys.dba_rollback_segs;

        SEGMENT_NAME  TABLESPACE_NAME  STATUS
        -------------------------------------
        SYSTEM        SYSTEM           ONLINE
        PUBLIC_RS     SYSTEM           ONLINE
        USERS_RS      USERS            ONLINE

        В дополнение к этому,  следующие обзоры словаря данных  содержат
        информацию  обо  всех  сегментах  базы  данных, включая сегменты
        отката:






9-16  Руководство администратора


            *  USER_SEGMENTS

            *  DBA_SEGMENTS

Пример 1:
Вывод всех сегментов отката

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

        SELECT segment_name, tablespace_name, bytes, blocks, extents
            FROM sys.dba_segments
            WHERE segment_type = 'ROLLBACK';

        SEGMENT_NAME  TABLESPACE_NAME     BYTES     BLOCKS    EXTENTS
        ------------- --------------- --------- ---------- ----------
        RS1           SYSTEM              20480         10          2
        RS2           TS1                 40960         20          3
        SYSTEM        SYSTEM             184320         90          3

Пример 2:
Проверка состояния сегмента отката, переведенного в офлайн

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

        SELECT name, xacts 'ACTIVE TRANSACTIONS'
          FROM v$rollname, v$rollstat
         WHERE status = 'PENDING OFFLINE'
           AND v$rollname.usn = v$rollstat.usn;

        NAME       ACTIVE TRANSACTIONS
        ---------- -------------------
        RS2                          3

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

Пример 3:
Вывод общих и личных сегментов отката

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

        SELECT segment_name, tablespace_name, owner
            FROM sys.dba_rollback_segs;

        SEGMENT_NAME  TABLESPACE_NAME  OWNER
        -------------------------------------
        SYSTEM        SYSTEM           SYS
        PUBLIC_RS     SYSTEM           PUBLIC
        USERS_RS      USERS            SYS


                                      Управление сегментами отката  9-17


Пример 4:
Вывод отложенных сегментов отката

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

        SELECT segment_name, segment_type, tablespace_name
          FROM sys.dba_segments
         WHERE segment_type = 'DEFERRED ROLLBACK';

        SEGMENT_NAME       SEGMENT_TYPE          TABLESPACE_NAME
        ------------       ------------          ---------------
        USERS_RS           DEFERRED ROLLBACK     USERS
















































9-18  Руководство администратора