ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.






     ГЛАВА 16                              УПРАВЛЕНИЕ ПАМЯТЬЮ

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


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

Следующие главы содержат связанную информацию:
    * Глава 3 Файловая структура ORACLE RDBMS
    * Глава 4 Табличные пространства и сегменты
    * Глава 5 Пользовательские объекты базы

    Сопровождение файлов базы данных

Физические файлы базы отображаются на логические разделы, называемые табличными
пространствами. Табличное пространство должно содержать как минимум - один
файл,  но может содержать и несколько. За описанием файлов базы данных
обратитесь к Главе 3.

Благодаря закрытой  связи  между  файлами и табличными пространствами большая
часть сопровождения может быть  выполнена через SQL - операторы, ссылающихся на
табличные пространства. Например, используя операторы CREATE TABLESPACE или
ALTER  TABLESPACE,  Вы можете:

    * определять начальные файлы для табличного пространства
    * добавлять файлы в табличное пространство
    * переименовывать  файлы  в табличном пространстве (используя либо ALTER
      TABLESPACE, либо ALTER DATABASE).

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

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

        Сопровождение файлов журнала повторного выполнения

    Файлы журнала  повторного  выполнения используются для записи изменений,
выполняемых над блоками данных базы при записии транзакций,  а  также  - для
отката вперед в процессе восстановления.  Эти файлы описаны в Главе 3;
использование журнала повторного выполнения для восстановления приводится в
Главе 15.





                                   -- 166 --



Возможности поддержания журнала повторного выполнения зависят от режима его
использования.  Как описывается в Главе  3,  журнал может быть использован в
двух режимах:  ARCHIVELOG и NOARCHIVELOG.  Последующие разделы описывают
процессы модификации файлов журнала.

Замечание: Для выполнения операций  по  сопровождению  файлов журнала должны
           выполняться два условия:
    1. База должна быть монтирована, но закрыта.
    2. Вы должны связаться с базой с ключевым словом INTERNAL

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

  Добавление новых файлов журнала

Желание добавить новый файл журнала может возникнуть по  следующим причинам:
    * увеличение памяти в состоянии online
    * достижение  большей  гибкости  в вопросе архивации online - файлов
      журнала (только при использовании режима ARCHIVELOG и особенно - при
      ручном архивировании)
    * изменение  размеров online - файлов (путем добавления больших или меньших
      файлов и удаления текущих файлов журнала  повторного выполнения).

Добавляя файлы,  Вы получаете большую гибкость так как в этом случае не
требуется архивация файла журнала сразу же по  заполнении.  Если у Вас только
два файла, при заполнении одного надо его немедленно архивировать,  иначе после
заполнения  альтернативного процесс  LGWR  будет вынужден переключиться на
первый.  Имея же 3 или 4 файла, Вы можете архивировать одновременно (в пакете)
2 или 3 файла.

После соединения  с базой,  как описано выше,  можно добавить новый файл
журнала с помощью SQL - оператора:
    ALTER DATABASE name
    ADD LOGFILE filespec [, filespec ]

    Размер любого файла журнала не может быть меньше 50 Кбайтов.

Новые файлы можно добавлять до тех пор, пока не превышен предел, указанный в
параметре LOG_FILES  INIT.ORA  или  MAXLOGFILES, задаваемый в операторе CREATE
DATABASE.  После завершения изменения базы необходимо остановить экземпляр и
рестартовать его заново.

        Удаление файлов журнала повторного выполнения

Для изменения  размеров  файлов  журнала или уменьшения количества файлов,  в
которые ORACLE может писать информацию, Вам может понадобиться отменить online
- файл журнала.

Чтобы отменить файл журнала,  присоединитесь к базе, как описано выше и выдайте
SQL - оператор, используя следующий синтаксис:
    ALTER DATABASE name
    DROP LOGFILE filespec [, filespec ]

    Не удаляйте файлов журнала, не будучи уверены что:

    * в них не пишется информация в настоящий момент
    * они уже архивированы (если используется режим ARCHIVELOG)

                                   -- 167 --



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

        Переименование файлов журнала повторного выполнения

Переименование может Вам потребоваться для определения файла большего или
меньшего размера, а также - для указания нового местонахождения файла.

После описанной выше связи с базой наберите команду следующего вида:
    ALTER DATABASE name
    RENAME FILE filespec [, filespec ] TO
    filespec [, filespec ]

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

Выполнение этой команды влияет только на внутреннюю  информацию базы; она не
эквивалентна команде переименования операционной системы.

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

        Сопровождение сегментов отката

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

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

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

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

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

    CREATE [ PUBLIC ] ROLLBACK SEGMENT name
    [ TABLESPACE tablespace ]
    STORAGE ( [ INITAL n ] [ NEXT n ]
              [ MINEXTENTS n ] [ MAXEXTENTS { n | NULL } ]
              [ PCTINCREASE n ] ) ]

Сегмент отката не будет использоваться,  пока не будет захвачен при старте
экземпляра ORACLE;  следовательно, только что созданный сегмент отката не будет
использоваться,  пока экземпляр не будет остановлен и стартован заново и  не
захватит  сегмент  как PUBLIC или через именование в файле INIT.ORA.




                                   -- 168 --



Сегменты отката  можно создавать в любом табличном пространстве, но предпочти-
тельнее делать это  в  пространствах,  постоянно остающихся в состоянии
online,  так как табличное пространство, содержащее активный сегмент отката  не
может  быть  выведено  в offline.

        Общие и личные сегменты отката

    Общие сегменты отката из пула запрашиваются любым экземпляром в дополнение
к личным, в то время как личные связаны только с одним конкретным  экземпляром
ORACLE.  По умолчанию сегмент отката является личным (исключая сегмент SYSTEM)
и  может использоваться только одним экземпляром, поименовавшим его в параметре
ROLLBACK_ SEGMENTS.

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

Чтобы создать личный сегмент отката, просто опустите ключевое слово PUBLIC при
его создании. Личные сегменты не могут использоваться, пока не поименуются в
параметре ROLLBACK_SEGMENTS для определенного экземпляра.

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

Для отслеживания,  сколько памяти используют сегменты отката, запросите обзоры
словаря данных DBA_ROLLBACK_SEGS и DBA_SEGMENTS.  Кроме того,  можно
воспользоваться командой MONITOR ROLLBACK ути- литы SQL*DBA.

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

Увеличить или уменьшить параметры памяти сегмента отката можно с помощью SQL -
оператора:
    ALTER [ PUBLIC ] ROLLBACK SEGMENT name
        STORAGE ( [ NEXT n ]
        [ MAXEXTENTS { n | NULL} ]
        [ PCTINCREASE n ] )

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

        Отмена сегментов отката

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

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

Для удаления сегмента выполните следующее:





                                   -- 169 --



    1. Удостоверьтесь, что база открыта.
    2. Присоединитесь,  используя имя пользователя с привилегиями DBA
    3. Проверьте, что отменяемый сегмент не используется в настоящий момент,
       запросив в словаре данных обзор DBA_ROLLBACK_SEGS.
    4. Введите SQL - оператор:

          DROP [ PUBLIC ] ROLLBACK SEGMENT name

Если сегмент  отката требуется для рестарта системы, создайте другой.

        Сопровождение табличных пространств

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

Соответствующие этим  функциям SQL - операторы (CREATE TABLESPACE, ALTER
TABLESPACE, DROP TABLESPACE) требуют от пользователя привилегий DBA.  Некоторые
из опций этих операторов  могут выполняться только над пространствами,
выведенными в offline.

        Создание нового табличного пространства

    Для создания  большего  места  для данных пользователей можно поступить
двумя способами:
* добавить новое табличное пространство с  помощью  оператора CREATE TABLESPACE
* добавить новый файл в существующее табличное пространство с помощью оператора
  ALTER TABLESPACE

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

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

    CREATE TABLESPACE tablespace
    DATAFILE filespec [, filespec ] ...
    [ DEFAULT STORAGE (
       [ INITAL n ] [ NEXT n ]
       [ MINEXTENTS n ] [ MAXEXTENTS { n | NULL } ]
       [ PCTINCREASE n ] ] )
    [ ONLINE | OFFLINE ]




                                   -- 170 --



Для табличного пространства должен быть указан как  минимум - один файл
операционной системы.  Спецификация filespec зависит от конкретной операционной
системы.
По умолчанию табличное пространство после создания становится online.

замечание: Если  Вы  создаете  первое  после SYSTEM табличное пространство и
имеете только один сегмент отката, необходимо также  создать дополнительный
сегмент отката.  Второй сегмент отката необходимо создать ДО создания второго
табличного пространства.

        Увеличение табличного пространства (добавление файла)

    Для увеличения размера табличного пространства к нему необходимо добавить
новый файл.  Это будет не первый файл пространства, так как первый был указан в
команде CREATE TABLESPACE. Для добавления нового файла необходимо выполнить
следующие операции:
    1. База должна быть открытой;  табличное пространство  может быть как в
       online, так и в offline.
    2. Запустить SQL*DBA и присоединиться к базе как DBA.
    3. Выполнить команду следующего вида:

    ALTER TABLESPACE tablespace
    ADD DATAFILE filespec [, filespec] ...

Синтаксис filespec системозависим;  за деталями обратитесь  к "Руководству
пользователя по инсталяции". Если Вы указали имя существующего файла базы -
результат непредсказуем.

          Мониторинг использования памяти в табличном пространстве

    Несколько таблиц словаря данных  позволяют  Вам  отслеживать, сколько
памяти распределено, используется, или не используется. В частности, вы найдете
полезной работу со следующими обзорами:
    * DBA_SEGMENTS
    * DBA_EXTENTS
    * DBA_FREE_SPACE

          Назначение квот пользователя в табличном пространстве

Давая пользователю привилегию RESOURCE в табличном пространстве, Вы можете
заодно указать предельное количество байтов, которое он может задействовать в
этом пространстве. Например:

    GRANT RESOURCE (1300) ON TSPACE_TWO TO NANCY

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

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

Одной из характеристик табличного пространства являются параметры и ограничения
памяти для создаваемых в нем таблиц и  индексов. Используя опции памяти команды
CREATE TABLESPACE,  Вы можете установить эти значения в момент создания
пространства.  Описание таких   параметров   памяти,   как  INITAL,  NEXT  и
PCTINCREASE содержится в Главе 4 этого документа.


                                   -- 171 --



          Изменение умалчиваемых параметров памяти

Для этого  используется следующий оператор (обратите внимание на ключевые слова
DEFAULT STORAGE):

    ALTER TABLESPACE tablespace
    DEFAULT STORAGE (
    [ INITIAL bytes ] [ NEXT bytes ]
        [ MINEXTENTS int ] [ MAXEXTENT int ]
        [ PCTINCREASE pct ] )

  Переименование файлов табличного пространства

Для перераспределения  файлов по устройствам или изменения их размеров Вам
может потребоваться переименовать файлы.  Для  этого используется следующий SQL
- оператор:
    ALTER TABLESPACE tablespace
    RENAME DATAFILE text [, text ] ... TO text [, text ] ...

          Перевод табличного пространства в offline

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

Для перевода пространства в offline выполните следующие шаги:
    1. Убедитесь, что база открыта.
    2. Присоединитесь к базе  с  использованием  ключевого  слова INTERNAL.
    3. Проверьте, что в этом пространстве нет активных  сегментов отката,
       запросив обзор словаря данных DBA_ROLLBACK_SEGS. Если ак- тивные
       сегменты есть, Вы не сможете перевести в offline табличное пространство.
    4. Выполните команду следующего вида:

    ALTER TABLESPACE tablespace
    OFFLINE [ NORMAL | IMMEDIATE ]

    Используйте параметр NORMAL, чтобы дать пользователям возможность нормально
завершить свою работу и IMMEDIATE -  чтобы  перевести пространство в offline в
любом случае.

    Табличное пространство  будет  оставаться в offline (хотя экземпляры будут
останавливаться и  стартовать)  пока  вы  явно  не переведете его в online.

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

          Перевод табличного пространства в online

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



                                   -- 172 --



    1. Проверьте, что база монтирована, но закрыта
    2. Присоединитесь, используя ключевое слово INTERNAL
    3. Введите SQL - оператор:

    ALTER TABLESPACE tablespace ONLINE

          Отмена табличных пространств

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

    DROP TABLESPACE tablespace [ INCLUDING CONTENTS ]

Ключевые слова INCLUDING CONTENTS позволяют  отменить  пространство невзирая на
наличие в нем данных.

        Управление памятью для таблиц и кластеров

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

Параметры памяти устанавливаются в следующих SQL - операторах:
    * CREATE TABLE или CREATE CLUSTER
    * ALTER TABLE или ALTER CLUSTER
    * CREATE TABLESPACE (для установки умалчиваемых  значений для пространства,
      содержащего таблицу или кластер)

Любой параметр, указанный в операторе CREATE TABLE перекрывает соответствующий
параметр оператора  CREATE  TABLESPACE.  Таким образом, таблица может
"унаследовать" параметры памяти табличного пространства, если при создании эти
параметры  не  указывались  в операторе CREATE TABLE.

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

           Расположение таблиц в табличных пространствах

Вы можете создать таблицу в любом пространстве,  если  имеете привилегию
RESOURCE.  Это  указывается в опции TABLESPACE команды CREATE TABLE.  Если же
табличное пространство не специфицировано, таблица создается  в  пространстве,
назначаемом  в команде ALTER USER или в пространстве SYSTEM, если ничего
другого не указано.

Используя табличные пространства,  DBA может распределять память и  запросы на
ввод/вывод по различным устройствам.  При этом он пользуется:
    * назначением пользователям умалчиваемых табличных пространств
    * передачей привилегий RESOURCE для табличных пространств
    * назначением пользователям квот памяти в  пространствах, где они имеют
      привилегию RESOURCE.

          Установка параметров памяти для таблиц


                                   -- 173 --



Некоторые параметры памяти могут задаваться как в операторе CREATE TABLE, так и
в CREATE TABLESPACE. Эти параметры следующие (подробно он обсуждаются в Гл.4):
    INITIAL
    NEXT
    MAXEXTENTS
    MINEXTENTS
    PCTINCREASE

Следующие параметры  уникальны  для операторов CREATE TABLE и CREATE CLUSTER:
    PCTFREE
    PCTUSED    (подробно описываются в Главе 5).

          Вычисление памяти для таблицы

    Чтобы оценить память, необходимую отдельной, некластеризованной таблице,
воспользуйтесь формулой, показанной ниже. В ней используются следующие
соглашения:
    * x - число строк в таблице
    * y - количество столбцов
    * len - средняя размер столбца
    * Блок требует дополнительно 90 байтов
    * Строка  требует  дополнительно 5 байтов (информация о справочнике строк)
    * Столбцу необходим дополнительно 1 байт

    В результате получается количество блоков для таблицы:
                   x rows * (5 bytes + y cols * (1 byte + len))
      # blocks =  ----------------------------------------------
                  (blocksize - 90 bytes) * (1 - PCTFREE/100)
или то же без обозначений:
                          x * (5 + y * (1+len))
      # blocks =  ----------------------------------------------
                  (blocksize - 90) * (1 - PCTFREE/100)

Чтобы вычислить   размер   в  байтах, умножьте  получившийся результат на
размер блока (blksize) в байтах.  Общее  количество байтов можно использовать в
параметре памяти INITIAL. Меньшее количество памяти потребуется,  если у Вас в
таблице большое  количество пустых значений (null) в конце строки,  и большее -
если у Вас большое количество длинных строк или столбцов.

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

        Мониторинг реально используемой памяти

Чтобы посмотреть,  как используется память строками  таблицы, можно выдать
запрос, похожий на следующий:
    SELECT COUNT(*) FROM table
    GROUP BY SUBSTR (ROWID,6,14)

Запрос даст Вам количество строк на блок, который можно умножить на  среднюю
длину строки и получить среднюю суммарный объем памяти для блока.

        Увеличение параметров памяти для таблиц

Даже если таблица создана, ее параметры памяти могут быть изменены с  помощью
команд ALTER TABLE или ALTER TABLESPACE.  Могут быть изменены все параметры за
исключением INITIAL и MINEXTENTS.  Никакие структуры,  уже распределенные


                                   -- 174 --



таблице, не могут быть изменены; другими словами,  существующие объекты не
изменят своих размеров. Если изменены значения PCTFREE и PCTUSED,  то к
существующим блокам  будет применяться новый алгоритм использования памяти.

            Управление индексной памятью

Индексы для таблиц создаются и и сохраняются в памяти  независимо от  таблиц.
Индекс  может  быть  создан или отменен в любое время после создания таблицы.
Формат блоков индекса описан в Гл.5.

          Размещение индексов в табличных пространствах

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

    Для гарантирования доступа к таблице в состоянии online должны быть
пространства, содержащие ее индексы и данные.

          Вычисление памяти для индексов

Вы можете оценить размер памяти,  которая потребуется индексу после того, как
данные будут загружены в таблицу. Возьмем следующие переменные:
    * x - число строк в таблице
    * z - число индексируемых столбцов
    * len - средняя длина индексируемых столбцов
    * неуникальный индекс  требует дополнительно  11  байтов  на строку а
      уникальный -10 байтов (6 на ROWID, 3 - на заголовок строки и 2 - на
      справочник строк)

Чтобы найти количество блоков,  необходимых для блоков листьев, используют
следующую формулу:
                     x rows * (11 bytes + z + len)
    #blocks = ----------------------------------------------
                (blocksize - 90) * (1 - PCTFREE/100)

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

Для того, чтобы вычислить  количество байтов, необходимых всему индексу
(включая блоки  ветвей), умножьте  предыдущий результат на 1.1. Это базируется
на предположении, что для блоков ветвей требуется около 10% дополнительных
блоков.

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

При создании  индексов  обычно пользуются умалчиваемыми параметрами памяти
PCTxxx.  Очень хорошо,  если данные индекса плотно упакованы,  тогда  при
использовании индекса потребуется прочесть меньшее количество блоков. Заметьте,
что параметр PCTFREE используется только при создании индекса и не используется
при добавлении новых значений к существующему индексу.

Для уникального индекса всегда надо пользоваться и умалчиваемым значением
PCTFREE.

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

                                   -- 175 --



Память, распределяемая для индекса, может быть изменена с помощью SQL -
оператора ALTER INDEX.  Изменения в параметрах памяти будут влиять только на
будущие экстенты.

        Ограничения для индексов

В единственный  индекс  может  быть  включено до 16 столбцов.
Полная длина индексного ключа не может превышать
          (block_size/2 -x)
где
 x - суммарные дополнительные затраты, зависящие от операционной системы,
     лежащие в диапазоне от 30 до 60 байтов.

            Управление кластерами

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

        Создание кластеров

Использование кластеров особо рекомендуется, если две или более таблицы часто
сцепляются во время запросов.  Вопросы, связанные с кластеризацией,
рассматриваются в Главе 5.  Размеры памяти, необходимой кластеру, зависят от
природы данных и выбранного ключа кластера.

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

          Однотабличные кластеры

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

          Выбор параметра SIZE для кластера

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

При создании кластера опция SIZE оператора CREATE CLUSTER определяет средние
суммарные требования памяти на один ключ кластера. Эта опция не лимитирует
количества или размера  элементов для ключа кластера,  но  помогает  ORACLE
RDBMS примерно подсчитать, сколько ключей кластера (и строк) может быть
запомнено  в  одном блоке системы ORACLE.

            Опция SIZE:




                                   -- 176 --



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

          Мониторинг памяти, используемой кластерами

Для отслеживания памяти,  используемой кластерами,  запросите следующие обзоры
словаря данных: DBA_CLUSTERS, DBA_USER_SEGMENTS, DBA_EXTENTS, или
пользовательские версии этих обзоров (USER).

        Загрузка кластеров

После того,  как  кластер создан,  необходимо добавить к нему таблицы с помощью
оператора CREATE TABLE. Вариации этого оператора позволяют добавлять как новые,
так и старые таблицы:

 Для кластеризации новой таблицы используется следующий оператор:

    CREATE TABLE new_table
    (col1 datatype, col2 datatype, ... ,coln datatype)
    CLUSTER cluster_name (table_column)

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

    CREATE TABLE new_table_name
    CLUSTER cluster_name (table_column)
    AS SELECT * FROM existing_table

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

Далее, после проверки  загруженных  данных  на  правильность, можно отменить
некластеризованную старую таблицу:

    DROP TABLE existing_table

Затем, если  необходимо,  переименуйте  созданную  в кластере таблицу:

    RENAME new_table_name TO existing_table_name

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

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

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

    * Массовая  загрузка  таблиц  в  кластер может стать причиной большой
нагрузки на систему

          Отмена кластеров


                                   -- 177 --



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

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

            Управление временными сегментами

Хотя пользователи никогда непосредственно не видят, не создают и  не
используют временных сегментов,  ORACLE RDBMS постоянно в них нуждается для
выполнения SQL - операторов.  В Главе 4 перечислены SQL  - операторы,  которым
для выполнения нужны временные сегменты. ORACLE RDBMS создает временные
сегменты в  целях любого пользователя, независимо от его привилегий.  Этот
раздел описывает действия, которые Вы можете предпринять для управления
временными сегментами.

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

Когда создается или стартует база данных,  временные сегменты не существуют;
они создаются динамически в процессе работы. Некоторое  количество  временных
сегментов создается в течение сеанса пользователя; каждый сегмент отменяется,
коль скоро необходимость в нем отпадает.  Чтобы узнать, какое количество
временных существует и сколько памяти они используют, запросите следующие
обзоры словаря данных:  USER_SEGMENTS, ALL_SEGMENTS, DBA_SEGMENTS при условии,
что значе- ние столбца SEGMENT_TYPE равно TEMPORARY.

          Отслеживание расположения временных сегментов.

Управлять расположением временных сегментов,  создаваемых для определенного
пользователя, можно с помощью SQL - оператора ALTER USER. По  умолчанию
временные  сегменты  создаются  в  табличном пространстве SYSTEM.  Для
изменения  пространства  для временных сегментов конкретного пользователя
используется команда:

    ALTER USER username TEMPORARY TABLESPACE tablespace

Временные сегменты распределяются независимо от квоты пользователя в данном
пространстве.

          Отслеживание размеров временных сегментов

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

     ГЛАВА 17           БЕЗОПАСНОСТЬ:   ДОСТУП К БАЗЕ ДАННЫХ

В этой главе обсуждаются возможности DBA по контролю за  доступом к базе
данных. В ней описываются:
* разница  между  тремя  типами  базовых привилегий (CONNECT, RESOURCE, DBA)
* предоставление пользователям базы привилегий с помощью опе- ратора GRANT
* отмена привилегий
* изменение таких атрибутов пользователей,  как пароли, квоты памяти, умолчания
  для табличных пространств,  использование SQL - оператора ALTER USER
* использование  средств  контроля для отслеживания доступа к базе данных



                                   -- 178 --



В этой главе описывается управление доступом к базе  в целом.  Обсуждение
вопросов контроля и проверки доступа к отдельным объектам базы приводится в
Главе 18.

          Регистрация пользователей

Наиболее общая  обязанность DBA - предоставление пользователям вычислительной
системы возможности работать с базой  ORACLE.  Для тог, чтобы работать  с
данными  ORACLE,  Вы прежде всего должны иметь доступ к компьютеру и его
операционной системе.  Хотя  возможности доступа варьируются от системы к
системе,  обычно требуется некий тип идентификатора пользователя и пароля. Это
назначение не зависит  от  системы  ORACLE  и  не обеспечивает доступа к
программам и данным ORACLE.

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

Чтобы пользователь  получил  доступ к базе ORACLE,  он должен иметь
действительные для конкретной базы имя пользователя  и  пароль. О  каждом
пользователе в словаре данных хранится следующая информация:
* имеет  ли  пользователь  такие  привилегии  как:   CONNECT, RESOURCE или DBA

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

В любое время DBA может  создать  новые  имена  пользователей системы ORACLE,
используя оператор GRANT с опцией CONNECT. Кроме того, он может предоставить
одну или несколько базовых привилегий (нескольким пользователям), используя
команду вида:

    GRANT { CONNECT | RESOURCE | DBA } TO username1 [, username2]
    IDENTIFIED BY password1 [, password2 ]

Например:

    GRANT CONNECT TO FRIEDA IDENTIFIED BY SANTAFE

За единственным исключением,  имена пользователей и пароли (в примере - FRIEDA
и SANTAFE,  соответственно) системы ORACLE никак не связаны с операционной
системой. Например для FRIEDA имя пользователя в  операционной  системе может
быть FLAWRENCE и пароль - COAL. Однако DBA может ассоциировать имя пользователя
оRACLE  с идентификатором пользователя  операционной  системы для упрощения
процесса входа в систему (См. ниже раздел "Автоматическая регистрация").

Фраза IDENTIFIED BY необходима, если будет предоставлена привилегия CONNECT.
Если имя пользователя уже существует, с помощью фразы IDENTIFIED BY можно
предоставить дополнительные привилегии, например:

    GRANT RESOURCE TO FRIEDA

В этом случае пользователь получает привилегию RESOURCE,  которой ранее не
имел.





                                   -- 179 --



ORACLE RDBMS дает всем пользователям базы одинаковый  приоритет (в зависимости
от ресурсов системы).  Однако все пользователи разбиваются на три класса в
соответствии  с  предоставленными  им привилегиями. Эти привилегии
рассматриваются в следующих разделах.

          Пользователи с привилегией CONNECT

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

Имя пользователя и пароль запоминаются в словаре данных.  Пароли хранятся в
зашифрованном виде и никто, даже DBA, не может их запросить. Каждый раз при
регистрации пользователя имя  пользователя и пароль сверяются на соответствие с
имеющимися в словаре.

Пользователю достаточно иметь только привилегию CONNECT. С ее помощью он может:
    * связываться ("connect to") с базой данных ORACLE
    * запрашивать  (просматривать)  данные  других  пользователей (команда
      SELECT для таблиц и обзоров),  если к этим объектам дана привилегия
      PUBLIC для доступа типа SELECT.
    * выполнять операции манипулирования с данными (INSERT, UPDATE, DELETE)
      таблиц других пользователей, если соответствующий доступ разрешен.
    * создавать обзоры, синонимы и связи с другими базами
    * выполнять экспорт пользователя или таблиц пользователя.

однако он не может создавать новые таблицы,  кластеры, последовательности и
индексы.

    Если Вы  предоставили уже существовавшему пользователю привилегию CONNECT,
прошлые объекты останутся существовать и пользователь их "унаследует".

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

          Пользователи с привилегией RESOURSE

Если пользователь имеет обе привилегии  RESOURCE  и  CONNECT, значит он может
пользоваться всеми возможностями, предоставляемыми CONNECT и дополнительно -
создавать  объекты  базы  (таблицы, кластеры, индексы  и  последовательности).
Кроме того,  он может включать или выключать регистрацию обращения к  его
объектам,  а также давать и отменять привилегии на свои объекты другим
пользователям.

Привилегия RESOURCE может быть предоставлена следующими  способами:

    * неограниченный доступ (к любому табличному пространству без квоты):
    GRANT RESOURCE TO STEPHANIE
    * доступ только к указанным пространствам, но без квоты:
    GRANT RESOURCE ON TABLESPACE RESEARCH TO DEBORAH
    * доступ к указанным пространствам с квотами памяти:

    GRANT RESOURCE ON TABLESPACE RESEARCH (25000) TO ROBIN



                                   -- 180 --



    Неограниченную привилегию  RESOURCE администратор должен предоставлять
только тем пользователям, которых он не собирается ограничивать в  выборе
табличного  пространства  или квоте памяти.  Обычно привилегии пользователям
предоставляются двумя SQL -  операторами: CONNECT - для предоставления права
доступа и RESOURCE для доступа к определенным табличным пространствам.  Это
дает Вам возможность осуществлять  жесткий контроль над использованием памяти
пользователями.

        Пользователи с привилегией DBA

    Если у  пользователя  есть привилегия DBA,  он обладает всеми привилегиями,
предоставляемыми CONNECT и  RESOURCE. Дополнительно к ним он может:

    * обращаться к данным любого пользователя и выполнять над ними SQL -
      операторы (кроме  объектов,  принадлежащих  пользователю SYS)

    * предоставлять и отменять (GRANT/REVOKE) системные  привилегии и
      привилегии относительно пользовательских объектов

    * создавать синонимы типа PUBLIC (которые доступны всем пользователям
      системы ORACLE)

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

Система ORACLE может иметь большое количество  DBA,  так  как администратором
может  быть любой пользователь с привилегией DBA.  Однако из-за широкого круга
возможностей,  которыми обладает DBA, круг таких пользователей должен быть
ограничен.

    Любая система ORACLE  инсталируется  с  двумя  пользователями DBA: SYS и
SYSTEM.  (Описание этих пользователей см.  в Главе 2).  Так как эти
пользователи необходимы для функционирования системы, права их доступа к
системе ORACLE не должны меняться (за исключением начальных паролей).

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

    Пользователи DBA можно разделить на два класса.  При работе с базой они
абсолютно одинаковы,  но при работе с утилитой SQL*DBA для выполнения некоторых
команд необходимы еще и системные привилегии. Подробнее  о привилегированных
командах SQL*DBA можно прочитать в Главе 2 и приложении В этого документа, а
также в "Руководстве пользователя   по   инсталяции"  для  Вашей  операционной
системы.

          Назначение пользователям умалчиваемых табличных пространств

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



                                   -- 181 --



    ALTER USER user
    [ IDENTIFIED BY username ]
    [ DEFAULT TABLESPACE tablespace ]
    [ TEMPORARY TABLESPACE tablespace ]

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

    ALTER USER LEE
    DEFAULT TABLESPACE TS10
    TEMPORARY TABLESPACE TEMP3

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

    GRANT RESOURCE ON TS10 TO LEE.

    Теперь, если  пользователь  LEE  создаст таблицу без указания табличного
пространства  (опция  TABLESPACE),  она  создастся в пространстве TS10. Все
временные сегменты, относящиеся к LEE, будут располагаться в табличном
пространстве TEMP3.

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

        Установка пользователям квот в табличных пространствах

    Привилегия RESOURCE в табличном пространстве может быть  предоставлена
безусловно, то есть пользователь будет иметь неограниченные возможности по
использованию памяти (даже больше  желаемого). Задать это можно следующим
образом:

    GRANT RESOURCE ON TABLESPACE tablespace TO username

Однако Вы можете ограничить лимит памяти пользователя, задав:

    GRANT RESOURCE (n) ON tablespace TO username

    Где n  -  предельное  число байтов,  доступных пользователю в табличном
пространстве tablespace. Вы должны гарантировать, что n - реальное  ограничение
(например  -  превышающее,  как минимум, умалчиваемое значение  параметра
INITAL  для  этого   табличного пространства).

В следующем  примере  показано,  что квота пользователя LEE в табличном
пространстве TS10 ограничена 100000 байтов:

    GRANT RESOURCE (100000) ON TS10 TO LEE

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

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

        Изменение квот табличных пространств

                                   -- 182 --



Для изменения  квоты  воспользуйтесь  той  же  командой GRANT RESOURCE, но
укажите в ней другое количество байтов.  Если  новое значение квоты меньше
старого и он уже превысил новое,  ошибка не возникает. Однако пользователь не
сможет  распределить  дополни- тельную память,  пока  используемая  им  не
опустится ниже нового значения квоты.

        Отмена доступа к табличному пространству

Для полной отмены доступа к табличному пространству используется оператор вида:

    REVOKE RESOURCE ON tablespace FROM username

Заметьте, что  неограниченная привилегия RESOURCE для системы перекрывает все
остальные.  Поэтому пользователь может  создавать объекты в  любом  табличном
пространстве без ограничения памяти, пока привилегия не будет отменена:

    REVOKE RESOURCE FROM username

          Автоматическая регистрация

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

    GRANT CONNECT TO OPS$sysid IDENTIFIED BY password

Например, для регистрации пользователя, чей системный учетный номер OPUS,
введите:

    GRANT CONNECT, RESOURCE TO OPS$OPUS IDENTIFIED BY PENRUINS

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

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

    Впоследствии, если пользователь зарегистрировался в  операционной системе
как OPUS, ему не нужно указывать при входе в ORACLE ни имени пользователя,  ни
пароля.  Например, после ввода команды SQLPLUS он  увидит запрос ORACLE на имя
пользователя и пароль. Он может в ответ нажать  и ORACLE будет  искать
в  таблицах словаря пользователя с именем, какое было указано при регистрации в
операционной системе (OPUS), найдет его и позволит войти в систему как
OPS$OPUS. Альтернативно, пользователь может вызвать SQL* Plus следующим
образом:

    SQLPLUS /

    Пользователь могут при желании  связаться  с  ORACLE,  указав полное имя
пользователя и пароль.  Например,  пользователь, заре- гистрировавшийся в
операционной системе как  BILL,  может  выдать команду:

    CONNECT OPS$OPUS/PENGUINS


                                   -- 183 --



В этом случае, даже  если  системное имя пользователя BILL, ORACLE разрешит
регистрацию как OPS$OPUS, поскольку указан правильный пароль.  Следовательно,
для защиты важно, чтобы каждый пользователь, регистрирующийся автоматически,
имел секретный пароль.  На пароль  в системе ORACLE никак не повлияет,  если
пользователь сменит свой системный пароль.

    Так как полное имя пользователя ORACLE - "OPS$OPUS", все объекты, им
созданные (таблицы, обзоры, индексы и т.д.), будут начинаться с этого имени.  На

    SELECT * FROM OPS$OPUS.FISH

          Перечень действий по регистрации пользователей

Ниже приводится перечень действий по регистрации нового поль- зователя системы
ORACLE:

1. Решите,  надо ли ассоциировать  имя  пользователя  системы ORACLE с
   идентификатором пользователя операционной системы.
   Если Вы  хотите  предоставить пользователю некоторые дополнительные
   удобства, дайте ему имя пользователя, начинающееся с OPS$.
2. Назначьте имя пользователя и пароль, указав OPS$, если надо

        GRANT CONNECT TO username IDENTIFIED BY password

Если пользователь не будет создавать новых  таблиц,  а  будет работать только с
существующими, тогда Ваша работа закончена (См.  Шаг 9).

3. Если пользователь будет создавать таблицы,  определите,  к какому
   табличному пространству он будет иметь доступ.
4. Для каждого табличного пространства решите, будет ли пользователь
   использовать неограниченную память или  надо  определить квоту.
5. Предоставьте пользователю привилегию RESOURCE  для каждого табличного
   пространства, указав при необходимости квоту в байтах.

        GRANT RESOURCE (n) ON TABLESPACE tablespace TO username

(Вам нет  нужды  явно  предоставлять  привилегию RESOURCE для всех табличных
 пространств с доступом PUBLIC,  но Вы можете  явно указать квоту в таком
 пространстве).

6. Если  Вы  хотите,  чтобы  пользователь  имел  умалчиваемое пространство
   для создания объектов,  отличное от SYSTEM, выберите его.

7. Если  Вы  хотите,  чтобы  пользователь  имел  умалчиваемое пространство
   для создания временных таблиц,  отличное от  SYSTEM, выберите его.
8. Укажите эти два умалчиваемых табличных пространства с помощью оператора
   ALTER USER.
9. Предоставьте пользователю следующую информацию:
    * имя пользователя и пароль в системе ORACLE
    * к каким  табличным  пространствам он имеет доступ и какова квота, если
      она есть
    * каким образом регистрироваться в ORACLE
    * как упомянутую информацию посмотреть в словаре данных

            Смена паролей




                                   -- 184 --



Пароль для пользователя системы ORACLE может быть изменен самим пользователем
или DBA.  И пользователь и DBA могут выдать команду GRANT CONNECT с новым
паролем, например:

    GRANT CONNECT TO username IDENTIFIED BY newpassword

    DBA может воспользоваться другой командой:

    ALTER USER username IDENTIFIED BY newpassword

Все пароли хранятся в базе в зашифрованном виде и никто (даже DBA) не может
увидеть действительный пароль.

            Удаление пользователей

Для того, чтобы отобрать у пользователя какую-либо привилегию базы,
воспользуйтесь командой REVOKE:

    REVOKE { CONNECT | RESOURCE | DBA } FROM username
например:
    REVOKE CONNECT FROM EDISON

Пользовательские привилегии  в любой момент времени может изменить только DBA,
используя SQL - операторы GRANT  или  REVOKE.  Пользовательские привилегии
могут быть увеличены или уменьшены с помощью выборочной выдачи или отмены.

Если у пользователя отобрана привилегия CONNECT, он не сможет больше войти в
систему ORACLE, пока вновь не получит эту привилегию.

Хотя удаленный пользователь и отсутствует в  словаре  данных, принадлежащие ему
таблицы продолжают существовать.  DBA может сам обращаться к зтим таблицам и
предоставлять право делать это  другим пользователям.  Для выполнения некоторых
операций, например - отмены синонимов,  DBA должен соединиться с базой  как
удаленный пользователь. Для  этого  временно  пользователю  предоставляется
привилегия CONNECT,  которая отменяется (REVOKE) после выполнения необходимых
действий.

    Если ранее  существовавший  пользователь регистрируется администратором
заново,  он "наследует" все существующие объекты, ранее созданные предыдущим пол

            Регистрационный контроль доступа к базе

 Регистрационный контроль в ORACLE RDBMS - это,  главным образом,  средство для
отслеживания работы пользователей с базой.  Он не дублирует данные,  которые
меняются, добавляются или удаляются.  DBA может включать и выключать средство
регистрации доступа.  Если оно включена, DBA может:
    * отслеживать успешные и/или неудачные попытки присоединения/
      отсоединения к/от базы
    * отслеживать предоставление (GRANT) и отмену (REVOKE) привилегий
    * включать/выключать  запись в таблицу регистрационного контроля
    * устанавливать умалчиваемые опции регистрационного контроля для таблиц
      базы

К примеру, DBA может регистрировать:
    * неудачные попытки обращения к базе
    * любую попытку доступа к секретным данным (таблицам)
    * любую попытку исполнения операторов GRANT/REVOKE


                                   -- 185 --



          Включение регистрационного контроля

Регистрационный контроль по умолчанию отключен.  Он легко может быть включен
при старте экземпляра ORACLE. Для этого надо установить  в  TRUE параметр
AUDIT_TRAIL файла INIT.ORA (этот параметр поставляется в дистрибутивной системе
в  состоянии  FALSE).  Затем  стартовать  экземпляр  с использованием
отредактированного файла INIT.ORA,  при этом включится регистрационный контроль
доступа.

Поскольку контроль доступа автоматический, пользователи и DBA сами должны
определять действия, которые они хотят контролировать с помощью SQL - оператора
AUDIT.

Администратор базы может включать общесистемные умолчания или опции,
устанавливая:

* умалчиваемые  опции  регистрационного контроля для объектов базы (например -
  регистрация все успешных попыток изменить описание (ALTER) любой таблицы
  базы)
* общесистемные  опции  контроля базы (например - регистрация всех неудачных
  попыток доступа к базе)

Пользователи - владельцы таблиц,  обзоров или синонимов  сами могут указать,
какие действия над их объектами необходимо регист- рировать (См. Главу 18).

        Установка общесистемных опций регистрации доступа

DBA может  устанавливать общесистемные опции для отслеживания различных
действий над базой.  Ни одна общесистемная операция  не будет  регистрироваться
до выполнения системного оператора AUDIT.

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

    AUDIT { [ CONNECT ] [ DBA ] [ NOT EXISTS ] [ RESOURCE ] | ALL }
            [ WHENEVER [ NOT ] SUCCESSFUL ]
где:
    CONNECT    Регистрация соединения и разъединения с базой данных ORACLE.
    DBA        Регистрация применения следующих операторов: GRANT, REVOKE,
               AUDIT, NOAUDIT, CREATE  и  DROP PUBLIC SYNONYM или DBLINK.

    NOT EXIST  Регистрация всех обращений к объектам базы, которые
               заканчиваются ошибкой "...not exist"(не существует) Сюда не
               включаются ошибки нарушения защиты, даже если они влекут за
               собой ошибку 942 (table or view does not exist - таблица или
               обзор не существуют) Заметьте, что фраза WHENEVER [NOT]
               SUCCSESSFUL не- обязательна.

    RESOURCE   Регистрация применения следующих SQL - операторов:  CREATE,
               ALTER или DROP TABLE, VIEW, SYNONYM, CLUSTER, SEQUENCE,
               TABLESPACE, ROLLBACK SEGMENT или INDEX.

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





                                   -- 186 --



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

    AUDIT CONNECT, DBA WHENEVER SUCCSESSFUL

          Просмотр общесистемных опций регистрации доступа

Чтобы посмотреть текущие значения опций общесистемной регистрации доступа,
запросите обзор словаря данных DBA_SYS_AUDIT_OPTS.  В результате получите одну
строку таблицы, например:

    SELECT * FROM DBA_SYS_AUDIT_OPTS

    C  D  N  R
    -  -  -  -
    F  S  -  -


          Просмотр результатов в журнале регистрации доступа

Результаты регистрации  записываются  в  единственную таблицу базы. На этой
таблице создаются  два  обзора:  DBA_AUDIT_TRAIL  и USER_AUDIT_TRAIL (второй -
часть первого; он обсуждается в следующей главе).

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

Два столбца  - ACTION и ACTION_NAME отображают соответственно код регистриру-
емого действия и его наименование, например - код 1 соответствует команде
CREATE TABLE.  Кроме этого, могут регистрироваться следующие операторы:
    INSERT
    SELECT
    CREATE CLUSTER
    ALTER CLUSTER
    UPDATE
    DELETE
    DROP CLUSTER

Многие столбцы обзора заполняются только определенными командами. Например  -
столбец NEW_NAME заполняется при выполнении команды RENAME,  в противном случае
он содержит NULL.  Из-за  того, что в  журнале регистрации доступа потенциально
содержится весьма разнообразная информация,  пользователи сочтут  удобным
создание обзоров, выбирающих  только  отдельные требуемые столбцы,  нежели
выборка по всем строкам журнала.

          Регистрация присоединения к базе

Если регистрация  доступа включается с помощью следующего SQL - оператора:

    AUDIT CONNECT WHENEVER NOT SUCCSESSFUL





                                   -- 187 --



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

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

        Регистрация использования ресурсов

Включается оператором регистрации системных ресурсов:

    AUDIT RESOURCE WHENEVER NOT SUCCSESSFUL

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

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

        Регистрация действий DBA

Если регистрация  доступа включается с помощью следующего SQL - оператора:

    AUDIT DBA

то все операторы (успешные или нет), требующие привилегий DBA будут отмечены в
журнале регистрации и могут быть запрошены через обзор DBA_AUDIT_DBA.  Этот
обзор  дает  выборку  из   информации DBA_AUDIT_TRAIL (которая  относится  к
попыткам выполнения SQL - операторов администратора). Пользователи могут
запросить подобный обзор, называемый USER_AUDIT_DBA.

        Регистрация попыток обращения к не существующим объектам

Если регистрация  доступа включается с помощью следующего SQL - оператора:

    AUDIT NOT EXISTS

то все операторы, относящиеся к объектам базы, которые не существуют, записы-
ваются в журнал регистрации доступа. Эти элементы могут быть просмотрены с
помощью запроса обзора DBA_AUDIT_EXISTS, который возвращает выборку информации
из DBA_AUDIT_TRAIL, относящейся к SQL - операторам с неправильными именами
объектов базы.

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

        Отключение общесистемной регистрации дочтупа

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



                                   -- 188 --



    NOAUDIT { [ CONNECT ] [ DBA ] [ NOT EXISTS ] [ RESOURCE ] | ALL }
            [ WHENEVER [NOT ] SUCCSESSFUL ]
Например оператор:
    NOAUDIT ALL WHENEVER NOT SUCCSESSFUL

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

        Специальный пользователь "PUBLIC"

Каждая система ORACLE автоматически регистрирует пользователя PUBLIC. Реально
этот пользователь представляет  собой  группу  из всех пользователей, имеющих
привилегию CONNECT. Члены этой группы могут запрашивать (SELECT ...  ) любые
таблицы словаря  данных  с префиксами USER и ALL, а также любые таблицы, для
которых пользователь выполнил следующую команду:

    GRANT SELECT ON tablename TO PUBLIC;

Любой пользователь может предоставить доступ PUBLIC к таблице или обзору,
которые  могут  заинтересовать многих пользователей.  Эти таблицы должны быть
либо его собственные, либо ему предоставлен этот объект с правом передавать
привилегии.

        Синонимы типа PUBLIC

Общие синонимы  (PUBLIC)  доступны всем пользователям системы ORACLE. Например,
выдав следующую команду:

    CREATE PUBLIC SYNONYM synname ON { table | view | synonym }

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

Чтобы увидеть, какие вообще синонимы существуют, введите:

    SELECT * FROM ALL_SYNONYMS;

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

Например, если SCOTT создал таблицу с именем DICTIONARY, в то время как  один
из  обзоров словаря также называется DICTIONARY.  Теперь, чтобы посмотреть
обзор словаря данных,  SCOTT должен набрать команду:

    SELECT * FROM SYS.DICTIONARY

     ГЛАВА 18               БЕЗОПАСНОСТЬ:  ОБЪЕКТЫ БАЗЫ ДАННЫХ

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



                                   -- 189 --



    Глава включает следующие разделы:
    * типы и уровни доступа к объектам базы
    * отслеживание доступа к объектам посредством регистрационного контроля
    * SQL - операторы для управления контролем доступа к объектам базы

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

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

            Доступ к данным таблиц

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

        Доступ ко всем данным в таблице

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

Возможно предоставление  различных типов доступа,  например - только по чтению
(SELECT) или по изменению (UPDATE и  DELETE). За детальным описанием
синтаксиса команды GRANT обратитесь к Приложению G.  Пользователь SCOTT может
применить  следующий  оператор для предоставления  пользователю  JENNIFER  трех
типов доступа к своей таблице EMP:

    GRANT SELECT, INDEX, UPDATE ON EMP TO JENNIFER

После выполнения этого оператора JENNIFER может  обращаться к таблице SCOTT.EMP
или  для  удобства создать для SCOTT.EMP собственный синоним.

Опция WITH GRANT OPTION оператора GRANT позволит Вам передать другому
пользователю  полномочия по дальнейшей передаче прав доступа другим
пользователям, как это делает владелец. Например:

    GRANT SELECT, INDEX, UPDATE ON EMP TO JENNIFER WITH GRANT OPTION

Этот оператор позволит JENNIFER передавать любую из трех привилегий (SELECT, IND

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

          Доступ к обзорам (или - к части данных таблицы)

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


                                   -- 190 --



    CREATE VIEW DEPT10 AS SELECT *
    FROM EMP WHERE DEPTNO = 10

Этот обзор  выбирает часть строк таблицы EMP,  в то время как следующий обзор
выбирает часть столбцов:

    CREATE VIEW SALES AS SELECT ENAME, EMPNO, MGR
    FROM EMP WHERE JOB = 'SALESMAN'

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

    GRANT SELECT, INSERT, UPDATE, ON DEPT10 TO DEPT10AA
    GRANT SELECT, UPDATE ON SALES TO SALESMGR

Привилегии доступа для таблиц и обзоров различны. Например  - невозможно
предоставить право INDEX для обзора. Для обзоров могут быть назначены следующие
привилегии:  SELECT,  INSERT,  UPDATE  и DELETE. Дополнительно  для обзоров
существуют некоторые ограничения по выполнению DML - операторов:

    * Невозможно  выполнить операции UPDATE,  INSERT и DELETE для обзоров,  чьи
      столбцы базируются на выражениях,  объединениях или наборе операций
      (UNION, INTERSECT, MINUS).

    * Владельцы обзоров (скажем, Пользователь-А - владелец обзора VIEWA таблицы
      TABLEB Пользователя-В) не могут передавать привилегии на  них  другим
      пользователям,  пока сами не получат право на соответствующую таблицу (в
      данном случае - на TABLEB).

Вы можете указать для обзоров,  как и для таблиц,  опцию WITH GRANT OPTION.
Если обзор включает в себя таблицу, Вам не принадлежащую, необходимо иметь
привилегию GRANT  OPTION  для  таблицы, чтобы передавать привилегии для обзора.

          Право доступа для изменения столбцов

Если Вы  хотите,  чтобы другой пользователь мог менять только часть столбцов в
таблице,  можно пойти двумя путями. Первый - использовать оператор GRANT для
определенных столбцов таблицы:

    GRANT SELECT, INDEX, UPDATE ON EMP (ENAME, MGR, HIREDATE)
    TO JENNIFER WITH GRANT OPTION

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

        Право доступа к последовательным номерам

Создатель последовательности может дать право другим  пользователям ее
использовать  с  помощью  оператора  GRANT  с опциями SELECT и ALTER. Как и в
других формах оператора GRANT, привилегии могут передаваться вместе с правом их
дальнейшей передачи.

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

Для отмены  привилегий  пользователя  относительно таблиц используется SQL -
оператор REVOKE.  С его помощью  можно  отменить либо конкретные  привилегии,
либо  все сразу (используя ключевое слово ALL):

                                   -- 191 --



    REVOKE INDEX ON EMP FROM JENNIFER

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

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

    REVOKE UPDATE ON EMP FROM MARGY
    GRANT UPDATE ON EMP (ENAME) TO MARGY

            Регистрация доступа к объектам базы

Если DBA задействовал общесистемную регистрацию, пользователи - владельцы
таблиц и  обзоров  могут  воспользоваться  оператором AUDIT для затребования
следующих возможностей регистрации:
 * регистрация успешных и/или неудачных попыток доступа к таблицам или обзорам
 * выборочная регистрация различных типов SQL - операторов
 * управление глубиной детализации регистрации в журнале  (сеанс или обращение)

Аналогично опциям  SQL  - операторов GRANT и REVOKE опции регистрации, которые
Вы можете задействовать для объектов  базы (таблиц и  обзоров), основываются
на  характере  операторов DML (SELECT, UPDATE,  INSERT или DELETE).  Например,
следующий SQL - оператор будет  отслеживать  успешные изменения описаний
таблицы EMP (таких как - добавление столбца):

    AUDIT ALTER ON EMP BY ACCESS WHENEVER SUCCSESSFUL

После изменения опций  регистрации  информация  о  выполнении запрошенных
операций  будет записываться в таблицу словаря данных SYS.AUDIT_TRAIL,
называемую также "журнал регистрации". Пользователи могут просматривать
информацию непосредственно путем запроса обзора USER_AUDIT_TRAIL, созданного на
этой таблице.

        Кто может пользоваться регистрацией доступа ?

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

Такие пользователи  могут устанавливать опции регистрации для своих собственных
объектов и объектов, к которым имеете доступ.

          Назначение опций регистрации для таблицы

Для назначения опций регистрации для таблицы используйте следующий SQL -
оператор:



                                   -- 192 --



    AUDIT { table_option [, table_option ] ... ALL }
    ON { table | DEFAULT }
    [ BY { SESSION | ACCESS } ]
    [ WHENEVER [NOT] SUCCSESSFUL ]

Где table_options принимает следующие значения:
    ALTER
    AUDIT
    COMMENT
    DELETE
    GRANT
    INDEX
    INSERT
    LOCK
    RENAME
    SELECT
    UPDATE

Если Вы не указали фразы WHENEVER,  регистрации подлежат  как успешные, так  и
аварийные попытки выполнения операции.  Другими словами эффект аналогичен тому,
что опции указаны вместе (успешный и безуспешный).

          В следующем разделе обсуждаются фразы BY SESSION и BY ACCESS.
Пример:
    AUDIT ALTER, SELECT, UPDATE ON SCOTT.EMP
    WHENEVER SUCCSESSFUL

          Регистрация по сеансам и по обращениям

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

по сеансам     В  этом случае за один сеанс будет занесена только одна запись
               регистрации.  (Сеанс ORACLE начинается с CONNECT и заканчивается
               - DISCONNECT). Предварительно у Вас были выбраны SQL- операторы,
               которые надо регистрировать;  в строки журнала регистрации
               заносится, сколько раз каждый  оператор выполнился успешно, а
               сколько - неудачно. Таким образом, каж- дая строка содержит
               итоговую  информацию  за  весь сеанс.

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

Заметьте, что для каждой операции DML,  такой как INSERT  или DELETE, запись
регистрации будет заноситься (обращение) или изменяться (сеанс) после заверше-
ния фазы синтаксического  разбора  (и перед выполнением).  Следовательно,  если
для оператора выполнена операция rollback, это никак не будет отмечено в
журнале регистрации.

        Регистрация обзоров





                                   -- 193 --



При создании обзора для его опций регистрации  доступа  устанавливаются
значения  объединения УМАЛЧИВАЕМЫХ опций регистрации для таблиц и опций всех
таблиц базы,  на которые ссылается обзор.  Если объединяются опции "по
обращению" и "по сеансам", принимается опция "по обращению".

          Умалчиваемая регистрация для таблиц

При создании  таблицы  ее опции регистрации устанавливаются в значения, которые
установлены для псевдо-таблицы с именем DEFAULT.  Значения опций  регистрации
для таблицы DEFAULT может только DBA, указывая имя DEFAULT вместо имени таблицы
оператора AUDIT:

    AUDIT ALTER, RENAME, GRANT ON DEFAULT

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

Чтобы посмотреть умалчиваемые установки,  выполните запрос обзора словаря
данных ALL_DEF_AUDIT_OPTS.  Этот обзор очень  походит на USER_TAB_AUDIT_OPTS,
описанный в следующем разделе.

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

        Просмотр текущих опций регистрации

Чтобы посмотреть опции регистрации,  действующие в  настоящее время, запросите
обзор словаря данных USER_TAB_AUDIT_OPTS.

    SELECT * FROM USER_TAB_AUDIT_OPTS

    TABLE_NAME O_TYPE ALT AUD COM DEL GRA IND INS LOC REN SEL UPD
    ---------- ------ --- --- --- --- --- --- --- --- --- --- ---
    EMP        TABLE  -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/-
    ACCOUNTS   TABLE  S/S -/- S/S S/S S/S -/- S/S A/- -/- S/S S/S
    PAYABLES   TABLE  A/S -/- -/- -/S -/- -/- A/S A/- -/- A/S A/S

Аналогичную информацию м. получить в  ALL_TAB_AUDIT_OPTS и DBA_TAB_AUDIT_OPTS;
эти обзоры имеют дополнительный столбец, указывающий владельца таблицы.

Заключительные одиннадцать столбцов представляют список действий, которые надо
регистрировать (См. выше "Назначение опций регистрации для таблицы").  Значения
этих столбцов показывают текущие опции  регистрации.  Первая  буква указывает
что надо делать, если действие,  приведенное в заголовке таблицы,  завершилось
успешно; вторая - в случае неудачи. Коды символов означают:
    -      Не делать ничего (не регистрировать)
    А      Записать один элемент регистрации на обращение
    S      Записать один элемент регистрации на сеанс

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


                                   -- 194 --



          Просмотр результатов  в журнале регистрации

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

В этом обзоре столбец SES_ACTIONS представляет из себя 11 - символьный  массив,
чьи элементы соответствуют одиннадцати опций для таблиц.  Значения, которые там
находятся, являются итогом работы с таблицей по сеансу пользователя. Действия
расшифровываются следующим образом:
    -   не встретилось действия, регистрируемого в сеансе
    S   действие выполнилось успешно
    F   действие выполнилось неудачно
    B   действие завершалось как успешно, так и неудачно (оно выполнялось
        несколько раз)

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

          Отмена регистрации таблиц

Если какие-либо действия над таблицами большее не  надо  регистрировать, их
можно отменить с помощью оператора NOAUDIT:

    NOAUDIT {table_option [, table_option ] ... | ALL }
    ON { table | DEFAULT }
    [ WHENEVER [ NOT ] SUCCSESSFUL ]
Например:

    NOAUDIT ALL ON emp

Синтаксис оператора   NOAUDIT   аналогичен  оператору  AUDIT.  Единственная
разница состоит во фразе BY;  регистрация  указанных действий прекращается вне
зависимости от того, была ли она "по сеансу" или "по обращению".  Опции,
специфицированные в  операторе NOAUDIT, в регистрации более не нуждаются.

      Функция USERENV

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

    CREATE VIEW MYVIEW AS
    SELECT * FROM MYSALARY
    WHERE USERENV('TERMINAL') = 'RTA0';

Действительная спецификация  терминала  (ID) будет иметь различный формат для
каждой операционной системы.  Создав обзор,  Вы должны предоставить права
доступа к нему определенным пользователям ORACLE:

    GRANT SELECT ON MYVIEW TO EVELIN;


                                   -- 195 --



После выполнения обоих этих  операторов  пользователь  EVELYN сможет увидеть
строки этого обзора,  лишь когда  зарегистрируется на терминале RTA0. Хотя она
и имеет доступ к обзору с любого тер- минала, но строки будут возвращаться
только на указанном.























































                                   -- 196 --


KOAP Open Portal 2000



Яндекс цитирования