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




                   НПКО Мекомп при Минчермете СССР
                             O R A C L E

                  РУКОВОДСТВО АДМИНИСТРАТОРА БАЗЫ ДАННЫХ
              ( RDBMS.Database Administrator's Guide v5.1 )

                              1 9 8 9 г.
                         C О Д Е Р Ж А Н И Е
ВВЕДЕНИЕ...........................................................
Цель...............................................................
Аудитория..........................................................
Как организовано руководство.......................................
Дополнительная литература.........................................
Соглашения, используемые в данном руководстве.....................
  Синтаксис команд................................................

ЧАСТЬ I: ВВЕДЕНИЕ В СУРБД ORACLE..................................
Глава 1.Что такое ORACLE?.........................................
Соглашение о названиях компонентов ORACLE.........................
Компоненты ORACLE.................................................
  Язык SQL - основа всех утилит...................................
  СУРБД ORACLE....................................................
  "Easy" компоненты ORACLE........................................
  "SQL" компоненты ORACLE.........................................
  "Pro" компоненты ORACLE.........................................
Cоглашение о нумерации версий ORACLE..............................
    Hомер версии..................................................
    Номер реализации..............................................
    Уровень ревизии...............................................
Введение в концепции и терминологию ORACLE........................
  Основные термины................................................
Четыре фоновых процесса...........................................
  процесс ARH.....................................................
  процесс BIW.....................................................
  процесс BWR.....................................................
  процесс CLN.....................................................
Глава 2.Функции администратора базы данных (DBA).................
SYS и SYSTEM: пользователи ORACLE с привилегией DBA...............
  Пользователь SYS................................................
  Пользователь SYSTEM.............................................
Привилегии администратора базы данных.............................

ЧАСТЬ II: ИСПОЛЬЗОВАНИЕ СРЕДСТВ АДМИНИСТРАТОРА БАЗЫ ДАННЫХ .......
Глава 3.Использование IOR для запуска и остановки ORACLE.........
Команды и параметры утилиты IOR...................................
  Инициализация ORACLE командой IOR INIT..........................
  Старт ORACLE командой IOR WARM..................................
  Завершение работы ORACLE командой IOR SHUT..............
  Завершение работы ORACLE командой IOR CLEAR.............
  Опция DBA для команды IOR.......................................
  Опция SHARED для команды IOR....................................
Файл параметров INIT.ORA..........................................
  Настроечные параметры INIT.ORA..................................
  Параметры, зависимые от операционной  системы...................
  Подробное описание параметров INIT.ORA..........................
    AI_BUFFERS....................................................
    AFTER_IMAGE...................................................
    AI_FILE_SIZE..................................................
    AI_WARN_PCNT..................................................
    AUDIT_TRAIL...................................................
    BEFORE_IMAGE..................................................
    BI_BUFFERS....................................................
    BI_HIGH.......................................................
    BI_LOW........................................................
    BLOCK_SIZE....................................................
    BUFFERS.......................................................
    BUFF_HASH_BKTS................................................
    CLUSTERS......................................................
    COLUMNS.......................................................
    CONSOLE.......................................................
    CONTEXT_INCR..................................................
    CONTEXT_SIZE..................................................
    DATABASE......................................................
    DETACHED_DUMPS................................................
    ENQUEUES......................................................
    FILES.........................................................
    FIXED_DATE....................................................
    INSTANCESю....................................................
    INSTANCE_NAME.................................................
    LANGUAGE......................................................
    OPEN_CURSORS..................................................
    OPEN_LINKS....................................................
    PROCESSES.....................................................
    READ_BLKS_REQ.................................................
    READ_BLKS_TOT.................................................
    READ_REQUESTS.................................................
    SINGLE_PROCESS................................................
    SORT_AREA_SZ..................................................
    SORT_FINAL_RA.................................................
    SORT_MERGE_RA.................................................
    SORT_POOL_SZ..................................................
    SORT_READ_FAC.................................................
    SORT_SPCMAP_SZ................................................
    SQL...........................................................
    TABLE_ACCESSES................................................
    TABLE_HANDLES.................................................
    TABLE_HSH_BKTS................................................
  Использование другого файла параметров..........................
  Ошибки, возникающие при выполнении утилиты IOR..................
Утилита SGI.......................................................
  Вызов утилиты SGI...............................................
  Вывод утилиты SGI...............................................

Глава 4.Система отображения работы ORACLE (утилита ODS)..........
Вызов утилиты ODS.................................................
  Использование регистрационного (LOG) файла утилиты ODS..........
  Экранные формы утилиты ODS......................................
    Отображение BI файла..........................................
    Отображение операций ввода-вывода.............................
    Отображение блокировок........................................
    Отображение процессов.........................................
    Отображение обобщеннных сведений о работе системы.............
    Отображение активных таблиц...................................
    Отображение работы пользователей..............................

Глава 5.Протоколирование работы с базами данных..................
Цели протоколирования.............................................
Журнал протоколов ................................................
Подготовка к подключению протокольного журнала....................
Подключение протокольного журнала.................................
  Параметры файла INIT.ORA, управляющие ведением журнала..........
    AFTER_IMAGE...................................................
    AI_FILE_SIZE..................................................
    AI_WARN_PCNT..................................................
Применение журнальных файлов (вызов утилиты AIJ)..................
  Команды и параметры утилиты AIJ.................................
  Что происходит во время первого и второго прохода утилиты AIJ...
Сообщения, передаваемые на консоль оператора......................
Сообщения утилиты AIJ об ошибках..................................

Глава 6.Модификация видиотерминалов (утилита CRT)................
Что такое утилита CRT?............................................
Какие программы ORACLE используют CRT файлы?..............
Требования к терминалам, поддерживаемым CRT.......................
Описания терминалов по умолчанию..................................
Таблицы базы данных, используемые CRT.............................
  Таблица SYSTEM.CRT..............................................
  Таблица SYSTEM.CRTBOX...........................................
  Таблица SYSTEM.CRT_PRODUCTS.....................................
  Таблица SYSTEM.CRT_TYPE.........................................
  Таблица SYSTEM.ESC..............................................
  Таблица SYSTEM.FUNCTIONS........................................
  Таблица SYSTEM.GOTO_LC..........................................
Добавление описания нового терминала..............................
  С помощью формы CRT.............................................
  С помощью языка SQL*Plus........................................
  Задание координат курсора.......................................
Модификация существующих описаний терминалов......................
Запуск программы CRT..............................................
Установка/инициализация CRT (обязанности DBA).....................
Cоветы по использованию CRT.......................................

ЧАСТЬ III.СТРУКТУРА БАЗЫ ДАННЫХ ORACLE...................
Глава 7.Словарь данных ORACLE............................
Что такое словарь данных?.........................................
Как создается и обновляется словарь данных?.......................
Замечания об особенностях некоторых таблиц словаря................
Добавление новых компонент словаря данных.........................
Обновление словаря данных вручную.................................

Глава 8.Как данные хранятся в базе данных?.......................
Файл базы данных..................................................
  Файлы и разделы.................................................
  Раздел SYSTEM...................................................
  Добавление разделов и файлов....................................
  Утилита CCF.....................................................
  Что делать, когда раздел переполняется..........................
Таблицы...........................................................
  Логический формат некластеризованных блоков данных..............
  Ресурсы памяти требуемые ORACLE........................
  Как используется пространство памяти...........................
    При занесении записей........................................
    При обновлении записей.......................................
    При сцеплении блоков.........................................
    При удалении записей.........................................
  Как выделяется пространство памяти.............................
Описание пространства памяти.....................................
  Описание пространства памяти по умолчанию......................
  Описание пространства памяти для временных таблиц..............
  Листинг текущего описания пространства памяти..................
  Создание описания пространства памяти..........................
    Расчет количества сегментов данных...........................
    Расчет количества сегментов индексов.........................
    Расчет пространства памяти для кластеров.....................
  Использование описания пространства памяти.....................
  Задание раздела при создании таблицы...........................
  Изменение описания пространства памяти.........................
  Уничтожение оприсания пространства памяти......................
  Что делать, если таблица превысит макс.количество экстентов...
Типы данных ORACLE.......................................
  Тип данных CHAR................................................
  Тип данных NUMBER..............................................
    Внутренний числовой формат...................................
    Использование масштаба и точности чисел......................
  Тип данных DATE................................................
    Использование дат юлианского календаря.......................
  Тип данных LONG................................................
    Ограничение на данные типа LONG..............................
    Использование данных типа LONG в SQL*Plus....................
    Использование данных типа LONG в программах пользователя.....
  Типы данных RAW и LONG RAW.....................................
  Типы данных, совместимые с SQL/DS..............................
  Тип данных ROWID...............................................
    Для чего используются идентификаторы записи ROWID?...........
    Примеры использования данных типа ROWID......................
  Преобразование данных..........................................
Временные таблицы................................................
  Операции, требуюшие использования временных таблиц.............
  Как используются временные таблицы?............................
  Описание пространства памяти с именем TERMTABLE................

ЧАСТЬ IV.НАСТРОЙКА СУРБД ORACLE.................................
Глава 9.Согласованность и одновременность работы................
Логические единицы работы (транзакции)...........................
Предложение COMMIT WORK..........................................
  Что происходит, когда пользователь выполняет оперцию COMMIT....
Предложение ROLLBACK WORK........................................
Выполнение операций COMMIT и ROLLBACK............................
  Явное выполнение COMMIT и ROLLBACK.............................
  Неявное (автоматическое) выполнение операций COMMIT и ROLLBACK.
  BI файл........................................................
  Контроль за состоянием BI файла................................
  Увеличение размеров BI файла...................................
  Целостность чтения.............................................
Блокирование в ORACLE....................................
  Типы блокировок................................................
  Внутренние блокировки..........................................
  Сравнительные характеристики блокировок........................
    Режим SHARE..................................................
    Режим EXCLUSIVE..............................................
    Режим SHARE UPDATE...........................................
    Блокировки в состоянии ожидания..............................
    Блокировки словаря/интерпретатора (DDL блокировки)...........
  Блокировки операций со словарем................................
  Блокировки описания словаря....................................
  Блокировки описания таблиц.....................................
Блокировки таблицы / записи (DML блокировки).....................
  Блокирование таблицы в режиме SHARE............................
  Блокирование таблицы в режиме EXCLUSIVE........................
  Блокирование на уровне записи (режим SHARE UPDATE).............
  Блокирование на уровне записей ................................
  Для чего используется режим SHARE UPDATE?......................
Блокирование в SQL*Forms.........................................
Ограничения на блокировки........................................
Выявление взаимоблокировок.......................................
Общие рекомендации по блокированию...............................

Глава 10.Настройка системы с целью повышения производительности.
Настройка отдельным пользователем................................
Индексация.......................................................
  Индексы, ключи и связанные ключи...............................
  Создание индексов..............................................
  Конкатенированные индексы......................................
  Уплотненные и неуплотненные индексы............................
    Уплотненные индексы..........................................
    Неуплотненные индексы........................................
  Как писать предложения SQL, используя преимущества индексации..
  Единственный индекс............................................
  Индексы и значения NULL........................................
  Несколько индексов на одной таблице............................
  Выбор из нескольких индексов...................................
  Запрещение использования индексов..............................
  Команда VALIDATE INDEX ........................................
  Внутренняя структура индексов..................................
Кластеризация....................................................
  Что такое кластеры?............................................
  Логический формат блоков кластеризованных данных...............
  Ключ кластера..................................................
  Создание кластеров.............................................
    Определение размера логического блока........................
    Кластеры и определение пространства памяти...................
    Советы по использованию кластеров............................
  Загрузка кластеров.............................................
  Уничтожение кластеров..........................................
Пространство контекста ORACLE............................
Приоритет операторов языка SQL...................................
Оптимизация различных предложений языка SQL......................
Автоматически выполняемая оптимизация............................
  Использование оператора DISTINCT...............................
  Использование оператора GROUP BY...............................
  Подзапросы.....................................................
  Поиск единственной записи......................................
Оптимизация запросов (предложений SELECT)........................
Оптимизация предикатов NOT.......................................
Оптимизация предикатов OR........................................
Программа сортировки/объединения ORACLE..................
Оптимизация выражения ORDER BY...................................
Оптимизация выражения GROUP BY...................................
Оптимизация объединений..........................................
Неиндексированные объединения....................................
Индексированные объединения......................................
Обработка массивов...............................................

ЧАСТЬ V.СИСТЕМА ЗАЩИТЫ СУРБД ORACLE.............................
Глава 11.Включение и исключение пользователей...................
Включение пользователей..........................................
  Пользователи с привилегией CONNECT.............................
  Пользователи с привилегией RESOURCE............................
  Пользователи с привилегией DBA.................................
Автоматический вход в СУРБД ORACLE...............................
Изменение паролей................................................
Исключение пользователей.........................................
Особый "пользователь" - PUBLIC...................................
Общие синонимы...................................................
Файлы LOGIN.SQL..................................................
Глава 12.Использование регистрационного контроля в ORACLE.......
Контроль за доступом.............................................
  Подключение системы контроля...................................
  Таблицы системы регистрационного контроля......................
Установка опций системы регистрационного контроля................
  Контроль за доступом и словарь данных..........................
    Какие действия подвергаются контролю?........................
    Таблица AUDIT_TRAIL..........................................
    Список текущих опций системы контроля........................
    Список опций системного контроля.............................
  Функция USERENV................................................

Приложение А.Зарезервированные слова............................
Приложение В.Описания таблиц словаря данных.....................
Приложение С.Ограничения........................................
Приложение D.Краткое описание параметров INIT.ORA...............
Приложение Е.Коды функциональных клавиш видеотерминалов.........
  Коды SQL*Forms (IAP)...........................................
  Коды SQL*Menu..................................................
Приложение F.Описания терминалов, обеспечиваемые разработчиком..
Словарь..........................................................

+                              ВВЕДЕНИЕ
                                 ЦЕЛЬ
  Это руководство содержит информацию,необходимую для сопровождения системы
управления реляционными БД (СУРБД) ORACLE.Хотя в этом руководстве не описы-
вается установка системы,оно содержит много информации,которая может помочь
администратору БД принять наилучшие решения относительно системных парамет-
ров и распределения памяти с целью достижения хорошей производительности и
ровной работы системы.

                               АУДИТОРИЯ
  Это руководство написано для лиц,ответственных за функционирование СУРБД
ORACLE.Предполагается,что эти лица,которые называются администраторами БД,
ответственны за ровное выполнение операций СУРБД ORACLE и контроль ее испо-
льзования с целью определения путей улучшения работы системы и прикладных
программ,использующих эту систему.
  Администраторы БД часто привлекаются к начальной и последующим установкам
ORACLE.Хотя это руководство не является руководством по установке системы,
оно содержит информацию,связанную с опциями,доступными во время установки.
Подробная информация,необходимая для установки системы,содержится в руковод-
стве по установке и руководстве пользователя для конкретной ОС.
  Несмотря на то,что материал,содержащийся в этом руководстве,представляет,
прежде всего,интерес для администраторов БД,а не для обычного пользователя,
опытные пользователи ORACLE и разработчики более совершенных прикладных
программ также найдут информацию,полезную при разработке высоко эффективных
прикладных программ.
  Предполагается,что читатели этого руководства знакомы с концепциями СУРБД
ORACLE и имеют некоторый опыт использования БД.В первых главах приводится
краткий обзор ORACLE,но в последующих главах рассматриваются подробности,ко-
торые могут оказаться сложными для понимания пользователем,не обладающим
достаточным опытом работы с системой.

                   КАК ОРГАНИЗОВАНО ЭТО РУКОВОДСТВО
  Это руководство содержит информацию о том,как работает СУРБД ORACLE,более
подробную,чем это необходимо для многих конечных пользователей,но представ-
ляющую интерес для лиц,желающих управлять производительностью системы или
улучшать ее.Например,в руководстве описывается,как работают блокировки,что
делают фоновые процессы и чем управляют параметры в файле INIT.ORA.В чем со-
держится информация о параметрах,которые можно применять для того,чтобы улу-
чшить работу СУРБД ORACLE.Например,в этом руководстве описываются параметры
файла INIT.ORA,которые,возможно,необходимо будет настроить,а также способы
переформулирования запросов для сокращения времени поиска и выборки данных.В
этом руководстве также описываются утилиты ORACLE,которые администраторы БД
могут использовать для контроля работы СУРБД ORACLE (такие как,SGI и ODS).
  Информация,содержащаяся в этом руководстве,применима к СУРБД ORACLE,рабо-
тающим на всех ОС,за очень небольшим исключением.Исключения отмечаются сра-
зу,как только они появляются со ссылками на руководство,содержащее более
подробную информацию.Таким руководством обычно является руководство по уста-
новке и руководство пользователя для ОС ххх,где ххх - это имя вычислитель-
ной и операционной систем.Например,DEC VAX/VMS или IBM MVS.Пользователи
ORACLE индивидуального пользования,таких как VS-DOS,могут пропустить разделы
этого руководства,которые относятся к ORACLE коллективного пользования.Заме-
чания о такой возможности располагаются в начале таких разделов.
  Настоящее руководство состоит из следующих частей и глав:

                    Часть I: Введение в СУРБД ORACLE.
  Эта часть содержит общий обзор компонентов ORACLE,она знакомит с некоторы-
ми общепринятыми терминами ORACLE и определяет зоны ответственности лица,
называемого администратором БД.

                     Глава 1.Что такое ORACLE?
  Эта глава знакомит с компонентами ORACLE и дает краткое описание этих ком-
понентов.Она также описывает язык SQL,на котором базируется ORACLE.Приводят-
ся определения основных терминов ORACLE.

                   Глава 2.Функции администратора БД (DBA).
  В этой главе очерчиваются зоны ответственности и задачи лица,которое несет
ответственность за сопровождение БД ORACLE - администратора БД.Рассматрива-
ются 2 администратора БД с именами SYS и SYSTEM.

              Часть II: Использование средств администратора БД.
  Эта часть содержит несколько глав,каждая из которых связана с одной из
программ или утилит ORACLE,представляющей интерес прежде всего для админист-
ратора БД.Такими утилитами являются:
  IOR - для старта и остановки ORACLE;
  ODS - для отображения статистики работы системы;
  AIJ - для записи действий,производимых над БД,для ее восстановления,в слу-
        чае системного сбоя;
  CRT - для модификации характеристик видеотерминала и назначения функциона-
        льных клавиш.

     Глава 3.Использование утилиты IOR для запуска и остановки ORACLE.
  В этой главе описываются различные опции программы IOR,которые администра-
тор БД использует для того,чтобы записать или остановить ORACLE.Вместе с об-
суждением работы программы IOR приводится краткое описание параметров в дан-
ном файле INIT.ORA,который читается и используется программой IOR.Кроме то-
го,описывается еще одна утилита - SGI.Администратор БД использует утилиту
SGI,для того чтобы выдать требования к памяти для конкретного файла INIT.ORA.

          Глава 4.Система отображения работы ORACLE (утилита ODS).
  Эта глава описывает программу ODS,которая показана для отслеживания работы
ORACLE.М.б. выбраны различные формы для отображения информации о том,какие
пользователи активны,какие блокировки они установили и какая деятельность
осуществлялась в БД с последнего старта системы командой IOR WARM.Особый ин-
терес представляют экранные формы,отображающие информацию о текущих блокиро-
вках и BI файле.

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

               Глава 6.Модификация видеотерминалов (утилита CRT).
  В этой главе описывается утилита CRT,используемая для создания и хранения
описаний видеотерминалов,для того чтобы полноэкранные компоненты ORACLE мог-
ли использовать различные видеотерминалы.Приводится описание таблиц БД,испо-
льзуемых утилитой CRT,и обсуждается,как можно изменять эти таблицы для того,
чтобы адаптировать описания терминалов для прикладных программ пользователей.

                      Часть III: Структура БД ORACLE.
  В этой части подробно описывается,как данные хранятся в БД.В первой главе
этой части описывается словарь данных,который присутствует во всех БД и яв-
ляется справочным центром для поиска данных.В следующей главе описывается
хранение данных,начиная с самого крупного понятия - БД,и кончая самыми дета-
льными понятиями - типами данных.

                       Глава 7.Словарь данных ORACLE.
  В этой главе описывается создание и назначение таблиц БД,которые называют-
ся словарем данных.Список колонок этих таблиц приведен в прил.В.

                      Глава 8.Как данные хранятся в БД?
  В этой главе описывается,как данные хранятся в БД,начиная с наиболее обще-
го описания до самого подробного - от описания БД до того,какие элементы со-
ставляют БД,и вплоть до различных типов данных.Также обсуждаются преобразо-
вание данных и временные таблицы.

                       Часть IV.Настройка СУРБД ORACLE
  Эта часть содержит информацию,которая может помочь администратору БД поня-
ть,как происходит взаимодействие нескольких пользователей,осуществляющих од-
новременный доступ к одним и тем же данным и как ORACLE обеспечивает согла-
сованность и целостность данных,используя механизм блокирования для защиты
данных.Затем в ней описываются некоторые способы улучшения производительнос-
ти системы,включая 2 наиболее важных способа: индексацию и кластеризацию.
После подробного обсуждения команд индексации и кластеризации следуют неко-
торые советы по оптимизации работы системы.

             Глава 9.Согласованность и одновременность работы.
  В этой главе описываются транзакции и команды языка SQL для управления
ими.Также приводятся перечень,определения и примеры использования различных
блокировок,которые ORACLE использует для того,чтобы гарантировать целостно-
сть данных в режиме коллективного пользования.Сравниваются 3 режима блокиро-
вки: режим EXCLUSIVE,режим SHARE и режим SHARE UPDATE (блокирование на уров-
не записей).Также обсуждаются выявления взаимоблокировок и их разрешение.

     Глава 10.Настройка системы с целью повышения ее производительности.
  В этой главе описывается назначение индексов и кластеров - двух наиболее
важных средств повышения производительности системы.Описывается также прост-
ранство контекста и производительность сформулированных по-разному предложе-
ний SQL.

                   Часть V.Система защиты СУРБД ORACLE.
  В этой части обсуждаются возможности ORACLE,которые позволяют администра-
тору БД управлять доступом к БД и отслеживать изменения или попытки измене-
ния данных.Также описываются возможности регистрационного протокола,который
позволяет пользователям и администраторам БД отслеживать использование БД на
нескольких различных уровнях.

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

          Глава 12.Использование регистрационного контроля в ORACLE.
  В этой главе описываются способы,которые может использовать администратор
БД для улучшения и контроля за безопасностью БД.Обсуждаются подключение и
использование регистрационного контроля.

  Приложение А содержит список зарезервированных слов ORACLE.
  Приложение В содержит список таблиц словаря данных с подробным описанием
               их колонок.
  Приложение С содержит список некоторых ограничений ORACLE,таких как макси-
               мальное количество символов в колонке типа CHAR или максима-
               льное количество колонок в таблице.
  Приложение D содержит краткое описание параметров файла INIT.ORA,включая
               описание,диапазон значений и значения по умолчанию.

  Это руководство также содержит словарь.

                           Дополнительная литература
  Так как это руководство содержит информацию,применимую к ORACLE,работаю-
щим в среде любой ОС,для работы с ORACLE могут потребоваться руководства,
содержащие информацию,специфичную для конкретной ОС.Такими руководствами яв-
ляются:
  - ORACLE для DEC VAX/VMS.Руководство по установке и руководство пользова-
    теля.Часть N1001.
  - ORACLE для IBM VM/SP.Руководство по установке и руководство пользовате-
    ля.Часть N1003.
  Эти руководства являются двумя основными источниками информации как для
администраторов БД,так и для наиболее опытных пользователей ORACLE.
  Ниже приведены списки других публикаций.Наиболее часто публикуются замеча-
ния по реализации (Release Notes) для отдельных компонентов системы,содержа-
щие изменения и новую информацию о программном продукте.Приложения в "заме-
чаниях" по реализации могут содержать информацию,специфичную для ОС,в допо-
лнение к упомянутым выше руководствам по установке.

             Дополнительная документация по СУРБД ORACLE:
  - СУРБД ORACLE.Замечания по реализации,ORACLE,часть N3001;
  - ORACLE.Обзор и введение в язык SQL,ORACLE,часть N3801;
  - ORACLE.Руководство администратора БД,ORACLE,часть N3601;
  - ORACLE.Утилиты.Руководство пользователя,ORACLE,часть N360;
  - Коды и сообщения об ошибках.ORACLE,часть N3605.

               Соглашения,используемые в данном руководстве
  В данном руководстве приняты следующие соглашения:
  Имена файлов - пишутся заглавными буквами,например,INIT.ORA.Та часть име-
ни,которая может изменяться,пишется прописными буквами,например,SGADEFx.ORA.
  Зарезервированные слова и ключевые слова - эти слова в тексте и примерах
пишутся заглавными буквами,для того чтобы подчеркнуть,что они должны вводи-
ться именно так,и что они имеют значение для ORACLE.
  Названия клавиш - написаны заглавными буквами и заключены в квадратные
скобки,например,[RETURN].

                            Синтаксис команд
  Команды - для обозначения текста,который должен вводиться точно так,как он
записан,используется следующий шрифт:
                              SELECT * FROM
  Альтернативные значения - разделяются вертикальной чертой (|).Несколько
альтернативных значений заключается в фигурные скобки,если обязательно тре-
буется одно из этих значений,или в квадратные скобки,если значение необяза-
тельно.
  Обязательные значения - заключаются в фигурные скобки.Пользователь должен
выбрать одно из альтернативных значений.
  Необязательные значения - заключаются в квадратные скобки.
  Повторяемые значения - многоточие представляет произвольное количество по-
добных значений.

+                      ЧАСТЬ I: ВВЕДЕНИЕ В СУРБД ORACLE
  Эта часть содержит общий обзор компонентов СУРБД ORACLE.Она знакомит с не-
которыми общими терминами ORACLE и определяет зоны ответственности лица,на-
зываемого администратором БД (DBA).

                       ГЛАВА1.ЧТО ТАКОЕ СИСТЕМА ORACLE?
  Эта глава знакомит с компонентами ORACLE,образующих СУРБД ORACLE,с корот-
ким описанием этих компонентов.Она также описывает язык SQL,на котором ба-
зируется ORACLE.Определяются основные термины ORACLE.

              СОГЛАШЕНИЕ О НАЗВАНИЯХ КОМПОНЕНТОВ СИСТЕМЫ ORACLE
  Начиная с реализации 5 версии СУРБД ORACLE,вводятся несколько новых компо-
нентов ORACLE.Компоненты ORACLE именуются,используя соглашение,в котором
указывается как тип,так и уровень компоненты.Следующий набор префиксов ука-
зывает на уровень:
Easy Обозначает диалоговые компоненты с использованием видеотерминалов,кото-
     рые руководят работой пользователей,предлагая как сделать выбор послед-
     ством "меню" и представления им детальной оперативной вспомогательной
     информации.Предназначены для новых и нечасто работающих пользователей
     СУРБД ORACLE или для лиц,незнакомых с вычислительной техникой.
SQL  Обозначает компоненты,которые работают интерактивно или управляются ко-
     мандами.Поэтому предполагается более детальное знакомство с языком SQL
     и компонентами ORACLE.Предназначен для пользователей с достаточным опы-
     том работы с ORACLE,языком SQL и данными.
Pro  Обозначает программный интерфейс СУРБД ORACLE.Это требует специальных
     знаний и опыта в программировании,также как в использовании языка SQL,
     и СУРБД ORACLE.Эти интерфейсы предназначены для программистов.

+                     КОМПОНЕНТЫ СИСТЕМЫ ORACLE
  Этот раздел описывает различные компоненты,которые вместе называются сис-
тема управления БД ORACLE.Многим пользователям не нужно использовать все
компонеты ORACLE,однако пользователи могут воспользоваться преимуществами
различных компонентов решения различных задач различными способами.

                      Язык SQL - основа всех утилит
  Основой СУРБД ORACLE является язык SQL,название которого произносится как
"сиквел" - язык данного,конструкции которого сходны с конструкциями английс-
кого языка.Язык "сиквел" достаточно прост для того,чтобы начинающий пользо-
ватель смог получать доступ к данным через очень короткое время.Кроме того,
он достаточно мощный и гибкий для того,чтобы предложить программистам все
возможности,которые им требуются.
  Язык "сиквел" был разработан фирмой IBM и был предложен американским наци-
ональным институтом стандартов (ANSI) в качестве основы для стандартного
языка систем управления реляционными БД.
  Предложения языка "сиквел" часто делятся на 4 категории:

                                 Запросы
  Предложения,которые выбирают уже существующие данные,в любой комбинации,в
любом порядке и по любым условиям.Запросы всегда начинаются с зарезервиро-
ванного слова языка "сиквел" SELECT,за которым следует перечисление данных,
которые необходимо выбрать и таблиц,содержащих исходные данные.
Например:    SELECT ENAME,MGR
             FROM EMP;
  Запросы не изменяют данных,они только выбирают их.

                                    DML
  Предложения языка манипуляции данными (DML) используются для того,чтобы
изменить данные тремя основными способами:
  - вставить новую запись с данными в таблицу (предложение INSERT)
  - изменить значение существующих записей в колонке таблицы (предложение
    UPDATE) - удалить записи из таблицы (предложение DELETE)

                                    DDL
  Предложения языка описания данных (DDL) используются для создания объектов
БД и их уничтожения,когда они становятся ненужными.Язык DDL включает в себя
предложения CREATE TABLE,CREATE VIEW,CREATE INDEX,CREATE SYNONYM,ALTER TABLE
и соответствующие предложения DROP.

                                    DCL
  Предложения языка контроля данных DCL используется для представления и ре-
шения привилегий по доступу к БД (например,GRANT CONNECT,RESOURCE,DBA) и к
отдельным данным базы (например,GRANT SELECT и REVOKE DELETE).Предложения
DCL позволяют разрешать одному пользователю по своему выбору предоставлять
возможность просматривать,изменять или использовать данные в своих таблицах
другим пользователем и даже распространить свои привилегии на других пользо-
вателей (GRANT SELECT ...WITH GRANT).
  Предложения DCL группируются с предложениями DDL.Язык контроля данных так-
же включают предложения COMMIT,ROLLBACK и LOCK TABLE,которые определяют,ког-
да и как осуществляются транзакции данных,а также предложения AUDIT.
  При лучшем ознакомлении с СУРБД ORACLE,можно увидить,что предложения язы-
ков DML,DDL и языка запросов имеют различный смысл в БД.Поэтому в этой книге
изредка делаются ссылки на эту классификацию (DML,DDL и т.д.) в предположе-
нии,что Вы понимаете,какое предложение языка SQL попадает под эту категорию.

+                               СУРБД ORACLE
СУРБД ORACLE является центральным компонентом ORACLE.Он включает ядро управ-
ления БД и несколько характеристик,которые помогают пользователям и админис-
траторам БД в сопровождении,отслеживании и использовании данных.В эту компо-
ненту входят следующие утилиты (утилита для DBA описана в этом руководстве):
 - IOR Утилита для старта,остановки и инициализации ORACLE (для DBA).
 - SGI Утилита для описания разделяемой области памяти используемой ORACLE.
 - ODS Утилита для контроля пользователей и процессов ORACLE - система ото-
       бражения ORACLE (для DBA).
 - AIJ Утилита для регистрации изменений в данных,позволяющая восстанавлива-
       ть БД в случае неисправности диска (для DBA).
 - CRT Утилита для настройки характеристик видеотерминала,для диалоговых ко-
       мпонент,таких как SQL*Forms(IAP),или для того,чтобы модифицировать
       назначение функциональных клавиш терминала.

                                Export/Import
  Утилита пользователя,переписывающая данные ORACLE в и считывающая из фай-
лов,которые затем могут использоваться в качестве архивов данных или для пе-
редачи данных между OC или БД ORACLE.
  ODL Утилита пользователя (загрузчик данных ORACLE) используется для того,
чтобы загрузить данные из стандартных для OC файлов.

                           "Easy" компоненты ORACLE
  "Easy" компоненты ORACLE предоставляет начинающим пользователям ORACLE ра-
знообразные функции.Не все "easy" компоненты доступны любой ОС.
  Easy*SQL ORACLE - это версия Easy*SQL для ОС MS-DOS,которая содержит толь-
ко СУРБД и Easy*SQL.

                            SQL - компоненты ORACLE
  SQL* компоненты являются главными компонентами ORACLE и предоставляют мно-
го различных способов доступа к данным.Не все SQL компоненты доступны любой
ОС.
  SQL*Plus - интерактивный управляемый командами интерфейс с ORACLE,полезный
для составления запросов и выдачи отчетов.
  SQL*Forms - экранный интерфейс,который позволяет пользователю создавать,
модифицировать и использовать полноэкранные формы на видеотерминале.
  SQL*Calс - интегрированный с данными ORACLE интерфейс для печати данных.
  SQL*Menu - компонент для конструирования диалоговых интерфейсов типа
"Menu" к любой прикладной программе.Он позволяет пользователю создавать сов-
местные прикладные программы,выполняюшиеся на различных ОС.
  SQL*Graph - компонент,позволяющий графическое изображение информации,хра-
нящейся в БД.
  SQL*Report - компонент для объединения и форматирования текста,в который
включены данные ORACLE.
  SQL*Net - компонент для доступа к БД с компьютеров,которые подключены к
сети,содержащей компьютеры,на которых установлены эти БД.
  Easy*Calс ORACLE - это версия Easy*Calс для ОС MS-DOS,которая содержит то-
лько СУРБД и Easy*Calс.

                            "Pro" компоненты ORACLE
  "Pro" компоненты ORACLE - это программный интерфейс,который позволяет про-
граммистам разрабатывать прикладные программы,использующие данные ORACLE на
языках высокого уровня.Программисты для того,чтобы встроить в программы пре-
дложения SQL,могут использовать либо прекомпиляторы,либо определенный набор
подпрограмм,имеющих доступ к данным в БД.Возможно использование следующих
компонент для связи с соответствующими алгоритмическими языками:
  Pro*C
  Pro*COBOL
  Pro*FORTRAN
  Pro*PL/1
  Pro*Pascal
  Pro*Ada

  Не все версии ORACLE и не для всех ОС обеспечивают связь со всеми перечис-
ленными алгоритмическими языками высокого уровня.Для получения более подроб-
ной информации по этому вопросу необходимо обратиться к руководству по уста-
новке и к руководству пользователя для конкретной ОС.

+                CОГЛАШЕНИЕ О НУМЕРАЦИИ ВЕРСИЙ СИСТЕМЫ ORACLE
  Компоненты ORACLE непрерывно развиваются и изменяются.В каждый конкретный
момент времени используется несколько версий компонент.Для того,чтобы точно
идентифицировать,какая версия какого компонента используется в данный мо-
мент,требуется 3 номера: N версии,N реализации,уровень ревизии.

                                  N версии
  N версии,например версия 5,является наиболее общим идентификатором.N прис-
ваивается,когда продукт начинает обладать существенно новыми свойствами.

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

                               Уровень ревизии
  Уровень ревизии идентифицирует заданный уровень объектных кодов.Этот N ис-
пользовался первоначально фирмой-разработчиком для того,чтобы полностью иде-
нтифицировать конкретную ORACLE.Вообще говоря,обычно используется только
один N реализации,крайне редко заменяется система с одним уровнем ревизии
на систему с тем же номером реализации,но другим уровнем ревизии.
  Когда фирма-разработчик предлагает новый продукт или улучшает существую-
щий,номера версий отдельных компонент не зависят друг от друга.Поэтому можно
использовать СУРБД с версией 5.1.12,работающую SQL*Forms версия 2.0.3,
SQL*Plus версия 1.0.9 и Pro*FORTRAN версия 1.1.2 (эти номера использованы
только для иллюстрации).

             ВВЕДЕНИЕ В КОНЦЕПЦИИ И ТЕРМИНОЛОГИЮ СИСТЕМЫ ORACLE
  Этот раздел коротко определяет термины,обычно используемые при обсуждении
СУРБД ORACLE.Даются ссылки на дополнительную информацию,которая приводится в
этом руководстве.

                               Основные термины
                           Дистрибутивные носители
  Магнитные ленты или другие магнитные носители,такие как кассеты или диске-
ты,которые распространяются фирмой-разработчиком и содержат файлы с объект-
ным кодом и другие данные для СУРБД ORACLE или других компонент ORACLE.Инст-
рукция для чтения и загрузки этих дистрибутивных носителей находится в руко-
водстве по установке и в руководстве пользователю для каждой OC.

                                   Файлы БД
  Эти файлы (также называемые DB-файлами) содержат все таблицы данных поль-
зователя и таблицы словаря данных,хранимых или сгенерированных СУРБД ORAC-
LE.Всегда существует,по крайней мере,один DB-файл.Более подробная информа-
ция о DB-файлах приводится в описании параметра DATABASE файла INIT.ORA и в
разделе "Файл БД".

                               Файл состояния БД
Этот файл,также называемый BI файлом,содержит копию состояния БД до того,как
в ней произведены какие-либо изменения.Он используется для того,чтобы гаран-
тировать,что транзакции будут выполнены только тогда,когда они будут полны-
ми,непротиворечивыми и проверенными пользователем.Файл также используется
для восстановления БД в случае сбоев оборудования или операционной системы.
BI файл также поддерживает параллельный доступ к данным нескольких пользова-
телей.На систему создается только один BI файл.Более подробная информация о
BI файле приводится в описании параметра BEFORE_IMAGE файла INIT.ORA и в
разделе "BI-файл".

                               Журнальные файлы
  Эти файлы (также называемые AIJ файлами) используются для записи транзак-
ций,которые были выполнены для того,чтобы обеспечить восстановление БД в
случае неисправности магнитных носителей.Более подробная информация о AIJ
файлах приводится в описании параметра AFTER_IMAGE и в главе 5.

                             Администратор БД (DBA)
  Лицо,ответственное за эффективную работу СУРБД ORACLE,см.

          Глава 2."Функции администратора БД (DBA)".Программа IOR
Программа,используемая администратором БД для того,чтобы стартовать ORACLE
(сделать ее доступной для использования) или остановить систему (сделать ее
недоступной или отключить).Программа IOR также используется для инициализа-
ции системы (стартует ее в первый раз).Более подробная информация приведена
в разделе "Команды и параметры утилиты".

                                Файл INIT.ORA
  Этот файл содержит некоторые системные параметры,которые считываются и ис-
пользуются,когда производится старт системы с помощью утилиты IOR.Эти пара-
метры могут настраиваться так,чтобы СУРБД ORACLE действовать эффективнее или
изменить определенные ограничения.Например,каждый раз,когда ORACLE стартует,
файл INIT.ORA считывается для того,чтобы найти имена DB и BI-файлов и опре-
делить,сколько процессов могут иметь доступ к ORACLE одновременно.Более под-
робная информация о файле INIT.ORA содержится в разделе "Файл параметров
INIT.ORA".

                                    SGA
  Глобальная область системы (SGA) представляет собой совместно используемую
область в основной или виртуальной памяти.Она выделяется программой IOR и
активно используется данными во время работы ORACLE.Размер SGA зависит от
значения параметра,установленного в файле INIT.ORA.Например,SGA содержит
следующие разделы:
  - буферы данных;
  - список блокировок;
  - кэш-буферы колонок;
  - кэш-буферы таблиц;
  - кэш-буферы имен пользователей.

  Более подробная информация содержится в руководстве по установке и в руко-
водстве пользователя для конкретной ОС,а также в разделе "Утилита SGI".

                                    Ядро
  Эта часть СУРБД ORACLE выполняет операции языка SQL,запрашиваемые пользо-
вателями.Она выполняет чтение и запись в DB и BI файлах,управляет данными в
SGA и координирует деятельность нескольких параллельных пользователей.

                              Фоновые процессы
  Если предполагается,что ORACLE должна использоваться более чем одним поль-
зователем,она устанавливается как система коллективного пользования.Большин-
ство систем являются системами коллективного пользования.Для того,чтобы уп-
равлять параллельным доступом к данным,СУРБД ORACLE требуются дополнительные
"пользователи",которые именуются с использованием различной терминологии в
различных ОС (например,"процесса" в ОС VMS нет или "виртуальные машины" в ОС
IBM VM).В этом руководстве на этих пользователей ссылаются как на выделенные
или фононвые процессы.Процессы,имена которых приведены ниже,описываются бо-
лее подробно после списка основных терминов.

  ARH Осуществляет чтение из DB файла с целью поиска таблиц пользователей.
  BIW Осуществляет запись в BI файл.
  BNR Осуществляет запись в DB и AIJ файлы.
  CLN Вычищает последствия ненормально закончившихся процессов.

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

                         Система с разделяемыми БД
  Конфигурация ORACLE,в которой единственная БД (раздел) и BI файл могут ра-
зделяться между несколькими независимыми ORACLE (множеством выделенных про-
цессов).Кластер из ORACLE,выполняющийся на VAX cluster системе,представляет
собой систему с разделяемыми БД.

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

                   Системы индивидуального пользования
  Системы индивидуального пользования - это БД,которые не требуют одновреме-
нной работы нескольких пользователей или для которых имеются веские причины
для того,чтобы с ними работал только один пользователь.СУРБД ORACLE может
вызываться либо как однопользовательская система,либо как система коллектив-
ного пользования.Если она вызывается в однопользовательском режиме,операции
СУРБД кое в чем упрощаются,т.к. отпадает необходимость в координации дейст-
вий нескольких пользователей.Однако,это не повышает производительности сис-
темы.Параметр SINGLE_USER в файле INIT.ORA определяет,в каком из 2 режимов
работает система.

                             Словарь данных
  Словарь данных представляет собой набор таблиц и виртуальных таблиц,подде-
рживаемых СУРБД ORACLE и содержащих информацию о пользователях и их привиле-
гиях,таблицах и других объектах.Словарь данных используется при всех опера-
циях ORACLE.Более подробно он обсуждается в Главе 7."Словарь данных".

+                       ЧЕТЫРЕ ФОНОВЫХ ПРОЦЕССА
                              Процесс ARH
  Процесс асинхронного чтения ARH копирует блоки из DB файла в область SGA в
интересах любого запроса,требующего полного просмотра таблиц для того,чтобы
сократить время выполнения запроса.В идеальном случае ARH считывает блок в
SGA до того,как программе потребуются данные,содержащиеся в этом блоке.Файл
INIT.ORA содержит параметры READ_REQUESTS, READ_BLKS_TOT и READ_BLKS_REG,ко-
торые влияют на работу процесса ARH,однако изменять значение этих параметров
не рекомендуется (см.раздел "Файл параметров INIT.ORA).Процесс ARH считывает
блоки параллельно с программой,обрабатывающей эти данные.

                              Процесс BIW
  Процесс BIW - единственный процесс,который производит запись в BI файл.
Процесс копирует блоки из кэш-буфера SGA,содержащего состояние БД до начала
транзакций в BI файл.Скопированные блоки используются для восстановления
состояния БД в случаях отмены транзакций (ROLLBACK) или сбоев центрального
процессора.

                              Процесс BWR
  Процесс BWR - единственный процесс,который производит запись в DB и AIJ
файлы.Процесс выбирает модифицированные блоки из буфера SGA,когда требуется
пространство в буфере для другого блока и записывает модифицированные блоки
в БД и,если ведется протокольный журнал,в журнальный файл.

                              Процесс CLN
  Процесс CLN выполняет 2 функции: идентифицировать и вывести из системы лю-
бой процесс ORACLE,завершившийся ненормально,и участвует в нормальном завер-
шении работы с БД CLN периодически активизируется для того,чтобы просмотреть
информацию о процессах,содержащуюся в SGA.Если CLN находит процессы,заверши-
вшиеся ненормально,он идентифицирует их и отменяет все незавершенные транза-
кции перед выходом из ORACLE этих процессов.

+            ГЛАВА 2.ФУНКЦИИ АДМИНИСТРАТОРА БАЗЫ ДАННЫХ (DBA)
  Эта глава описывает зоны ответственности и функции лица,ответственного за
сопровождение БД ORACLE - администратора БД (DBA).Рассматриваются 2 пользо-
вателя ORACLE с привилегиями DBA,с именами SYS и SYSTEM.
  Фирма-разработчик рекомендует,чтобы каждая установленная ORACLE имела ад-
министратора БД,прошедшего иснструктаж у представителей фирмы и котрый д.б.
источником начальной информации для пользователей БД .DBA м.б. также лицом,
которое устанавливает ORACLE.Если он таковым не является,то,как правило,он
осуществляет контроль за установкой системы.
  Практически DBA может рассматриваться как пользователь или пользователи,
которые имеют привилегии DBA в БД ORACLE.Каждая ORACLE устанавливается с
двумя такими пользователями (SYS,SYSTEM).Кроме этих пользователей,в ORACLE
м.б. добавлены и другие пользователи с привилегиями DBA.Обычно термин DBA
используется по отношению к тому,кто лучше разбирается в БД,как в целом,так
и в деталях.Например,лучше знает о том,кто является пользователями,какие
данные они хранят и как часто ими пользуются,какие типы транзакций осуществ-
ляются и как увеличить производительность системы.

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

  Сохранение целостности данных является обширным вопросом,который частично
рассматривается в главе 9 и главе 12.Увеличение производительности - основ-
ная тема главы 10.Вопросы управления и контроля за использованием рабочего
пространства обсуждаются в главе 8."Как хранятся данные в БД".

        SYS и SYSTEM: ПОЛЬЗОВАТЕЛИ СИСТЕМЫ ОRACLE С ПРИВИЛЕГИЕЙ DBA
  Каждая ORACLE автоматически устанавливается с 2 пользователями,которые
имеют привилегии DBA: SYS и SYSTEM.Между ними имеются некоторые различия,
описываемые в следующих разделах.Если в ORACLE привилегии DBA предоставля-
ются многим пользователям или DBA создает таблицы или виртуальные таблицы
для функций DBA,то м.б. рекомендовано создание дополнительных пользователей
с привилегиями DBA для того,чтобы избежать случайного изменения данных в
таблицах или виртуальных таблицах,владельцами которых являются SYS и SYSTEM.

                               Пользователь SYS
  Пользователь ORACLE с именем SYS впервые входит в систему с паролем
CHANGE_ON_INSTALL.
  Пароль д.б. изменен немедленно после инициализации системы.Изменение паро-
ля является частью процесса установки системы и описывается в руководстве по
установке системы,и в руководстве пользователю для каждой OC.Новый пароль
устанавливается следующим образом:

SQL> GRANT CONNECT TO SYS IDENTIFIED BY новый_пароль;

  Так как пользователь SYS является владельцем всех основных таблиц для сло-
варя данных,а эти таблицы являются критическими для операций ORACLE,то вход
в систему под именем SYS должен осуществляться крайне редко,если осуществля-
ться вообще.
  Данные в таблицах,владельцами которых является SYS,изменяются не пользова-
телями,а ORACLE в результате использования БД.За исключением случаев,описы-
ваемых в разделе "Обновление словаря данных вручную".Ни одна из этих таблиц
не д.б. изменена никаким способом и никаким пользователем.Ни один пользова-
тель ORACLE не должен создавать новой таблицы,принадлежащей SYS.Нарушение
этих правил может привести к разрушению всех БД.


                           Пользователь SYSTEM
  Пользователь ORACLE с именем SYSTEM впервые входит в систему с паролем
MANAGER.Также,как и для пользователя SYS,пароль д.б. изменен немедленно пос-
ле инициализации системы.В то время,как пользователь SYS владеет всеми таб-
лицами словаря данных,пользователь SYSTEM владеет всеми виртуальными табли-
цами словаря данных.Несмотря на то,что объекты,владельцами которых является
SYSTEM,менее критичны по отношению к операциям ORACLE,настоятельно рекомен-
дуется не изменять их.
  Некоторые утилиты ORACLE создают или требуют использования таблиц или вир-
туальных таблиц,владельцами которых является SYSTEM.Эти объекты также не до-
лжны изменяться.Ниже приведен список таких объектов (таблиц и виртуальных
таблиц).Этот список может изменяться в зависимости от версий ORACLE:

  Дополнительные таблицы,владельцем которых является SYSTEM:
SQL*Plus
Help  CRT Utility   SQL*Forms         SQL*Menu
-----------------------------------------------------------------
HELP  CRT              IAPAPP         DMU_APPLICATION
      CRTBOX           IAPBLK         DMU_COMMAND_TYPE
      CRT_PRODUCTS     IAPFLD         DMU_MESSAGE
      CRT_TYPE         IAPMAP         MENU_INFO
      ESC              IAPSQLTXT      MENU_OPTION
      FUNCTIONS        IAPTRG         OPTION_HELP
      GOTO_LC          IAPTRIGGER     PARAMETER_INFO
      LORC             PARAMETER_MENU
                       USER_INFO
                       WORK_CLASS

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

                   ПРИВИЛЕГИИ АДМИНИСТРАТОРА БАЗЫ ДАННЫХ
  Пользователи SYS и SYSTEM имеют специальные привилегии в ORACLE.Также,как
и некоторые другие пользователи,которым явно предоставлен доступ с привиле-
гиями DBA к БД.Описание этих привилений смотри раздел "Пользователи с приви-
легиями DBA".

+       ЧАСТЬ II: ИСПОЛЬЗОВАНИЕ СРЕДСТВ АДМИНИСТРАТОРА БАЗЫ ДАННЫХ
  Эта часть содержит несколько глав,каждая из которых описывает программу
или утилиту ORACLE,которые используются прежде всего администратором БД.Рас-
сматриваются следующие утилиты:
 - IOR Для старта и остановки ORACLE (также приводится описание утилиты SGI).
 - ODS Утилита системной статистики.
 - AIJ Для записи операций над БД,для их восстановления в случае системных
       сбоев.
 - CRT Для модификации характеристик видеотерминалов.

  ГЛАВА 3.ИСПОЛЬЗОВАНИЕ УТИЛИТЫ IOR ДЛЯ ЗАПУСКА И ОСТАНОВКИ СИСТЕМЫ ORACLE
  В этой главе описываются различные опции программы IOR,которую администра-
тор БД использует для старта и остановки ORACLE.Одновременно с описанием
утилиты IOR приводится краткое изложение и описание параметров,содержащихся
в файле INIT.ORA,который читается и используется IOR программой.В главе так-
же приводится описание второй утилиты SGI.Администратор БД использует эту
утилиту для отображения распределения памяти для конкретного файла INIT.ORA.
  Не существует необходимости в том,чтобы ORACLE была
постоянно готова к использованию,когда работает ОС.Администратору БД предос-
тавлена возможность самому определять,когда система должна работать и быть
доступной пользователям.Так,например,если администратору БД необходимо уве-
личить размер BI файла,он может использовать ORACLE на короткое время для
того,чтобы изменить файл или выполнить какие-либо подобные действия.Програм-
ма,называемая IOR,используется для того,чтобы инициализировать (стартовать
сразу после установки),стартовать и останавливать ORACLE.Обычно администра-
тор БД является основным или даже единственным пользователем программы IOR.
Из-за того,что неправильное использование утилиты IOR м.б. опасно для сохра-
нения целостности БД,к ней д.б. допущен крайне ограниченный круг лиц.Контро-
ль за доступом к программе IOR обсуждается в руководстве по установке систе-
мы и в руководстве пользователю для конкретной ОС.
  Каждый раз,когда утилита IOR используется для того,чтобы стартовать или
инициализировать ORACLE,программа считывает файл INIT.ORA и изменяет конфи-
гурацию глобальной системной области SGA в соответствии с параметрами,уста-
новленными в файле INIT.ORA.Файл INIT.ORA и содержащиеся в нем параметры
описываются после обсуждения команды IOR.

+                      КОМАНДЫ И ПАРАМЕТРЫ УТИЛИТЫ IOR
  Синтаксис команды IOR приведен на рис.1.
+-----------------------------------------------------------+
| IOR { WARM | SHUT| CLEAR | INIT [ NOCONFIRM ] } [ DBA ] |
|  [ PFILE=  ] [ SHARED ] [ LIST ]  |
+-----------------------------------------------------------+
      Рис.1.Синтаксис команды IOR

  Команда IOR имеет следующие параметры:

 I[NIT] Инициализация БД и старт самостоятельных процессов ORACLE (Это иног-
        да называют "холодным" стартом,в отличие от "теплого" старта).
 W[ARM] Рестарт БД ORACLE путем запуска самостоятельных процессов.
 S[HUT] Проверяет,работают ли пользователи с БД и останавливает работу ORAC-
        LE,когда все пользователи завершают работу с системой.
 C[LEAR] Отключение от ORACLE всех активных пользователей и прекращение ра-
         боты системы без ожидания выхода пользователей из системы.Так как
         использование аргумента CLEAR только прекращает работу фоновых про-
         цессов,процессы пользователей д.б. остановлены на уровне ОС.
 PFILE=имя файла Задание имен файлов,отформатированных как файл INIT.ORA и
         содержащий параметры,используемые для старта ORACLE (по умолчанию
         имя файла INIT.ORA,см."файл параметров INIT.ORA").
 LIST    Запросить программу IOR выдать параметры,которые будут использованы
         для старта ORACLE (либо из файла по умолчанию,либо из файла,задан-
         ного параметром PFILE).Аргумент может использоваться либо самостоя-
         тельно,тогда программа не выполняет никаких других действий,либо
         совместно с аргументами I,W,S и С.
 NOCONFIRM Аргумент используется с опцией INIT для того,чтобы запросить про-
           грамму IOR инициализировать ORACLE без выдачи запроса пользовате-
           лю на подтверждения.
 DBA       Аргумент используется с опциями INIT и WARM,чтобы ограничить дос-
           туп к системе всем,кроме пользователей с привилегиями DBA (до вы-
           дачи следующей команды IOR W).
 SHARED    Только для систем с разделяемыми БД (таких как кластеризованные
системы,содержащие более одной системы ORACLE,установленные на VMS cluster)
и используется с аргументом WARM,что указывает на то,что система,работающая
в кластере,стартует в режиме разделения БД.

                     Инициализация ORACLE командой IOR INIT
  Опция INIT в команде IOR используется при первом старте системы ORACLE для
того,чтобы инициализировать файлы БД и стартовать самостоятельные процессы.
Все данные пользователей,которые хранятся к этому моменту в файлах БД,теря-
ются.Команда IOR I всегда восстанавливает DB и BI файлы системы в их перво-
начальное (пустое) состояние.В большинстве OC перед инициализацией использу-
ется утилита CCF для создания DB и BI файлов.После ввода команды IOR INIT на
терминале появляется запрос на подтверждение намерения проинициализировать
системы.Для подтверждения необходимо ответить полным словом YES,написанным
заглавными буквами:
  IOR: connecting to ORACLE V5.0.20
Initialize to entire database requested.All data will be lost.
- Confirm (YES/NO) ?

  Для того,чтобы подавить запрос или подтверждение,используется опция
NOCONFIRM.После завершения инициализации БД на терминал выдается сообщение

           DATABASE INITIALISED.

  Опция INITIALIZE применяется крайне редко.Обычно она используется в 2 слу-
чаях: при установке новой версии ORACLE и при реконфигурации файлов ОС.Если
опция INITIALIZE применяется к системе уже содержащей данные пользователей,
то прежде необходимо убедиться в том,что DB и BI файлы проэкспортированы и
продублированы (скопированы на магнитные носители).Все данные пользователей
в DB и BI файлах в процессе инициализации теряются.Информация о том,как про-
изводится системное копирование файлов содержится в руководстве по установке
и руководстве пользователю конкретной ОС.
  Применение опции INITIALIZE всегда превращает БД в систему с одним разде-
лом.Если необходимо воссоздать другие разделы (например,когда осуществляется
переход на более совершенную версию ORACLE),это необходимо сделать до импор-
та данных пользователей.

                      Старт ORACLE командой IOR WARM
  Обычный старт ORACLE (кроме самого первого,при инициализации) осуществляе-
тся командой IOR WARM (так называемый "теплый" старт).При этом способе запу-
ска системы открываются DB и BI файлы,так чтобы они были доступны пользова-
телю,под чьим именем был произведен "теплый" старт.Если данная ORACLE стар-
товала как система коллективного пользования,то запускаются 4 фоновых проце-
сса (ARH,BIW,BWR и CLN).Кроме того,при "теплом" старте отвергаются все неза-
вершенные транзакции и уничтожаются временные таблицы.Так как программа IOR
должна обработать незавершенные транзакции,нельзя прерывать программу IOR,
выполняющуюся с опцией WARM,после того,как она стартовала.Несмотря на то,что
обработка незавершенных транзакций может занять много времени,важно,чтобы
программа IOR завершила ее.
  Когда вызывается программа IOR с опцией WARM,на терминал выдаются следую-
щие сведения о компонентах глобальной системной области SGA:
  - количество байтов фиксированных данных
  - количество байтов переменных данных
  - содержимое BI буферов
  - содержимое DB буферов.

  Также выдаются сообщения,указывающие на нормальное течение процесса "теп-
лого" старта.Например: n temporary tables deleted instance n recovered
  Когда "теплый" старт успешно завершен,выдается сообщение:

   ORACLE WARM STARTED.

  До появления этого сообщения ни один пользователь не может войти в ORACLE.
Пользователь,пытающийся осуществить вход в систему в это время,увидит сооб-
щение:
           ORACLE initialization in progress

               Завершение работы ORACLE командой IOR SHUT
  Завершение работы командой IOR SHUT наиболее предпочтительный способ из 2
возможных.Команда IOR SHUT запрещает вход в ORACLE новым пользователям,одна-
ко никак не воздействует на процессы пользователей,еще работающими с ORACLE.
Программа IOR в этом случае ожидает,пока все пользователи выйдут из системы
и только затем завершает ее работу.Никакой новый пользователь не может полу-
чить доступ к системе после выполнения команды IOR SHUT.Если он попытается
сделать это,на его терминале появится сообщение:
              ORACLE shutdown on progress

  Все задержанные транзакции завершаются или отвергаются до завершения рабо-
ты системы,поэтому при следующем старте системы командой IOR W не нужно об-
рабатывать незавершенные транзакции.Во время завершения работы этим спосо-
бом,на терминале,с которого была введена команда IOR S,может появляться со-
общение о количестве пользователей,все еще находящихся в системе.Например:
 IOR: 5 users still active или IOR: No active transactions found

                 По завершении работы выдается сообщение:
 IOR: ORACLE shutdown complete

фоновые процессы останавливаются,а DB и BI файлы закрываются.
  Если необходимо прекратить процесс завершения работы этим способом потому,
что он длится слишком долго,необходимо использовать механизм прерывания ОС,
после этого нужно завершить работу ORACLE командой IOR CLEAR.

                Завершение работы ORACLE командой IOR CLEAR
  Из двух способов завершения работы ORACLE этот способ наименее предпочти-
телен.Команда IOR CLEAR останавливает фоновые процессы немедленно,не ожидая
выхода пользователей из системы.Пользователи,работающие с БД,не извещаются о
том,что ORACLE остановлена.Незавершенные транзакции будут утеряны при следу-
ющем "теплом" старте.

                        Опция DBA для команды IOR
  Если БД стартует или инициализируется с опцией DBA,то только пользователи
с привилегиями DBA могут войти в ORACLE.Это полезно во время операций сопро-
вождения БД,таких,как экспорт или импорт всей БД,когда администратор БД хо-
чет быть убежден в том,что он является единственным пользователем БД.
  Если пользователь,не имеющий привилегий DBA,попытается войти в систему,то
на своем терминале он увидит сообщение:

ERROR ORA-1035: ORACLE only available to users with DBA privilege

  Для того,чтобы предоставить возможность работы с ORACLE другим пользовате-
лям,необходимо завершить работу системы командой IOR SHUT,а затем произвести
"теплый" старт ORACLE без опции DBA.

                      Опция SHARED для команды IOR
  Опция SHARED применяется только для систем с разделяемыми БД,как в класте-
ризованных ORACLE,установленных на вычислительных комплексах VAX cluster.Па-
раметр SHARED д.б. задан для каждой системы,входящей в кластер,при ее стар-
те.Если одна какая-либо система стартовала без опции SHARED,то другие систе-
мы не могут стартовать после нее.При попытке старта системы будет выдано со-
общение:
           the database is in exclusive use by another ORACLE instance.

  Если какая-либо система стартовала с опцией SHARED,то другие системы,вхо-
дящие в кластер,должны также использовать опцию SHARED для того,чтобы успеш-
но стартовать ORACLE.Если какая-либо система попытается осуществить старт
без опции SHARED в то время,как другая система стартовала с ней,то ORACLE
предполагает,что вторая система желает быть самостоятельной и выдает сообще-
ние об ошибке:
               cannot start exclusively; in use by another ORACLE instance

 Когда БД с общим разделом д.б. расширена с помощью команды ALTER PARTITION,
ORACLE д.б. стартована без опции SHARED.Использование команды IOR в класте-
ризованных системах без опции SHARED полезно также при продолжительных опе-
рациях сопровождения,таких как экспорт всей БД.

+                       ФАЙЛ ПАРАМЕТРОВ INIT.ORA
  Каждый раз,когда IOR стартует систему ORACLT,она читает файл с параметра-
ми,которые задают характеристики системы.По умолчанию имя этого файла
INIT.ORA.Однако,с помощью опции команды IOR можно задать и другое имя.Если
другое имя не задано,то предполагается файл INIT.ORA.Расположение этого фа-
йла на магнитных носителях зависит от ОС.В этом руководстве при ссылках на
файл параметров употребляется ININ.ORA,хотя в конкретных случаях могут испо-
льзоваться и другие имена.
  Параметры,содержащиеся в файле INIT.ORA,специфицируют файлы,используемые
ORACLE,и управляют ресурсами,которые прямо влияют на производительность
ORACLE.Например,в файле содержатся параметры,которым д.б. присвоены число-
вые значения или имена,необходимые для того,чтобы стартовать систему и пара-
метры,которые определяют количество записей,хранящихся в глобальной области
системы SGA.Настраивая определенные параметры,можно увеличивать или уменьша-
ть размер SGA и таким образом влиять на производительность ORACLE.
  Пример фрагмента файла INIT.ORA приведен на рис.2.В этом примере имена DB
и BI файла заданы как ORACLE.DB и ORACLE.BI соответственно (Соглашение об
именах файлов варьируется в зависимости от OC.Подробная информация о специ-
фикации файлов приведена в руководстве по установке системы и в руководстве
пользователя конкретной OC).
  ------------------------------------------+
  |   processes   30                        |
  |   buffers   50                          |
  |   database   oracle.dbs                 |
  |   before_imfage  oracle.bi              |
  |   columns   250                         |
  |   tables   50                           |
  |   enqueues   200                        |
  |   users    30                           |
  ------------------------------------------+
    Рис.2.Пример файла INIT.ORA

  Файл INIT.ORA,схожий с приведенным на рис.2,поставляется на дистрибутивной
ленте.Его параметры соответствуют начальной установке ORACLE.После того,как
система будет введена в действие и будет приобретен некоторый опыт работы с
ней,можно рассмотреть вопрос об изменении некоторых параметров.Дистрибутив-
ные значения параметров файла INIT.ORA могут отличаться от значений по умол-
чанию.
  Дистрибутивные значения параметров приведены в руководстве по устамновке и
в руководстве пользователя для каждой OC.Значения по умолчанию встроены в
программу IOR и используются в случаях,когда соответствующий параметр не вк-
лючен в файл INIT.ORA.Если эти 2 значения различны и используется дистрибу-
тивный файл INIT.ORA,система будет использовать дистрибутивные значения.

                         Настроечные параметры INIT.ORA
  Некоторые параметры файла INIT.ORA просто задают имена,например,имена DB и
BI файлов.Другие параметры указывают на ограничения,например,параметру
PROCESSES присваивается число,указывающее на максимальное количество процес-
сов,которые могут иметь доступ к ORACLE одновременно.Некоторые параметры
влияют на производительность системы.Например,значение параметра TABLES оп-
ределяет размер кэш-буфера для таблиц,то есть сколько определений м.б. одно-
временно размещено в кэш-буфере.Если определение таблицы будет располагаться
в оперативной памяти (в кэш-буфере),производительность будет выше,чем при
его отсутствии там.
  Параметры,приведенные на рис.3,называются переменными параметрами,потому
что размер глобальной области системы зависит от их значений.Эти параметры
наиболее важны для настройки системы.Некоторые переменные параметры влияют
на производительность,но не навязывают жеестких ограничений на диапазон из-
менения.Например,большие значения параметра BUFFERS обычно улучшают произво-
дительность,меньшие только замедляют работу системы.Некоторые переменные па-
раметры также устанавливают ограничения на допустимый диапазон значений,нап-
ример, если значение параметра PROCESSES равно 10,одиннадцатый процесс не
будет допущен в систему.
   ------------------------------------------+
   | ПЕРЕМЕННЫЕ    ОГРАНИЧИВАЮЩИЕ            |
   | ПАРАМЕТРЫ     ПАРАМЕТРЫ                 |
   ------------------------------------------+
   | BUFFERS     TABLE_ACCESSES              |
   | COLUMNS     TABLE_HANDLES               |
   | TABLES     ENQUEUES                     |
   | TABLENAMES    OPEN_CURSORS              |
   |       PROCESSES                         |
   |       TRANSACTIONS                      |
   |       USERS                             |
   ------------------------------------------+
   Рис.3.Переменные и ограничивающие параметры

  Увеличение значений переменных параметров может улучшить производительнос-
ть системы,но также увеличиывает и размеры области SGA.В операционной среде
с виртуальной памятью слишком большая область SGA может значительно ухудшить
производительность из-за увеличения обмена между оперативной и внешней памя-
тью (свопиита).Параметры OC,управляющие рабочей областью виртуальной памяти,
должны устанавливаться с учетом размеров SGA.Значения параметров,которые
улучшат производительность системы,зависят от характеристик БД,таких как ст-
руктура и расположение данных,сколько пользователей или программ работают с
ней одновременно.Поэтому,если известно,как используется система и как влияют
параметры,можно изменить значения переменных параметров,чтобы проверить,улу-
чшится ли при этом производительность системы.
  В последующем описании "число" означает максимальное количество записей,
которое ресурс может иметь в SGA в каждый момент времени (то есть располага-
ться в опреативной памяти).Когда значение достигает максимума,наиболее давно
используемая запись замещается новой записью (а старая запись теперь стано-
вится доступной т олько с магнитного диска).Необходимо также отметить,что
числа в файле INIT.ORA являются глобальными значениями,то есть используются
всеми пользователями,если не оговорено другое.
  Например,если значение параметра TABLES в файле INIT.ORA равно 50,то в об-
ласти SGA может храниться 50 определений таблиц.В том случае,если запрашива-
ется определение 51-ой таблицы,наиболее старое определение таблицы замещает-
ся определением 51-ой таблицы.Даже если 3 пользователя используют таблицу
SCOTT.EMP,требуется только одна запись в параметре TABLES.Если параметр име-
ет слишком маленькое значение,если он достиг максимума,выдается сообщение об
ошибке.Например:
insufficient enqueues
out of processes
insufficient table cache entries
insufficient tablename cache entries

  Если сообщение периодически повторяется,можно избежать этого,завершив ра-
боту ORACLE командой IOR SHUT,увеличив затем соответствующий параметр в фай-
ле INIT.ORA и перестартовав ORACLE.В противоположном случае Вы можете подож-
дать немного и повторить жулаемую операцию,когда система не будет так занята.

                          Параметры,зависимые от ОС
  Это руководство содержит очень подробное описание параметров,содержащихся
в файле INIT.ORA.Однако многие значения параметров или диапазонов их значе-
ний зависят от ОС.Например,параметр BUFFERS указывает на количество буферов
данных в основной памяти,однако размер этих буферов зависит от ОС.Конкретные
значения этих параметров приводятся в руководстве по установке системы и в
руководствах пользователя для конкретных ОС.
  Необходимо отметить,что многие из параметров в файле INIT.ORA принять не
следует.

                    Подробное описание параметров INIT.ORA
  В разделе приводится подробное описание каждого параметра файла INIT.ORA.В
приложении D содержится краткое описание параметров файла INIT.ORA.

                                  AI_BUFFERS
  Этот параметр указывает на количество буферов для журнала протоколов.По
умолчанию оно равно 3 и обычно не изменяется.Этот параметр не действует в
ORACLE,версия 5.0.

                                  AFTER_IMAGE
  Этот параметр задает директорию или имя файлов для файлов с журналом про-
токолов.Значение по умолчанию и дистрибутивное значение параметра не задают-
ся.Задание этого параметра означает,что будет вестись журнал протоколов ра-
боты системы.Этот параметр может появляться в файле INIT.ORA неоднократно,
если используется несколько журнальных файлов.Журнальные файлы используются
в том порядке,в каком они появляются в файле INIT.ORA.Более подробная инфор-
мация о ведении протокольного журналда содержится в главе 5 "Протоколирова-
ние работы с БД".

                                  AI_FILE_SIZE
  Этот параметр задает размер журнальныхх файлов в блоках ORACLE.Если он ус-
тановлен в 0 или не задан,то протокол записывается в файле фиксированного
размера с именами,заданными в параметре AFTER_IMAGE.Если установлено ненуле-
вое значение параметра,создаются журнальные файлы с именами в форме
SQNnnnnnn.AIJ,чьи размеры задаются числом килобайт в директории (ях),указан-
ных в параметре AFTER_IMAGE.По умолчанию значение равно 0.Более подробная
информация о ведении протокольного журнала содержится в главе 5 "Протоколи-
рование работы с БД".

                                  AI_WARN_PCNT
  Когда AIJ файл заполняется на заданное количество процентов,на консоль
оператора (OPER1 в ОС VMS) посылается предупреждфющее сообщение.По умолчанию
параметр равен 0.Если все заданные журнальные файлы заполняются или перепол-
няется директория при ведении протокола,необходимо завершить работу ORACLE
командой IOR SHUT,произвести копирование и обновление AIJ файлов и затем пе-
рестартовать ORACLE.Более подробная информация о ведении протокольного жур-
нала содержится в главе 5 "Протоколирование работы с БД".

                                  AUDIT_TRAIL
  Этот параметр разрешает или запрещает запись в файл ревизионного контроля
за работой с БД.Если задается целое ненулевое число,контроль устанавливает-
ся,если задан 0 или значение не установлено,то контроль запрещен.Значение
по умолчанию равно 0.Предложение языка SQL AUDIT может использоваться неза-
висимо от того,задано значение этого параметра или нет.
Более детально этот вопрос рассматривается в разделе "Ревизионный контроль".

                                 BEFORE_IMAGE
  Этот параметр указывает имя BI файла.Файл д.б. создан (для большинства ОС
с помощью утилиты CCF).Значение параметра по умолчанию зависит от ОС.

                                  BI_BUFFERS
  Этот параметр указывает количество буферов для BI файла.Значение параметра
по умолчанию зависит от ОС и не должно изменяться.

                                   BI_HIGH
  Этот параметр используется в системах с разделенными БД,таких как на осно-
ве ОС VMS для VAX cluster.Параметр указывает на последний блок области BI
файла в данной ORACLE из кластера.По умолчанию параметр равен последнему
блоку BI файла.Этот параметр задается во время установки системы с разделе-
нием БД,но м.б. модифицирован администратором БД.В ОС VMS он автоматически
устанавливается во время выполнения CREINIT.COM (BI_LOW указывает на началь-
ный блок).

                                   BI_LOW
  Этот параметр используется в системах с разделенными БД,таких как на осно-
ве ОС VMS для VAX cluster.Параметр указывает на начальный блок области BI
файла в данной ORACLE из кластера.По умолчанию параметр равен начальному
блоку BI файла.Этот параметр задается во время установки системы с разделе-
нием БД,но м.б. модифицирован администратором БД.В ОС VMS он автоматически
устанавливается во время выполнения CREINIT.COM (BI_LOW указывает на послед-
ний блок).

                                  BLOCK_SIZE
  Этот параметр указывает на размер блока БД.Значение по умолчанию различно
для различных ОС и не должно изменяться.В большинстве систем используется
один из 2 размеров: либо 2048 байт (на миникомпьютерах,таких как DEC
VAX/VMSX,Data General AOS/VS и в среде UNIX),либо 4096 байт (IBM VM/SP или в
среде MVS).

                                   BUFFERS
  Этот параметр задает количество кэш-буферов данных в основной памяти (Раз-
мер буфера данных зависит от ОС,например,для VMS он равен 2К).По умолчанию
параметр равен 50.Модифицированные блоки переписываются на магнитный диск,
когда выполняются опреации COMMIT или ROLLBACK,выход пользователя из системы
или операции со словарем данных (DDL),либо когда переполняется кэш-буфер.
Несмотря на то,что не существует ограничение на максимальное значение этого
параметра,оно непосредственным образом влияет на размеры области SGA.Чем бо-
льше количество буферов,тем более вероятно,что данные будут найдены в опера-
тивной памяти и соответственно ORACLE будет вынуждена выполнить меньшее ко-
личество операций ввода-вывода.

                               BUFF_HASH_BKTS
   Этот параметр задает количество записей в кэшированной таблице,используе-
мой для поиска буферов ORACLE.Обычно этот параметр не задается.Если он опу-
щен,то его значение вычисляется,используя значение параметра BUFFERS.Значе-
ние параметра изменяется от 1 до 32,в зависимости от значения параметра
BUFFERS.Если значение задается,оно д.б. выравнено по степени 2.Для большинс-
тва систем выбранное значение д.б. таким,чтобы было справедливо следующее
правило: отношение значения параметра BUFFERS к значению BUFF_HASH_BKTS д.б.
от 4 до 8:

                                  BUFFERS
     4 <= ---------------- <= 8
                               BUFF_HASH_BKTS
  Меньшие значения этого отношения приводят к немного более быстрому поиску
за счет использования алгоритмов случайного поиска (что может оказаться бо-
лее эффективным в очень больших БД).Большие значения этого отношения приво-
дят к небольшому замедлению поиска.Несмотря на то,что значение отношения 1
также приемлемо,оно м.б. применено только к очень маленьким системам.

                                  CLUSTERS
  Этот параметр задает количество определений кластеров,содержащихся в
кэш-буфере SGA.Он устанавливается равным количеству различных кластеров,дос-
туп к которым м.б. затребован одновременно.Чем больше размер кэш-буфера,тем
более вероятно,что ORACLE найдет определение кластера в основной памяти без
обращения к словарю данных.Это снижает затраты времени на выполнение грамма-
тического разбора.Значение параметра по умолчанию равно 20.При задании зна-
чения параметра необходимо учитывать еще один кластер используемого словарем
данных.Значение,используемое в параметре CLUSTERS,влияет на размер области
SGA несмотря на то,что размер определения кластера невелик.

                                  COLUMNS
  Этот параметр задает количество определений колонок (таблиц,кластеров,вир-
туальных таблиц),содержащихся в кэш-буфере SGA и доступ к которым м.б. зат-
ребован одновременно.Его значение д.б. достаточно большим для очень больших
(широких) таблиц.Значение по умолчанию равно 350 и вычисляется как сумма
значений параметров CLUSTERS и TABLES,умноженная на 5.При изменении значения
параметра COLUMNS необходимо учитывать еще 50 колонок в таблицах словаря
данных.Значение параметра COLUMNS влияет на размер области SGA.Чем больше
размер кэш-буфера,тем более вероятно,что ORACLE найдет определение колонки в
основной памяти и улучшит производительность.

                                  CONSOLE
  Этот параметр в настоящее время не используется.

                                CONTEXT_INCR
  Этот параметр указывает на количество байтов,на которое увеличивается раз-
мер области контекста,когда она заполнена и требует большего пространства
памяти.По умолчанию значение параметра равно 4096 байтам.Минимальное значе-
ние равно 1024,а максимальное обычно равно 32768,но зависит от ОС.

                               CONTEXT_SIZE
  Этот параметр задает начальный размер области контекста.Минимальное значе-
ние равно 1024,а максимальное обычно равно 131072,но зависит от ОС.

                                 DATABASE
  Это обязательный параметр задает имя первичного файла БД (DB файл),который
связан с первым файлом раздела SYSTEM.Файл д.б. создан (в большинстве ОС
утилитой CCF.Значение по умолчанию зависит от ОС.

                              DETACHED_DUMPS
  Этот параметр н........................................пользования,таких
как в среде MS-DOS.Параметр содержит имя логической или физической директо-
рии,куда записывается содержимое памяти (длины) для фоновых процессов.Значе-
ние по умолчанию зависит от ОС.

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

                                   FILES
  Этот параметр обозначает максимальное количество файлов БД,которые м.б.
открыты в области SGA.Каждый раздел и последующие расширения раздела рассма-
триваются как файл.Например,одному файлу в одном разделе соответствует одна
запись в области SGA.Значение параметра по умолчанию равно 5.Максимальное
значение параметра зависит от ОС.

                                FIXED_DATE
  Этот параметр,используемый обычно только для тестирования,фиксирует внут-
реннюю системную дату SYSDATE ORACLE.Формат параметра YYYY,MM,DD,HH,MM,SS.
Например,для того,чтобы установить полдень 1 апреля 1986 года,параметр д.б.
введен как 1986,4,1,12,0,0.Значение параметра по умолчанию равно 0,что озна-
чает,что используется текущая дата,используемая ОС.

                                INSTANCES
  Применима только для операций с разделяемыми БД в таких системах,как
VAX/VMS clusters.Этот параметр указывает во время инициализации с использо-
ванием команды IOR I максимальное количество ORACLE,которые будут работать с
этой БД.Значение параметра по умолчанию и максимальное равно 16.Обычно этот
параметр не указывается.Более подробная информация для пользователей ОС VMS
содержится в руководстве ORACLE на DEC VAX/VMS и в руководстве пользователя
по этой ОС.

                              INSTANCE_NAME
  Параметр применяется только для систем с разделяемыми БД (таких как
VAX/VMS clusters).Этот параметр указывает на отдельную установку ORACLE.На
ОС VMS процедура CREINIT.COM устанавливает имя конкретной системы,добавляя к
идентификатору SYSTEM_ идентификатор системы.Например:
  SYSTEM_S
  Этот параметр обычно не задается.

                                 LANGUAGE
  Этот параметр позволяет указать в системе язык,на котором она должна рабо-
тать.Например,"ENGLISH" или "FRENCH".По умолчанию этот параметр равен 0,но
он м.б. приравнен к любой символьной строке длиной до 15 символов.Параметр
передает название языка прикладной программе,используя функцию USERENV.В
языке SQL значение функции USERENV('LANGUAGE') является названием языка,ука-
занного в параметре "LANGUAGE" файла INIT.ORA,преобразованных в заглавные
буквы.В настоящее время этот параметр служит только для определения алфавит-
ной последовательности и форматирования дат.Так как ORACLE не интерпретирует
строку параметра,смысл различных значений определяется пользователем.

                               OPEN_CURSORS
  Этот параметр указывает на максималбное количество курсоров,которое разре-
шено открыть каждому пользователю.Этот параметр не влияет на размер области
SGA.Значение по умолчанию равно 50,а правильный диапазон его изменения от 10
до 255.

                                ОPEN_LINKS
  Этот параметр означает максимальное количество имен БД,которое может испо-
льзовать одновременно пользователь в своей сессии.Так,например на этапе гра-
мматического разбора выявится грамматическая ошибка,если количество имен ра-
зличных БД,заданных в курсорах пользователя,превысит это ограничение.Значе-
ние этого параметра по умолчанию равно 4.

                                PROCESSES
  Этот параметр устанавливает максимальное количество параллельно выполняю-
щихся процессов ORACLE.Для того,чтобы рассчитать это значение,необходимо
учесть количество процессов,работающих с ORACLE,и прибавить к этому число 5
(по одному на каждый фоновый процесс,если система коллективного пользования
и один для программы IOR).Максимальное значение параметра и значение его по
умолчанию зависит от ОС.Минимальное значение для систем индивидуального по-
льзования,таких как MS-DOS,равно 2.Значение параметпа,установленное для про-
цессов,используется для вычисления некоторых других параметров.

                               READ_BLKS_REQ
  Этот параметр не применяется для систем индивидуального пользования,таких
как MS-DOS.Этот параметр задает количество блоков,которые м.б. запрошены в
одном запросе на чтение.Правильный диапазон применения от 0 до 255.Значение
по умолчанию равно 10 или равно значению параметра READ_BLKS_TOT в зависимо-
сти от того,что меньше.Обычно этот параметр не изменяется.

                             READ_BLKS_TOT
  Этот параметр не применяется для систем индивидуального пользования,таких
как MS-DOS.Этот параметр задает общее количество блоков,которые м.б. затре-
бованы невыполненными запросами на чтение фоновых процессов в любое время.
Значение по умолчанию устанавливается равным половине значения параметра
BUFFERS.Рекомендуется не задавать этот параметр.

                             READ_REQUESTS
  Этот параметр не применяется для систем индивидуального пользования,таких
как MS-DOS.Этот параметр устанавливает максимальное количество невыполненных
параллельных запросов на чтение фоновых процессов,которые д.б. обработаны
процессом ARH.Значение по умолчанию равно либо значению параметра PROCESSES,
либо 5,в зависимости от того,что больше.Рекомендуется не задавать этот пара-
метр.

                             SINGLE_PROCESS
  Если этот параметр не равен 0,ORACLE будет работать как система индивидуа-
льного пользования без самостоятельных фоновых процессов.Значение по умолча-
нию равно 0.Обычно этот параметр не изменяется.

                              SORT_AREA_SZ
  Этот параметр задает размер в байтах физической памяти,доступной для сор-
тировки.Например,на ЭВМ VAX с 8 мегабайтами физической памяти,из которых,как
предполагается,1/8 м.б. выделена для процесса сортировки и,ожидается,что од-
новременно может выполняться 4 процесса сортировки,можно установить значение
параметра равным 8192/8/4 = 256 К (соответственно необходимо перевести зна-
чение в байты).Как правило,больший размер памяти может увеличить скорость
сортировки только очень больших массивов.Значение по умолчанию зависит от ОС
и обычно удовлетворяет всем операциям с БД.Необходимость настройки этого па-
раметра может возникнуть только при создании очень больших индексов.Напри-
мер,если к БД имеет доступ только один процесс,как это м.б. при импорте всей
системы,то увеличение этого параметра увеличит скорость импорта,особенно при
выполнении команды CREATE INDEX.

                               SORT_FINAL_RA
  Этот параметр указывает значение фактора глубины чтения наперед во время
последней сортировки.Значение по умолчанию зависит от ОС и не должно изменя-
ться.

                               SORT_MERGE_RA
  Этот параметр указывает значение фактора глубины чтения наперед во время
промежуточной сортировки.Значение по умолчанию зависит от ОС и не должно из-
меняться.

                               SORT_POOL_SZ
  Этот параметр больше не используется.

                               SORT_READ_FAC
  Этот параметр указывает значение фактора мультиблочного чтения при сорти-
ровке.Значение параметра обычно не изменяется.

                               SORT_SPCMAP_SZ
  Этот параметр задает размер в байтах схемы распределения памяти для сорти-
ровки в области контекста.Значение по умолчанию зависит от OC и обычно удов-
летворяет все операции над БД.Только в случае,если создаются очень большие
индексы,может возникнуть необходимость настройки этого параметра.Программа
сортировки автоматичемки увеличивает пространство под схему распределения
памяти,когда это необходимо.Однако нет необходимости делать это,если задачей
настройки является более рациональное использование внешней памяти на магни-
тных дисках.Программа срортировки оптимально использует дисковую память,если
значение параметра SORT_SPCMAP_SZ вычислено по формуле:
  [(количество_сортируемых_байтов)/(размер_области_сортировки)] + 64,

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

  (количество_записей)*[сумма_средних_размеров_колонок +
       + (2 * (количество_колонок))],

где "количество колонок" включает в себя список колонок в предложениях
SELECT с ORDER BY,список колонок в предложениях SELECT с ORDER BY и список
ключей в предложениях CREATE INDEX,а также колонки в предложениях GROUP BY и
ORDER BY,не упомянутых в списках колонок предложений SELECT.Значение задает-
ся в байтах и д.б. достаточно большим.

                                    SQL
  Этот параметр задает имя файла,который используется во время инициализации
ORACLE командой IOR INIT.Значение параметра по умолчанию SQL.ORA.

                               TABLE ACCESSES
  Этот параметр задает количество использующихся таблиц.Значение определяет-
ся из расчета по 1 на каждую различную таблицу для всех курсоров в системе.
Например,если 60 различных процессов имеют доступ к таблице DEPT, значение
параметра TABLE_ACCESSES равно 1.Значение по умолчанию зависит от значения
параметра PROCESSE и находится в диапазоне от 8 до 208 для количества про-
цессов от 1 до 40.

                              TABLE_HANDLES
  Этот параметр задает количество таблиц,одновременно используемых всеми ку-
рсорами.Значение параметра определяется из расчета по 1 на каждое обращение
курсора к таблице,плюс 1 на каждую модификацию таблицы курсором.Например,ес-
ли 60 процессов имеют по 3 открытых курсора в таблицу DEPT,параметр д.б. ра-
вен 180 (но значение TABLE_ACCESSES м.б. равным 1),или если пользователь вы-
полнял следующий запрос:
                          UPDATE EMP
                          SET SAL = SAL * 1.15
                          WHERE DEPTNO IN
                          SELECT DEPTNO
                          FROM DEPT
                          WHERE LOC = 'NEW YORK'

при этом значение параметра TABLE_ACCESSES буде равен 2,а параметра
TABLE_HANDLES равен 3.Если бы этот запрос одновременно выполняли бы 2 поль-
зователя,то значение параметра TABLE_ACCESSES осталось бы равным 2,а значе-
ние параметра TABLE_HANDLES стало бы равным 6.Значение параметра по умол-
чанию равно 8 на процесс,как минимум 24.

                              TABLE_HSH_BKTS
  Этот параметр задает количество записей в хэш-таблице,используемой для по-
иска таблиц БД.Предпочтительно этот параметр не задавать.Если параметр опу-
щен,он вычисляется на основе значения параметра TABLE_ACCESSES.язначение по
умолчанию изменяется в диапазоне от 1 до 32 в зависимости от значения
TABLE_ACCESSES.Если все-таки значение параметра задается,оно д.б. выравнено
по степени 2.Для большинства систем значение должно удовлетворять следующему
соотношению:
                   TABLE_ACCESSES
             4 <= ---------------- <= 8,
                   TABLE_HSH_BKTS

то есть отношение TABLE_ACCESSES к TABLE_HSH_BKTS д.б. между 4 и 8.

                              TABLENAMES
  Этот параметр задает максимальное количество таблиц,виртуальных таблиц и
синонимов,которые м.б. одновременно помещены в кэш-буфер системной глобаль-
ной области SGA.Этот кэш-буфер связи между именами объектов (таблицами,вир-
туальными таблицами или синонимами) и идентификаторами таблиц.По умолчанию
значение параметра равно 80.При изменении значения необходимо учитывать,что
для словаря данных требуется 10 записей в этот буфер.Чем больше значение,тем
более вероятно,что ORACLE найдет в кэш-буфере запрашиваемое имя объекта,что
ускорит грамматический разбор предложения SQL.

                                  TABLES
  Этот параметр задает максимальное количество записей в кэш-буфере описаний
таблиц.По умолчанию значение этого параметра равно 50.Чем больше значение,
тем более вероятно,что ORACLE найдет в кэш-буфере описание запрашиваемой та-
блицы,что ускорит грамматический разбор предложения SQL.При изменении значе-
ния необходимо учитывать,что для словаря данных требуется 10 записей в этот
буфер.Значение параметра должно отражать максимальное количество таблиц и
виртуальных таблиц,используемых ORACLE одновременно.

                                TEMP_TABLES
  Этот параметр задает количество временных таблиц,которые ORACLE создает и
сопровождает после старта командой IOR WARM.Значение этого параметра не ука-
зывает на максимальное количество временных таблиц,хотя система старается
удалить,как только предоставится возможным,все временные таблицы,созданные
сверх этого ограничения.При старте ORACLE командой IOR WARM все временные
таблицы уничтожаются.При необходимости,после старта системы они создаются
вновь.По умолчанию значение параметра равно одной десятой либо от значения
параметра TABLE_HANDLES,либо от значения параметра TABLE_ACCESSES,в зависи-
мости от того,что меньше.Параметр может иметь нулевое значение.

                                TRANSACTIONS
  Этот параметр задает максимальное количество параллельных транзакций.Более
подробная информация о транзакциях содержится в разделе "Логические единицы
работы (транзакции)".Значение параметра по умолчанию равно значению парамет-
ра PROCESS,умноженному на 5.

                                 USERINIT
  Этот параметр задает имя файла,который д.б. выполнен после файла с именем,
указанным в параметре SQL.По умолчанию имя равно пустой строке.Если имя за-
дано,то предполагается,что этот файл содержит предложения языка SQL.Предпо-
лагается также,что выполнение этих предложений происходит от пользователя
SYSTEM с паролем MANAGER.Файл не может содержать каких-либо предложений
CONNECT.Во многих случаях выполнение файла CATALOG.ORA (файл,создающий вир-
туальные таблицы словаря данных при инициализации системы) производится ссы-
лкой на него из файла,задаваемого параметром USERINIT.

                                   USERS
  Этот параметр задает максимальное количество имен пользователей,которые
м.б. помещены в кэш-буфер (а не максимальное количество одновременно работа-
ющих пользователей).Он отражает ожидаемое максимальное количество пользова-
телей,на которых м.б. ссылки в предложениях языка SQL.Имя пользователя хра-
нится в одном экземпляре.Значение по умолчанию равно 30.Чем больше значение,
тем лучше производительность системы при использовании большого количества
имен пользователей.Однако значение этого параметра не должно превышать зна-
чение параметра PROCESSES.

                                 USER_DUMPS
  Этот параметр указывает файл или директорию,в которые при возникновении
ошибок записываются дампы процессов пользователей (таких как IAP,ODL,RPT и
т.д.).Значение по умолчанию зависит от ОС.

+                ИСПОЛЬЗОВАНИЕ ДРУГОГО ФАЙЛА ПАРАМЕТРОВ
  Изменить файл параметров,используемый при старте ORACLE,легко.Каждый раз,
когда система стартует,утилита IOR ищет либо файл,указанный при старте в
команде IOR,либо файл с именем INIT.ORA.Поэтому можно испольльзовать различ-
ные файлы с той же структурой,что и у файла INIT.ORA,но с другими именами.
Кроме того,можно изменять значения параметров в файле INIT.ORA до тех пор,
пока не будет достигнут желаемый результат.
  Для того,чтобы избежать неудачи при изменении значений в файле параметров
предпочтительно не производить изменений в файле,с помощью которого система
стартована в последний раз.Перед редактированием файла рекомендуется завер-
шить работу ORACLE командой IOR SHUT и перестартовать систему.В противном
случае можно создать и отредактировать совершенно другой файл параметров,ос-
тановить систему и перестартовать ее с новым файлом.Для старта необходимо
использовать команду IOR с опцией WARM для того,чтобы система была настроена
в соответствии с новыми параметрами.

            ОШИБКИ,ВОЗНИКАЮЩИЕ ВО ВРЕМЯ РАБОТЫ УТИЛИТЫ IOR
  Ошибки,возникающие при работе утилиты IOR,чаще всего являются ошибками до-
ступа к файлам,когда ORACLE не может найти DB или BI файлы или получить к
ним доступ.Так как ошибки этого класса связаны с особенностями ОС,то за пе-
речнем возможных ошибок и рекомендуемых действий следует обратиться к Руко-
водству по установке и Руководству пользователя конкретной ОС.

                                 УТИЛИТА SGI
  Утилита SGI представляет собой простую утилиту для администраторов БД для
проверки размеров системной глобальной области SGA,сгенерированной с исполь-
зованием различных файлов параметров.Утилита SGI выдает на терминал размеры
SGA,которые будут сгенерированы файлом параметров.При этом указываются раз-
меры области фиксированных и переменных данных.
  Размеры областей SGA зависят от значений различных параметров.Из почти 50
параметров,которые м.б. заданы в файле INIT.ORA,многие требуют памяти в SGA
(см.рис.3).Некоторые параметры требуют значительно больше памяти,чем другие.

                             Вызов утилиты SGI
  Утилита SGI вызывается командой,синтаксис которой приведен ниже:
   SGI [PFILE=файл_параметров] [LIST] DETAIL]
где
  файл_параметров - имя файла параметров для ORACLE.
Если не указано,предполагается INIT.ORA.Если задано другое имя файла,его со-
держимое д.б. записано в том же формате,что и у дистрибутивного файла
INIT.ORA для данной системы.

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

                            Вывод утилиты SGI
  По умолчанию утилита SGI выдает имя файла параметров и размеры разделов
области SGA в байтах.На рис.4 приведен пример листинга утилиты SGI по умол-
чанию для ОС IBM VM/SP.
----------------------------------------------------------------+
|sgi pfile=init.ora                                             |
|                                                               |
|SGI: System global area (SGA) is 327212 (320K) bytes composed of
| 2172 bytes of fixed data                                      |
| 71088 bytes of variable data,                                 |
| 40960 bytes of before image buffers,and                       |
| 212922 bytes of buffers.                                      |
|R; T=0.04/0.11 10:16:06                                        |
----------------------------------------------------------------+
   Рис.4.Пример листинга утилиты SGI по умолчанию

  Пример листинга,выдаваемого утилитой SGI с опцией LIST,приведен на рис.5
(для IBM VM)
---------------------------------------------------------------+
| sgi pfile=init.ora list                                      |
|                                                              |
| Parameter file: INIT.ORA                                     |
|                                                              |
| Parameters used to start system:                             |
|  after_image  :                                              |
|  ai_file_size :  0                                           |
|  ai_warn_pcnt :  0                                           |
| * audit_trail  :  1                                          |
| * before_image : *.1F1.4700.0992.EXEC ORDISKS ACCESS BI.     |
|  bi_buffers  :  5                                            |
|  bi_low   :  0                                               |
|  bi_high   :  0                                              |
|  block_size  : 4096                                          |
| * buffers   : 52                                             |
|  buff_hash_bkts :  8                                         |
|  clusters  : 20                                              |
| * columns   : 400                                            |
|  console   :                                                 |
|  context_incr : 4096                                         |
| * context_size : 16384                                       |
| * database  :*.1F1.0.4700.EXEC ORDISKS ACCESS DATABASE       |
|  detached_dumps :                                            |
| * enqueues  : 200                                            |
| * files   : 10                                               |
|  fixed_date  :                                               |
|  instance_name :                                             |
|  instances  : 16                                             |
| * open_cursors : 150                                         |
| * processes  : 10                                            |
|  read_requests : 10                                          |
|  read_blks_tot : 26                                          |
|  read_blks_req : 10                                          |
|  sort_area_sz : 65536                                        |
|  sort_pool_sz :  0                                           |
|  sort_merge_ra :  1                                          |
|  sort_final_ra :  1                                          |
|  sort_spcmap_sz : 256                                        |
|  sort_read_fac : 10                                          |
|  signal_process :  0                                         |
| * sql    : SGL.ORA                                           |
| * tables   : 150                                             |
|  tablenames  : 80                                            |
| * table_handles : 150                                        |
|  table_accesses : 80                                         |
|  table_hsh_bkts : 16                                         |
|  temp_tables  :  8                                           |
|  transactions : 50                                           |
|  user_dumps  :                                               |
|  users   : 30                                                |
|  userinit  :                                                 |
---------------------------------------------------------------+
 Рис.5.Пример листинга утилиты SGI с использованием опции LIST

  Для получения более подробной информации о разделе переменных данных испо-
льзуется команда SGI с опцией DETAIL.Опция DETAIL позволяет оценить размеры
разделов SGA,выделенные для отдельных параметров или групп параметров.Нужно
быть осторожным в выводах при анализе этой информации по следующим причинам.
Во-первых,количество байтов,требуемых некоторыми параметрами,зависит от ОС.
Во-вторых,в раздел SGA могут включаться избыточные байты для каждого параме-
тра,поэтому разделив общий размер раздела на количество рассматриваемых обЪ-
ектов (процессов,пользователей,таблиц и т.д.),можно получить ошибочный резу-
льтат.Тем не менее,этот листинг может помочь в оценке относительных размеров
области SGA и тем самым улучшить контроль за распределением памяти.На рис.6
приведен пример выдачи утилиты SGI с опцией DETAIL.
--------------------------------------------------------------+
| sgi pfile=init.ora detail                                   |
|                                                             |
| SIZE  IOR Parameter                                         |
| ======== =============                                      |
|  660 after_image                                            |
|  308 read_requests                                          |
|  112            |
|  2548 buffers,buff_hash_bkts                                |
|  19200 columns                                              |
|  3840 table_names                                           |
|  1200 users                                                 |
|  2600 files                                                 |
|  320 clusters                                               |
|  8400 tables                                                |
|  4800 enqueues                                              |
|  480 (cache buffer ownership)                               |
|  1800 transactions                                          |
|  1600 processes (transaction framing)                       |
|  3440 processes (control blocks)                            |
|  19664 table_handles,table_requests                         |
|   0 fixed_date                                              |
|   0                   |
|  116                 |
| SGI: System global area (SGA) is 327212 (320K) bytes compose|
|  2172 bytes of fixed data                                   |
|  71088 bytes of variable data,                              |
|  40960 bytes of before image buffers,and                    |
| 212992 bytes of buffers.                                    |
| R; T=0.06/0.17 10:12:13                                     |
--------------------------------------------------------------+
 Рис.6.Пример листинга утилиты SGI c использованием опции DETAIL

+       ГЛАВА 4.СИСТЕМА ОТОБРАЖЕНИЯ РАБОТЫ СУРБД ORACLE (УТИЛИТА ODS)
  Эта глава описывает программу ODS,которая используется для контроля за ра-
ботой ORACLE.С ее помощью можно выбрать различные экранные формы,для того
чтобы проконтролировать,какие пользователи работают в настоящее время с сис-
темой,какие блокировки они сейчас используют и какова интенсивность работы
системы за время прошедшее с последнего старта ORACLE командой IOR W.Особый
интерес представляют экранные формы,отображающие информацию о текущих блоки-
ровках и BI файле.

  Этот раздел м.б. пропущен пользователями,работающими в системах индивидуа-
льного пользования,таких,как MS-DOS.

  Используя утилиту ODS,можно отслеживать:
 - какие процессы (пользователи ОС),в настоящее время работают с ORACLE;
 - какие программы ORACLE они используют (SQL*Plus,SQL*Forms,EXP и т.д.);
 - какие таблицы они используют в настоящее время;
 - какие блокировки создал пользователь и снятие каких блокировок он ожидает;
 - текущее состояние BI файла;
 - интенсивность операций логического и физического ввода и вывода.
  Утилита ODS позволяет также запомнить содержимое экранной формы в файле.
Такие файлы м.б. использованы для анализа тенденций в работе ORACLE и выяв-
ления узких мест.

                              ВЫЗОВ УТИЛИТЫ ODS
  Для того,чтобы использовать программу ODS,нужно ввести команду ODS с уров-
ня ОС.На терминале появится следующее изображение:
-----------------------------------------------------------+
| ODS: Version 5.0.20 on thu Apr 3 09:29:59 1986           |
|                                                          |
| Copyright (c) 1985,Oracle Corporation,California,USA.    |
|      All rights reserved      |                          |
|                                                          |
|        ORACLE Display system                             |
|                                                          |
|     Choose display type:                                 |
-----------------------------------------------------------+
  ПРИМЕЧАНИЕ: Большинство экранных форм,приведенных в этом разделе в качест-
              ве примеров,изображены для ORACLE,работающей под управлением
              ОС VAX/VMS.
  Внешний вид экранных форм и информация,отображаемая с их помощью варьирую-
тся от системы к системе,однако все они очень похожи.Для того,чтобы получить
информацию о том,как правильно ответить на вопросы утилиты ODS можно набрать
H(elp).В результате на терминале высветится экранная форма,приведенная на
рис.7,содержащая список возможных действий пользователя.Ответы м.б. сокраще-
ны до одной или двух первых букв.Если выбирается какая либо экранная форма,
то она появляется на экране видеотерминала.Для выхода на уровень ОС необхо-
димо набрать E(xit).Для изменения частоты обновления информации в экранной
форме нужно набрать команду CY(cle) и указать время цикла в секундах в каче-
стве аргумента команды.Правильный диапазон изменения этого аргумента от 1 до
600 секунд.Кроме того,можно задать интервал,через который происходит смена
экранных форм.Для того,чтобы вернуться к "меню" экранных форм (форме ENTER
DISPLAY),необходимо использовать управляющую последовательность символов для
вызывания прерываний в ОС.
---------------------------------------------------------------+
|      ORACLE Display System                                   |
|                                                              |
|    Choose display type:                                      |
|                                                              |
|Commands: Help (or ?) - эта экранная форма                    |
|   Bi - статистика для BI файла                               |
|   CLose - закрыть регистрационный (LOG) файл                 |
|   CYcle  - установить интервал обновления информации,     |
|   Exit - выйти из ODS                                        |
|   Io - распределение системных ресурсов ввода-вывода         |
|   Locks (0) - блокировки и списки очередей (0=все блоки-     |
|              ровки)                                          |
|   Open <имя файла> - открыть регистрационный (LOG) файл      |
|[VMS:] Process - статистика о пользователях,процессах и тер-  |
|              миналах                                         |
|[VM: ] Process - обобщенные сведения о работе VM              |
|   Summary - обобщенные сведения о работе ORACLE              |
|   Table - таблицы,с которыми работают пользователи           |
|   User - <первый идентификатор процесса>                     |
|    <последний идентификатор процесса> - подробная            |
|    статистика о работе пользователя                          |
---------------------------------------------------------------+
   Рис.7."Меню" экранных форм утилиты ODS

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

          ИСПОЛЬЗОВАНИЕ РЕГИСТРАЦИОННОГО (LOG) ФАЙЛА УТИЛИТЫ ODS
  Содержимое экранных форм м.б. сохранено в LOG файле.LOG файлы легко читаю-
тся и их удобно использовать для анализа.Для того,чтобы начать запись в LOG
файл,нужно ввести соманду Open в режиме "меню" экранных форм.Можно задать
имя регистрационного файла или использовать имя по умолчанию.Имя файла по
умолчанию ODS.LOG.Для закрытия LOG файла,необходимо вернуться к "меню" и
ввести команду CLose.

                         ЭКРАННЫЕ ФОРМЫ УТИЛИТЫ ODS
  В этом разделе приведено описание и примеры экранных форм утилиты ODS.Для
пользователя наибольший интерес обычно представляют 2 экранные формы,отража-
ющие состояние BI файла и блокирование таблиц и записей.

                            Отображение BI файла
  Экранная форма с состоянием BI файла применяется для того чтобы увидеть,
сколько блоков BI файла использовано и сколько осталось свободными.Пример
Экранной формы,отражающей состояние BI файла приведен на рис.8.
-----------------------------------------------------------+
|     BEFORE IMAGE STATUS  09:38:39                        |
|                                                          |
| Used blocks 0                                            |
| Low block  1                                             |
| High block 625                                           |
| Head block 96(3)                                         |
| Tail block 622(3)                                        |
-----------------------------------------------------------+
   Рис.8.Экранная форма с состоянием BI файла.

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

     номер блока                первый блок транзакции
  |                  |                                        |
   -----+-----+-----+v----+-----+-----+-----+-----+-----+-----+
->|   1 |   2 | ... |  A  |  A  |  B  |  C  |  A  |  B  |  C  |
   -----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
->|  A  |  C  |  C  |     |     |     |     |     |     |     |
   -----+-----+----^+-----+-----+-----+-----+-----+-----+-----+
  |     |     |     |     |     |     |     |  ...| 624 | 625 |
   -----+-----+----|+-----+-----+-----+-----+-----+-----+-----+
    идентификатор               заголовок  транзакциии

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

                               Used blocks
  Количество блоков BI файла действительно используемые активными транзакци-
ями.Если количество блоков равно 0,это означает,что нет ни одной активной
транзакции,требующей блоков в BI файле.Это число не указывает,в каком месте
BI файла расположены используемые блоки.Эти блоки могут располагаться как
последовательно,так и фрагментарно.Если они расположены последовательно,так,
как они располагаются в случае единственной активной транзакции,то все пос-
ледующие блоки доступны для дальнейшего использования.Если блоки располагаю-
тся фрагментарно,то некоторые блоки не используются в данный момент,но дос-
туп к ним еще невозможен.

                              Low,High blocks
  Номера первого и последнего блока BI файла установленные для данной
ORACLE.Если только система не входит в кластер ORACLE,эти значения относятся
ко всему BI файлу.

                                Head block
  Этот N блока указывает на последний блок выделенный текущей транзакции.
Значения блоков заголовка обновляются каждый раз,когда потребуется еще один
блок.Число,заключенное в скобки,является номером прохода.N прохода не предо-
ставляет много информации пользователю.Ему он только говорит о том,сколько
раз ORACLE "перекрутила" этот файл.

                                Tail block
  Этот N блока указывает на первый (самый ранний) блок выделенный для теку-
щей транзакции.Значение этого блока обновляется только тогда,когда требуется
больше пространства.Поэтому оно обновляется только при следующем проходе BI
файла во время поиска доступных блоков.Из-за этого значение первого блока
играет более важную роль сразу после обновления.

  Для определения количества доступных для использования блоков используется
формула
               (Tail block - Head block) = n

  Если n ПОЛОЖИТЕЛЬНО,то доступно n блоков.
  Если n ОТРИЦАТЕЛЬНО,то для того,чтобы получить количество доступных для
         использования блоков,необходимо прибавить разность
                  High Block - Low Block).

  Несколько примеров могут проиллюстрировать,как использовать экранную форму
с состоянием BI файла.Из рисунка 8 видно:
  - BI файл имеет всего 625 блоков,начиная с первого блока с номером 1 и за-
    канчивая последним блоком с номером 625 (Low block=1,High block=625);
  - нет ни одной транзакции требующей блоков BI файла (Used blocks=0);
    - текущий заголовок расположен в 96 блоке (Head block=96),что означает,
      что блоки,начиная с 97 доступны для использования;
    - текущий начальный блок транзакции имеет номер 622,что означает,что ко-
      гда ORACLE в последний раз потребовалось пространство в BI файле,были
      использованы блоки,начиная с 622.
Однако,т.к. количество использованных блоков в данный момент равно 0,можно
предположить,что блок 622 доступен так же,как и все блоки,потому,что значе-
ние первого блока транзакции не обновлялось из-за того,что никакие транзак-
ции не запрашивали пространства в BI файле.Если бы какие либо блоки исполь-
зовались в данное время,то BI файл мог бы выглядеть следующим образом:

 -----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
 |1####|2####|#...#|#####|#...#|#...#|#####|96###|    |     |
 -----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
 |    |     |     |     |     |     |     |     |     |     |
 -----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
 |    |     |     |     | ... | ... |622##|623##|624##|625##|
 -----+-----+-----+-----+-----+-----+-----+-----+-----+-----+

  +-----+            +-----+
  |     |            |#####|
  +-----+            +-----+
  доступные  недоступные (используемые)

  В предыдущем примере N первого блока последней транзакции был больше номе-
ра заголовка.В следующем примере N заголовка больше номера первого блока те-
кущей транзакции:

---------------------------------------------------------------+
|      BEFORE IMAGE STATUS   02:47:11                          |
|                                                              |
| Used blocks   450                                            |
| Low block   1250                                             |
| High block  15000                                            |
| Head block   3800(7)                                         |
| Tail block   2800(6)                                         |
|                                                              |
---------------------------------------------------------------+

 - BI файл имеет всего 13750 блоков,начиная с первого блока с номером 1250 и
   заканчивая последним блоком с номером 15000 (Low block=1250,High block=
   15000);
 - текущие транзакции требуют 450 блоков BI файла (Used blocks=450);
 - текущий заголовок расположен в блоке с номером 3800 (Head block=96),что
   означает,что блоки,начиная с 3801 доступны для использования;
 - текущий начальный блок транзакции имеет N 2800,что означает,что когда
   ORACLE в последний раз потребовалось пространство в BI файле,были исполь-
   зованы блоки,начиная с 2800.
  Если этот блок был только что обновлен,то это означает,что активная тран-
закция в настоящий момент использует его.Если блок не был только что обнов-
лен,то для того,чтобы освободились блок 2800 и последующие,необходимо выпол-
нение транзакции,использующей блок 2800.Используя формулу вычисления количе-
ства доступных блоков получаем:
                                 2800 - 3800 = -1000,

  т.к. результат < 0 к нему прибавляется разность (15000 - 1250) = 13750,
  т.е.доступно к использованию 12750 блоков.

  Предполагая,что первый блок текущей транзакции был только что обновлен,
описываемый в примере BI файл мог бы выглядеть следующим образом:
 -----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|1250 |     |     |     |     |     |2800#|#####|#####|#####|
 -----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|#####|#####|3800#|     |     |     |     |     |     |     |
 -----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|     |     |     |     |     |     |     |     |     |15000|
 -----+-----+-----+-----+-----+-----+-----+-----+-----+-----+

                      Отображение операций ввода вывода
  Эта экранная форма представляет гистограмму вклада каждого процесса ORACLE
в процентах в общее количество операций ввода-вывода за заданный период.Каж-
дый процесс ORACLE имеет свой идентификационный код (PID).
----------------------------------------------------------------+
|     ORACLE SYSTEM I/O DISTRIBUTION 10:15:54                    |
|----------Interval----------- --- ---------Cumulative-----------|
|Log Reads Phy Reads Log Writes Log Reads Phy Reads Log Writes   |
|0 % 100 0 % 100 0 % 100 PID 0 % 100 0 % 100 0 % 100             |
|--------- --------- --------- --- --------- --------- ----------|
|        2                                                       |
|        3                                                       |
|        4                                                       |
|        6                                                       |
|=>  =>  ========> 7 =>  ===>  =======>                          |
|=====> ===>     10 ===>  =>                                     |
|                                                                |
 ---------------------------------------------------------------+
 Рис.9 Экранная форма со статистикой операций ввода-вывода.

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

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

  После ввода этой команды на экране появляется следующая экранная форма.
--------------------------------------------------------------------+
|               09:30:15                                            |
|  ORACLE LOCK DISPLAY   S = shared s = shared wait                 |
| 9 Active locks ! 6 Processes X = exclusive x = exclusive wait     |
|===================+-2-3-4-5-6-7--+----------------+---------------|
|DDL.......1......f0   S                                            |
|table access(TAC)   X                                              |
|DML.......1......8c   X                                            |
|DML.......1......19   X                                            |
|CTL.......4.......0 X                                              |
|CTL.......2.......0 X                                              |
|                                                                   |
|DDL...20000.......0   X                                            |
|DDL.......1......c8   X                                            |
|DDL...10000.......0   X                                            |
--------------------------------------------------------------------+
  Рис.10 Страница экранной формы,отображающей блокировки.

  Подробные сведения о различных блокировках,которые появляются в этой экра-
нной форме,включая их представление в форме,приведены в разделе "блокировки
в ORACLE" на стр ....Каждая блокировка отображенная в этой форме представля
ет одну,поставленную в очередь,запись в системной глобальной олбласти SGA.
  Заглавная буква Х - блокировка,установленная в данный момент процессов в
                      режиме EXCLUSIVE.
  Прописная буква х - процесс,находящийся в состоянии ожидания для того,что-
                      бы установить блокировку в режиме EXCLUSIVE
  Заглавная буква S - блокировка,установленная в данный момент процессов в
                      режиме SHARE.
  Прописная буква s - процесс,находящийся в состоянии ожидания для того,что-
                      бы установить блокировку в режиме SHARE.
  (CTL) - осуществляет защиту БД и ВI файла в многомашинной системе.В систе-
          мах,не являющихся системами с разделяемыми БД,процессы BIW и BWR
          всегда устанавливают блокировки CTL в режиме EXCLUSIVE.
  DDL блокировки - обозначают блокировки,называемые блокировками "словаря/
                   интерпретатора".Подробно DDL блокировки описаны в разделе
                   "DDL блокировки" главы 8.
  DML блокировки - обозначают блокировки,называемые блокировками "таблицы/
                   записи".Подробно DML блокировки описаны в разделе "DML
                   блокировки" главы 8.
-------------------------------------------------------------------+
|               09:41:53                                           |
|  ORACLE LOCK DISPLAY   S = shared s = shared wait                |
| 6 Active locks ! 6 Processes X = exclusive x = exclusive wait    |
|===================+-2-3-4-5-6-7--+----------------+--------------|
|DDL.......1......f0   S                                           |
|DDL.......1.....2b4   S                                           |
|ROW....15b0...10001   X                                           |
|                                                                  |
|CTL.......4.......0 X                                             |
|CTL.......2.......0 X                                             |
-------------------------------------------------------------------+
  Процесс 6 заблокировал запись с идентификатором ROWID "000015b0.0001.0001"
в режиме EXCLUSIVE (первую запись,занесенную в логический блок 15b0 первого
раздела).

                            Отображение процессов
  Экранная форма,отображающая работу процессов,содержит специфическую инфор-
мацию о пользователях,в данный момент работающих с ORACLE.В системах коллек-
тивного пользования фоновые процессы BWR,BIW,CLN,и ARH всегда имеют номера
от 2 до 5.
  Для того,чтобы воспользоваться этой экранной формой в среде конкретной OC,
могут потребоваться определенные привилегии.Если по запросу на отображение
процессов,на экране видеотерминала появляется форма,отличающаяся по внешнему
виду от приведенной в примере,необходимо обратиться к руководству по устано-
вке ORACLE на этой ОС.Например,при обращении к этой экранной форме без при-
велегий в среде ОС VAX/VMS пользователь сможет увидеть на экране только ин-
формацию,относящуюся к его собственному процессу.
  В среде ОС VAX/VMS экранная форма будет выглядеть следующим образом:
------------------------------------------------------------------+
|     VAX PROCESS INFORMATION                                     |
|ORA                                                              |
|PID VAX PID USER NAME TERM   IMAGE                               |
--- ------- --------- ----- --------------------------------------|
|                                                                 |
| 2 13b0054 ORACLE    USER$DISK1:[ORACLE.V5CODE]BWR.EXE;1         |
| 3 10b0057 ORACLE    USER$DISK1:[ORACLE.V5CODE]BIW.EXE;1         |
| 4 11d0053 ORACLE    USER$DISK1:[ORACLE.V5CODE]CLN.EXE;1         |
| 5 630051 ORACLE    USER$DISK1:[ORACLE.V5CODE]ARH.EXE;1          |
| 7 148004f TED  TTA5: DRB0:[ORACLE.V5CODE]IAP.EXE;1              |
| 8 8e0042 CAROL  RTA1: DRB0:[ORACLE.V5CODE]RPT.EXE;1             |
| 9 c70043 ALICE  TXG2: DRB0:[ORACLE.V5CODE]IAP.EXE;1             |
| 10 6a0044 DBA  TKA2: DRB0:[ORACLE.V5CODE]ODS.EXE;1              |
------------------------------------------------------------------+
   Рис.11 Экранная форма,отображающая работу процессов.

  В среде ОС VM/SP экранная форма будет выглядеть следующим образом:
--------------------------------------------------------------+
|      VM/SP PROCESS INFORMATION  10:16:17                    |
| ORA PID VM User VM Termid ORACLE Userid                     |
| ------- ------- ---------- ----------------                 |
|  2 ORABWR DSC                                               |
|  3 ORABIW DSC                                               |
|  4 ORACLN DSC                                               |
|  5 ORAARH DSC                                               |
|  8 MARTHA 470   MARTHA                                      |
|  8 GEORGE 46F   OPS$GEORGE                                  |
|  9 NINA  4DC   OPS$NINA                                     |
|  11 YVETTE 480   YVETTE                                     |
--------------------------------------------------------------+

              Отображение обобщенных сведений о работе системы
  Эта экранная форма используется для отслеживания работы всей БД.С ее помо-
щью можно анализировать работу как за заданный интервал времени,так и за ве-
сь период.
  Ниже приводится внешний вид этой экранной формы:
--------------------------------------------------------------+
|     SYSTEM SUMMARY STATISTICS   10:17:18                    |
|  System Activity Counters  Detached Process Errors          |
|                                                             |
|    Interval Cumulative Asynch Read Ahead  0                 |
|Log reads  23489 9968866                                     |
|Phy reads   8829  531679 Before Image Compress -             |
|Log writes  7834  111011                                     |
|Phy writes   736  24518 Before Image Write  0                |
|DML commits  329  1168                                       |
|DML rollbacks  101  781 Buffer Write    0                    |
|DDL commits   65   65                                        |
|DDL rollbacks  10   10 Cleanup     0                         |
|Deadlocks   0   0                                            |
--------------------------------------------------------------+
  Рис.12 Отображение обобщенных сведений о работе системы.

 Log reads - количество логических блоков,считанных из блоков,найденных в
             пуле кэш-буферов.
 Phy reads - количество считанных с магнитного диска физических блоков.
 Log writes - количество модификаций блоков кэш-буфера.
 Phy writes - количество записанных на магнитный диск физических блоков.
 DML commits - количество изменений состояния БД.
 DML rollbacks - количество возвращений к предыдущему состоянию БД.
 DDL commits - количество изменений состояния словаря данных.
 DDL rollbacks - количество возвращений к предыдущему состоянию словаря дан-
                 ных.
 Deadlocks - количество взаимоблокировок,выявленных системой.

                        Отображение активных таблиц
  Эта экранная форма показывает имя каждой таблицы,содержащейся в кэш-буфере
таблиц.Необходимо отметить,что не все таблицы,к которым в данный момент осу-
ществляется доступ,указываются в этой форме,а только те,которые находятся в
кэш-буфере.В форме также указывается относительный адрес влока (RBA) начала
таблицы,количество курсоров,считывающих данные количество курсоров,модифици-
рующих данные для каждого пользователя каждой таблицы.RBA может выдаваться в
10-ной или 16-ной форме.По умолчанию,используется 10-ное представление чисел.
16-ное представление полезно для сравнения адресов RBA в этой экранной форме,
с адресами RBA,высвечивающимися в экранной форме отображающей блокировки.
  2 таблицы словаря данных с именами TABLES и COLUMNS никогда не помещаются
в кэш-буфер,но всегда появляются в разделе N один с адресом RBA равным 9 и
идентификаторами кластеров 1 и 2 соответственно.
-------------------------------------------------------------+
|     ODS: TABLE ACCESS    10:27:54                          |
|                                                            |
|        --Table-Identifier-- Read Updt                      |
|PID User Name Table Name Part RBA(hex) Clus Curs Curs       |
|--- --------- ----------- ---- -------- ---- ---- ----      |
| 6 OPS$BOB INV_DATES      1    144a     1     1    0        |
| 7 OPS$TED ADDRESSES      1    5ee3     1     4    0        |
| 8 OPS$CAROL DONATIONS    1    29df     1     20   0        |
| 8 OPS$CAROL not cached   1    2e0d     1     10   7        |
| 8 OPS$CAROL REMINDER     1    2b01     1     2    2        |
| 9 OPS$ALICE PROJ_ID      1    76b      1     1    0        |
| 10 HARVEY  WHOOPS        1    5222     1     1    0        |
-------------------------------------------------------------+
  Рис.13.Экранная форма отображающая доступ к таблицам.

  Если на дисплее появляется сообщение "not cached",то следует рассмотреть
возможность уменьшения параметра TABLES файла INIT.ORA.

                    Отображение работы пользователей
  Экранная форма,отображающая работу пользователей,м.б. вызвана несколькими
способами путем ввода следующих команд:
U
U <идентификатор процесса>
U <первый_идентификатор_процесса><последний_идентификатор процесса>

для того,чтобы просмотреть информацию о работе всех процессов,только одного
или в заданном диапазоне соответственно.Характер информации может слегка из-
меняться для фоновых процессов ORACLE ARH,BIW,BWR и CLN.
------------------------------------------------------------------+
| Pid: 2    USER STATUS DISPLAY    09:43:2                        |
| User:   Image: HSC000$DUAO:[ORACLE.V5]BWR.EXE;7                 |
|                                                                 |
|  Process Activity Counters  Current Operation: none             |
|                                                                 |
|   Interval Cumulative  User cursors  0                          |
|Log reads  0   0   ORACLE cursors  0  |
|Phy reads  0   1   Timeouts   600  |
|Log writes  0   0   Deadlock count  0  |
|Phy writes  98  2779          |
|DML commits  0   0 Queue wait: buffer write wait (BWW)|
|DML rollbacks 0   0          |
|DDL commits  0   0          |
|DDL rollbacks 0   0          |
|Deadlocks  0   0          |
|DeadT   0   0          |
+------------------------------------------------------------------+
  Рис.14.Экранная форма,отображающая работу процесса BWR.

 Log reads - количество логических блоков,считанных из блоков,найденных в
             пуле кэш-буферов.
 Phy reads - количество считанных с магнитного диска физических блоков.
 Log writes - количество модификаций блоков кэш-буфера.
 Phy writes - количество записанных на магнитный диск физических блоков.
 DML commits - количество изменений состояния БД.
 DML rollbacks - количество возвращений к предыдущему состоянию БД.
 DDL commits - количество изменений состояния словаря данных.
 DDL rollbacks - количество возвращений к предыдущему состоянию словаря дан-
                 ных.
 Deadlocks - количество взаимоблокировок,выявленных системой.
 Timeouts - количество посылок,полученных процессом,пока он находился в сос-
            тоянии ожидания ресурсов.Большая величина этого показателя не
            указывает на наличие проблемы.
 DeadT - счетчик,указывающий на количество попыток выявить состояние взаимо-
         блокировки процедурой,выполняющей операцию ROLLBACK.Процессы не
         проверяют наличие взаимоблокировок,потому что им не требуется допо-
         лнительных ресурсов,поэтому значение DeadT редко повышается.Однако,
         если один процесс не снял блокировку,что требуется другому процес-
         су,выполняющему операцию ROLLBACK,значение DeadT может значительно
         возрасти.
 Сurrent operation - операции выполняемые в данный момент ORACLE для данного
                     процесса.Они могут отличаться от операций используемых
                     пользователями.Например,если пользователь выполняет
                     операцию DROP TABLE,на экране м.б. показана операция
                     DELETE,потому что перед уничтожением таблицы из нее д.б.
                     удалены все записи.
 User cursors - количество открытых в данный момент курсоров явно вызванных
                данным процессом.
 ORACLE cursors - количество рекурсивных курсоров открытых в данный момент
                  от имени этого процесса ORACLE.Рекурсивные курсоры - кур-
                  соры которые ORACLE открывает для управления БД,например
                  для того,чтобы обновить словарь данных,когда добавляются
                  или уничтожаются таблицы или имена пользователей.

  Если в экранной форме для процесса CLN значение "cleanups tried" не равно
значению "cleanups succeeded" после нескольких циклов смены экрана,необходи-
мо выполнить команду IOR SHUT или IOR CLEAR,а затем команду IOR WARM.
-----------------------------------------------------------------+
| Pid: 3    USER STATUS DISPLAY    09:43:23                      |
| User:   Image: HSC000$DUAO:[ORACLE.V5]BIW.EXE;7                |
|                                                                |
|  Process Activity Counters  Current Operation: none            |
|                                                                |
|   Interval Cumulative  User cursors  0                         |
|Log reads  0   0  ORACLE cursors  0  |
|Phy reads  0   0  Timeouts   686  |
|Log writes  0   0  Deadlock count  0  |
|Phy writes  0   0         |
|DML commits  0   0 Queue wait: before image wait (BIW)|
|DML rollbacks 0   0         |
|DDL commits  0   0         |
|DDL rollbacks 0   0         |
|Deadlocks  0   0         |
|DeadT   0   0         |
-----------------------------------------------------------------+
  Рис.15.Экранная форма,отображающая работу процесса BIW.

----------------------------------------------------------------+
| Pid: 4   USER STATUS DISPLAY    09:43:37                      |
| User:   Image: HSC000$DUAO:[ORACLE.V5]CLN.EXE;7               |
|                                                               |
|  Process Activity Counters  Current Operation: none           |
|                                                               |
|   Interval Cumulative  User cursors  0   |
|Log reads  0  0   ORACLE cursors  0   |
|Phy reads  0  0   Timeouts  16689   |
|Log writes  0  0   Deadlock count  0   |
|Phy writes  0  0          |
|DML commits  0  0 Queue wait: audit trail write (AUD) |
|DML rollbacks 0  0          |
|DDL commits  0  0          |
|DDL rollbacks 0  0 Cleanups tried:  2 succeeded: 2|
|Deadlocks  0  0 Last pid cleaned: 6    |
|DeadT   0  0 Last error: 0 not activ   |
|                |
+----------------------------------------------------------------+
  Рис.16.Экранная форма,отображающая работу процесса CLN.

+             ГЛАВА 5.ПРОТОКОЛИРОВАНИЕ РАБОТЫ С БАЗАМИ ДАННЫХ
  В этой главе описывается,как организовать протоколирование работы с БД для
восстановления БД в случае сбоев OC или неисправности магнитных носителей и
как произвести их восстановление с помощью журнальных файлов.Обсуждаются
требования и опции программы копирования AIJ,а также рассматривается,что
происходит во время восстановления БД,и возможные при этом ошибки.

                          ЦЕЛИ ПРОТОКОЛИРОВАНИЯ
  Журнальный протокол - это средство администратора БД для восстановления БД
в случае возникновения неисправностей оборудования,например,при поломке го-
ловок накопителя на магнитных дисках,содержащих БД.Восстановление становится
возможным благодаря параллельной записи в журнал каждого блока записываемого
в БД.Протокольный журнал представляет собой физические записи всех изменений
производимых в БД,которые м.б. переписаны в БД,для того чтобы получить точ-
ную копию утерянной БД.

                            ЖУРНАЛ ПРОТОКОЛОВ
  Журнал протоколов ORACLE состоит из набора последовательных файлов,записы-
ваемых один за другим.Транзакции записываются в журнальный файл перед тем,
как соответствующие блоки записываются в БД.По мере того как журнал растeт и
журнальный файл заполняется,для записи открывается следующий файл.Если БД
модифицируется (предложениями DDL) интенсивно,то журнальный файл может выра-
сти до очень больших размеров.Это происходит потому,что в журнальном файле
для записи используются блоки таких же размеров,как и в БД (2К).Поэтому,если
изменяется даже только один байт,записывается целый блок.В результате журна-
льный файл может расти очень быстро.В протокол заносятся как блоки с данны-
ми,так и с индексами,а также блоки специального назначения,такие как для вы-
деления памяти.
  Обычно,после своего заполнения,каждый журнальный файл копируется на магни-
тную ленту,для того,чтобы освободить место для дальнейшего протоколирования.
Это м.б. сделано в фоновом режиме либо оператором,либо написанной пользова-
телем процедурой,так,что система не прерывает при этом своей работы.Журнал
может представлять собой заранее созданные и назначенные для этой цели фай-
лы,или (в системах поддерживающих динамическое назначение файлов) серию фай-
лов заданного размера,создаваемых ORACLE.
  Для того,чтобы гарантировать при восстановлении ту же самую последователь-
ность применения журнальных файлов,что и при их записи,в заголовок каждого
файла записывается последовательный N журнала.Перед применением каждого фай-
ла программа AIJ проверяет его заголовок.Последовательный N журнала хранится
в БД и начинается с 1,в момент задания команды IOR I для инициализации БД.
После этого N каждого последующего журнального файла увеличивается на 1.N
последовательности никогда не изменяется.Единственным исключением является
случай,когда последовательность м.б. изменена утилитой AIJ во время восста-
новления БД.В этом случае последовательность будет восстановлена после испо-
льзования утилитой AIJ последнего журнального файла.
  Если происходит системный сбой,протокольный журнал используется совместно
с копией БД,сделанной до начала ведения этого журнала,и о которой известно,
что она правильная.Запись из журнала производится самостоятельной утилитой
AIJ перед рестартом ORACLE.Программа AIJ читает каждый файл в журнале и об-
новляет каждый блок БД в котором была произведена транзакция.Когда восстано-
вление закончено и создан BI файл,ORACLE м.б. перестартована и деятельность
БД возобновлена.Все транзакции,которые не были выполнены к моменту системно-
го сбоя игнорируются.
  В следующих разделах обсуждается,как подключить журнал протоколов так,что-
бы осуществлялась запись в журнальные файлы,и как использовать эти файлы в
случае сбоев системы.Описываются возможные ошибки и сообщения.

                П0ДГОТОВКА К ПОДКЛЮЧЕНИЮ ПРОТОКОЛЬНОГО ЖУРНАЛА
  Для того,чтобы использовать журнал протоколов,необходимо:
 - периодически копировать БД,когда известно,что она находится в нормальном
   состоянии.Копирование БД заключается в копировании всех DB файлов и BI
   файла.Результаты только такого копирования можно использовать для после-
   дующего восстановления с помощью журнальных файлов;
 - отбросить все журнальные файлы сгенерированные до копирования БД;
 - включить соответствующие параметры в файл INIT.ORA.

                    ПОДКЛЮЧЕНИЕ ПРОТОКОЛЬНОГО ЖУРНАЛА
  Для того,чтобы подключить протокольный журнал необходимо произвести следу-
ющие операции.
  1.Добавить параметр AFTER_IMAGE в файл параметров INIT.ORA.
  2.При необходимости можно настроить параметр AI_WARN_PCNT.
  3.Если используется динамическое создание журнальных файлов,в файл параме-
    тров INIT.ORA необходимо включить параметр FILE_SIZE.
  4.Скопировать БД (это необходимо сделать после завершения работы ORACLE
    командой IOR CLEAN,если это не сделано,необходимо стартовать систему ко-
    мандой IOR WARM,а затем остановить еe командой IOR CLEAN).
  5.Стартовать ORACLE командой IOR WARM.

  После этого запись в журнал будет вестись,начиная с первого пустого файла
в наборе журнальных файлов.Новый журнальный файл будет открываться в следую-
щих случаях:
  - текущий файл заполнился;
  - произошла ошибка записи в журнальный файл;
  - произведeн рестарт ORACLE.

  После открытия каждого нового журнального файла на консоль оператора посы-
лается сообщение об этом событии.Протоколирование ведeтся до тех пор,пока
система не будет перестартована с отключeнным журналом,либо не произойдeт
неисправимая ошибка,такая например,как нехватка памяти.
  Журнал м.б. создан 2 способами.
  Первый способ заключается в том,что журнал записывается в предварительно
созданный фиксированный набор файлов.Когда каждый из этих файлов заполняет-
ся,оператор (или фоновый процесс) должен копировать его на магнитную ленту и
освобождать его используя команду
                                      AIJ INITIALIZE=fn

  После этого файл м.б. использован вновь для записи протокола.ORACLE рабо-
тает с файлами,заданными в записях параметра AFTER_IMAGE циркулярно.Это оз-
начает,что после того,как заполняется последний файл из списка,система вновь
открывает первый файл.Если этот файл не был ещe освобождeн,то ORACLE попыта-
ется открыть следующий и так далее,до тех пор,пока она не найдeт свободный
или проделает полный цикл безуспешно.
  Во втором режиме журнальные файлы создаются динамически ORACLE.Размеры ка-
ждого файла задаются в параметре AI_FILE_SIZE.Система использует директории
или файлы,указанные в списке журнальных файлов,для того чтобы создать файлы
в монотонной последовательности имeн.Этот способ не доступен в среде ОС не
поддерживающих такой режим создания файлов (например в IBM VM/CMS).

           Параметры файла INIT.ORA,управляющие ведением журнала
  С журналом протоколов связаны 3 параметра файла INIT.ORA:
  - AFTER_IMAGE
  - AI_FILE_SIZE
  - AI_WARN_PCNT

                             AFTER_IMAGE
  Этот параметр должен присутствовать в файле INIT.ORA,если необходимо подк-
лючить журнал.Он должен задавать список имeн файлов журнала.Список имeн жур-
нальных файлов м.б. представлен несколькими способами,простейшим из которых
является последовательность имeн файлов,разделeнных запятыми,на одной стро-
ке.Если первый символ в имени первого файла не является ни цифрой,ни буквой,
то он используется как разделитель (вместо запятой) для последующих имeн фа-
йлов.Поэтому в имя файла,могут входить запятые.Если список имeн велик и не
помещается на одной строке,он м.б. продолжен на последующие строки.Следующие
примеры иллюстрируют различные способы задания одного и того же списка жур-
нальных файлов:
I:  AFTER_IMAGE  FILENAME1,FILENAME2,FILENAME3
II:  AFTER_IMAGE  \FILENAME1\FILENAME2\FILENAME3
III:  AFTER_IMAGE  \FILENAME1\FILE
      AFTER_IMAGE  NAME2\FILENAME3
IV:  AFTER_IMAGE  ,FILENAME1
     AFTER_IMAGE  ,FILENAME2
     AFTER_IMAGE  ,FILENAME3

                               AI_FILE_SIZE
  Этот параметр используется только при работе в среде ОС,поддерживающих ди-
намическое выделение файлов,он указывает на то,что ORACLE сама должна созда-
вать журнальные файлы и устанавливает их размеры (в блоках ORACLE).Ниже при-
водится пример,в котором размер динамически создаваемых журнальных файлов
устанавливается равным 20 блокам ORACLE.

                             AI_FILE_SIZE 20
  Для того,чтобы избежать конфликтной ситуации,журнальным файлам присваиваю-
тся уникальные имена.Имена являются производными от имени указанного в пара-
метре AFTER_IMAGE и последовательного номера журнального файла.Уникальность
имeн обеспечивается путeм перекрытия именной части (но не директории) специ-
фикации файла сгенерированным внутренним номером последовательности журналь-
ных файлов.Имена журнальных файлов имеют форму SQNnnnnnn.AIJ,где nnnnnn -
N из 6 цифр от 000001 до 999999.ORACLE создаeт эти файлы динамически в дире-
ктории(ях) заданной в параметре AFTER_IMAGE.Директории используются в том
порядке,в котором они появляются в файле INIT.ORA.

                              AI_WARN_PCNT
  Этот параметр устанавливает степень заполнения журнального файла (в проце-
нтах),при которой ORACLE посылает на консоль оператора сообщение.
Например: AI_WARN_PCNT 80

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

             ПРИМЕНЕНИЕ ЖУРНАЛЬНЫХ ФАЙЛОВ (ВЫЗОВ УТИЛИТЫ AIJ)
  Если ведeтся журнальный протокол,то утилита AIJ м.б. использована для вос-
становления БД путeм обновления копии БД,отражающей еe состояние перед нача-
лом ведения журнала.Утилита AIJ не должна запускаться до тех пор,пока ORACLE
не будет остановлена командой IOR SHUT.
  Журнальные файлы обрабатываются в 2 прохода.При первом проходе собирается
статистика и составляется список транзакций,которые не были выполнены,для
того чтобы удалить их при восстановлении БД.Во время второго прохода БД мо-
дифицируется,при этом используются все блоки за исключением блоков невыпол-
ненных транзакций,которые были выявлены при первом проходе.Работа утилиты
AIJ м.б. изменена несколькими параметрами.Некоторые параметры указываются в
строке команды AIJ,некоторые задаются в файле параметров утилиты IOR,а не-
которые запрашиваются с терминала.

                       Команды и параметры утилиты AIJ
  Команда вызова утилиты AIJ имеет следующий формат:
                    AIJ [ параметр1 ] [ параметр2 ] [ параметр3 ]

  Все параметры необязательны и разделяются пробелами,а не запятыми.
  Ниже приводится описание параметров команды AIJ:

                        DATABASE=спецификация_файла
  Имя начального DB файла.Если не задано,утилита AIJ просматривает файл па-
раметров утилиты IOR,в поиске соответствующего значения параметра PFILE.

                             DEBUG={1|2|3}
  Используется только при отладке или просмотре подробной статистики.Этот
параметр управляет количеством информации о считываемых блоках журнала,выво-
димой на терминал.Параметр может принимать следующие значения:
1 - на терминал выводится информация только об операциях COMMIT и ROLLBACKS;
2 - на терминал выводится строка с информацией о каждом блоке журнального
    файла;
3 - утилита AIJ будет продолжать работы даже после серьeзной (возможно нево-
    сстановимой) ошибки.
  Обычно параметр DEBUGE опускается.

                           FIRST_SQN= nnnnnn
  Последовательный номер первого применяемого журнального файла (от 1 до
999999 включительно).Этот N должен идентифицировать первый журнальный файл,
созданный после того,как произведено копирование БД.Если параметр не задан,
утилита AIJ использует N,найденный в БД.Обычно этот параметр опускается.Если
он неправильно задан,БД м.б. испорчена.

                      INITIALIZE=спецификация_файла
 Этот параметр восстанавливает журнальный файл,который был полностью запол-
нен и скопирован на магнитную ленту.После восстановления файл м.б. вновь ис-
пользован утилитой AIJ.

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

                        PFILE=спецификация_файла
  Имя альтернативного файла параметров утилиты IOR,в котором ведeтся поиск
значений для параметра DATABASE (игнорируется,если оба параметра заданы в
командной строке).Если не задан,по умолчанию имя файла - INIT.ORA.

                        UNTIL=спецификация файла
  Дата и время восстановления БД с использованием журнала протоколов.Все
транзакции произведeнные после этого времени игнорируются.Дата и время зада-
ются в следующем формате:
    mm/dd/yy-hh:mm:ss.mmm
     | |  |  |  |  |  |
     | |  |  |  |  |  +--- миллисекунды (0-999)
     | |  |  |  |  +------ секунды (0-59)
     | |  |  |  +--------- минуты (0-59)
     | |  |  +------------ часы (0-23)
     | |  +--------------- год (0-99)
     | +------------------ день (0-31)
     +-------------------- месяц (0-12)

      Что происходит во время первого и второго проохода утилиты AIJ
  После проверки параметров команды AIJ,утилита AIJ открывает начальный файл
БД и выдаeт на терминал имена экстентов БД,включая начальный файл БД.Этого
не происходит,если в командной строке задан параметр NO_APPLY.
  Затем утилита AIJ выполняет первый проход по журнальным файлам,запрашивая
имя каждого файла и просматривая каждый файл в поиске невыполненных транзак-
ций.После того,как последний файл просмотрен,на терминал выдаeтся запрос о
вводе имени файла.Для того,чтобы завершить первый проход,необходимо ввести в
ответ на этот запрос пустую строку.В конце первого прохода утилита AIJ выда-
eт краткое описание данных,содержащихся в журнале,включая список транзакций,
которые никогда не выполнялись.Информация о каждой транзакции выдаeтся на
отдельной строке и состоит из идентификатора транзакции и номеров первого и
последнего блока транзакции.Номер блока представляет собой последовательный
N журнального файла и N блока в этом файле.
  После этого утилита AIJ обычно переходит ко второму проходу.Этого не про-
исходит,если при первом проходе не было обнаружено выполненных транзакций
или в командной строке был задан параметр NO_APPLAY.В начале второго прохода
все экстенты БД открываются.Затем весь журнал читается вновь,используя имена
файлов,которые были получены при первом проходе,и БД восстанавливается путeм
записи в неe блоков с выполненными транзакциями.Второй проход может занять
значительное время.Как и при первом проходе имя каждого журнального файла
выдаeтся на терминал,когда начинается обработка очередного файла.Когда обра-
ботка файла завершается,утилита AIJ выдаeт на терминал количество блоков
ORACLE в файле,которые действительно использовались при восстановлении БД.
  После того,как все журнальные файлы обработаны,в БД обновляется последова-
тельный N журнального файла.И,наконец,утилита AIJ закрывает все экстенты DB
файла завершает работу,выдав на терминал сообщение о завершении.

                  СООБЩЕНИЯ,ВЫДАВАЕМЫЕ НА КОНСОЛЬ ОПЕРАТОРА
  Во время ведения протокольного журнала ORACLE на консоль оператора м.б.
выданы следующие сообщения.

ORACLE error '#_ошибки' identifying AI journal 'файл'-IOR aborted

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

ORACLE can't open any after image journal file.- IOR aborted

  ORACLE не может открыть ни один из заданных журнальных файлов.Все они либо
заполнены,либо неправильно проинициализированы,либо защищены от записи.Ути-
лита IOR завершается аварийно

ORACLE can't build AI journal name from 'файл'

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

ORACLE error 'N_ошибки' identifying AI journal 'файл'
ORACLE error 'N_ошибки' opening AI journal 'файл'
ORACLE error 'N_ошибки' writing AI journal 'файл'

   ORACLE не может найти,открыть или прочитать заголовок указанного журналь-
ного файла.

ORACLE starting after image journal file #'сегмент' - 'файл'

   ORACLE не может записать заголовок указанного журнального файла.

ORACLE warning: AI journal 'файл' is '#' percent full

   Указанный журнальный файл заполнен на заданное параметром AI_WARN_PCNT
количество процентов.ORACLE error 'N_ошибки'

writing block #'N_блока' to AI journal 'файл'
   ORACLE не может записать блок указанного журнального файла,несмотря на
то,что ранее в этот блок запись производилась.

Unable to open any after image journal.Journalling aborted.
   ORACLE не может найти или открыть какой-либо журнальный файл,указанный в
файле параметров утилиты INIT.ORA.

Unable to write any after image journal.Journaling aborted.
   ORACLE не может произвести запись в какой-либо пустой журнальный файл.
Протоколирование прекращается до следующего старта системы командой IOR.

                     СООБЩЕНИЯ УТИЛИТЫ AIJ ОБ ОШИБКАХ
   Утилита AIJ завершает работу аварийно,если сталкивается с одной из следу-
ющих ошибок.

Can't open database file 'файл'

   Один из экстентов DB файла не существует,назван неправильно,занят или за-
щищeн от записи.

Can't open parameter file 'файл'

   Файл параметров утилиты IOR не м.б. открыт для чтения.Если параметр PFILE
не задан,утилита AIJ предполагает файл INIT.ORA.

Cannot identify database file 'файл'
Cannot open database file 'файл'

   Начальный DB файл не существует,назван неправильно,занят или защищeн от
записи.

Database file specification not found

   Параметр DATABASE не был задан ни в командной строке,ни в файле парамет-
ров утилиты IOR.

Error parsing UNTIL spec starting at 'спецификация_даты'

   Значение,указанное в параметре UNTIL,имеет неправильный формат.Ошибка ра-
сполагается на указанной позиции значения параметра.

Error reading block 'номер_блока'

   Произошла ошибка при чтении блока с указанным номером (в блоках ORACLE)
текущего журнального файла.

Invalid parameter 'имя_параметра'

   В командной линии задан параметр с именем,не совпадающим ни с одним из
известных имeн правильных параметров.

No transactions to apply.

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

ORACLE error # '#_ошибки' reading block 'номер_блока' in file 'файл'

Произошла ошибка при попытке чтения первой части начального DB файла,поиска
имeн экстентов DB файла или последовательного номера журнального файла в БД.

ORACLE error # '#_ошибки' writing block 'ном_блока' to file 'файл'

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

Run with DEBUG > 2 to continue

   Была обнаружена серьeзная ошибка в журнальном файле,не позволяющая даль-
нейшее восстановление БД.Работа утилиты AIJ м.б. продолжена со значением па-
раметра DEBUG равным 3,хотя маловероятно,что это окажется полезным.

+           ГЛАВА 6.МОДИФИКАЦИЯ ВИДЕОТЕРМИНАЛОВ (утилита CRT)
                       ЧТО ТАКОЕ УТИЛИТА CRT?
   Программа CRT используется для того,чтобы модифицировать описание видео-
терминалов,используемых некоторыми программами ORACLE.Описание терминалов
используется для того,чтобы:
 - установить соответствие между функциональными клавишами терминала и функ-
   циями,выполняемыми программами ORACLE;
 - определить,какие характеристики терминалов,такие как повышенная яркость,
   негативное изображение,мигание или подчеркивание символов можно использо-
   вать в полноэкранных диалоговых программах системы.
   Описание видеотерминалов можно представить в виде следующего отношения:

программа ORACLE : тип терминала : клавиша терминала : функция
                                                       программы
           например:
   SQL*Forms IAP : VT100   : цифра 7 : перейти к следующему полю
   SQL*Forms IAP : IBM3270 : Ввод    : перейти к следующемцу полю

   Информация о характеристиках терминала хранится в нескольких таблицах БД.
Утилита CRT использует эти таблицы для того,чтобы откомпилировать исходную
информацию в файлы,которые требуются другим программам для выполнения их
операций.Эти файлы называются CRT файлами (если видеотерминал имеет соответ-
ствующий CRT файл,то он имеет "описание терминала").Фирма-разработчик ORACLE
обеспечивает стандартными описаниями многие типы терминалов (см.приложение
"Описания терминалов,обеспечиваемые фирмой-разработчиком ORACLE"),поэтому
возможно,что пользователям системы никогда не понадобятся описания,отличные
от описаний терминалов по умолчанию.Однако,если потребуются новые описания
или модификация уже существующих,утилита CRT предоставляет такие возможности.

            КАКИЕ ПРОГРАММЫ СИСТЕМЫ ORACLE ИСПОЛЬЗУЮТ CRT ФАЙЛЫ?
   CRT файлы требуются для работы следующих компонент ORACLE:
   - SQL*Forms (особенно IAP и IAD);
   - SQL*Calc;
   - SQL*Menu.

                ТРЕБОВАНИЯ К ТЕРМИНАЛАМ,ПОДДЕРЖИВАЕМЫМ CRT
   CRT поддерживает 2 типа видеотерминалов:
 - синхронные устройства,такие как IBM3270,которые передают и принимают дан-
   ные блоками по размерам,равным целому экрану или его части(полю);
 - асинхронные устройства,такие как DEC VT100,которые передают и принимают
   данные посимвольно.

             Асинхронные терминалы должны иметь возможность:
 - передавать каждый символ или поле по мере их ввода;
 - использовать набор символов,используемый ОС (ASCII или EBCDIC);
 - передвигать курсор на одну позицию влево;
 - передвигать курсор на одну позицию вправо;
 - расположить курсор на заданные строку и колонку экрана (см.раздел "Зада-
   ние координат курсора");
 - обрабатывать данные со скоростью приема данных,устанавливаемой в бодах
   или иметь протокол управления потоком данных (например,X-ON/X-OFF);
 - стереть весь экран,когда курсор расположен в верхнем левом углу экрана.

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

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

                    ОПИСАНИЕ ТЕРМИНАЛОВ ПО УМОЛЧАНИЮ
   Каждая дистрибутивная магнитная лента ORACLE содержит описания термина-
лов,используемые по умолчанию,обычно содержащиеся в файле DEFAULT.CRT.Этот
файл устанавливает назначение функциональных клавиш для терминалов,обычно
используемых данной ОС.Например,в зависимости от ОС с его помощью определяю-
тся клавиши либо терминала IBM 3270,или VT100.
   Компонента SQL*Forms всегда предполагает,что используется описание терми-
нала по умолчанию.Если необходимо использовать другой тип терминала,то надо
вызвать программу с указанием терминала,т.к.,например,это делается при вызо-
ве программы IAP с опцией -t:
                                  IAG -t VT100

   SQL*Cale и SQL*Menu м.б. вызвано любым способом,предполагая тип терминала
по умолчанию или указав его явно.

                   ТАБЛИЦЫ БАЗЫ ДАННЫХ,ИСПОЛЬЗУЕМЫЕ CRT
   Пользователь ORACLE с именем SYSTEM владеет несколькими таблицами в БД,
которые используются утилитой CRT.Краткое описание этих таблиц приведено на
рис.17,более подробно они описываются в следующих разделах.
    -------------------------------------------------------------+
|  ТАБЛИЦЫ     |                       НАЗНАЧЕНИЕ                 |
   --------------------------------------------------------------+
| CRT          | Описывает характеристики терминалов              |
| CRTBOX       | Связывает набор символов псевдографики с типом   |
|              | терминала                                        |
| CRT_PRODUCTS | Назначает коды программам ORACLE,для работы      |
|              | которых требуются описания терминалов            |
| CRT_TYPE     | Назначает коды устройствам CRT и отмечает,       |
|              | является ли устройство синхронным или            |
|              | асинхронным                                      |
| ESC          | Указывает соответствие между программами         |
|              | ORACLE,                                          |
|              | их функциями,типом терминала и его клавишами     |
| FUNCTIONS    | Назначает двухсимвольный код функциям программ   |
|              | ORACLE                                           |
| GOTO_LC      | Переводит координаты курсора,заданные в виде     |
|              | строка/колонка в коды,используемые некоторыми    |
|              | терминальными устройствами                       |
    --------------------------------------------------------------+
          Рис.17.Описание таблиц CRT

   Эти таблицы обычно создаются на последнем шаге установки ORACLE.Во многих
ОС для того,чтобы войти в SQL*Plus под именем пользователя SYSTEM,создать и
загрузить таблицы,используется файл с именем CRTINS.Более подробное описание
установки этих таблиц содержится в Руководстве пользователю и Руководстве по
установке для конкретной ОС.
   Необходимо заметить,что CRTINS не предоставляет доступа к таблицам CRT
никому,кроме пользователя с именем SYSTEM,так что если другие пользователи
ORACLE требуют доступа (для операций INSERT или UPDATE),то пользователь
SYSTEM должен явно предоставить им этот доступ.

                           Таблица SYSTEM.CRT
   Каждая запись в таблице SYSTEM.CRT описывает характеристики отдельного
типа терминального устройства.Записи в этой таблице определяют,какой внешний
вид экранных форм будет у компонент ORACLE (SQL*Forms,SQL*Menu,SQL*Calc),ка-
кие характеристики видеотерминалов (такие как повышенная яркость,мигание,не-
гативное изображение и т.п.) будут использоваться.Для информации о том,как
изменять описание характеристик терминалов в таблице или вводить новые,воз-
можно потребуется документация для описываемого терминала,содержащая управ-
ляющие последовательности для него.
   ПРИМЕЧАНИЕ: таблица SYSTEM.CRT представляет собой независимый продукт
               ORACLE.

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

 NAME - имя типа устройства,используемого в качестве корня в имени .CRT фай-
        ла.Имя должно удовлетворять требованиям к именам файлов используемой
        ОС.
 TYPE - один из двух кодов,обозначающих тип устройства:
        - CHAR обозначает асинхронное устройство (по-символьное);
        - 3270 обозначает синхронное устройство (по-блочное).
 OFFSET - код,используемый для получения координат курсора.Обычно числовое
        значение,добавляемое к номеру строки или колонки экрана терминала
        для того,чтобы преобразовывать его к единственному символу.Это зна-
        чение обычно равно 31 или \037.Значение 0 указывает на то,что устро-
        йство ожидает,что координаты курсора д.б. посланы ему в виде симво-
        льной строки.
 BASE - N первой строки экрана терминала.Обычно либо 1,либо 0.
 LC_TABLE - имя,присвоенное данному терминалу в таблице GOTO_LC.Если GOTO_LC
            не имеет соответствующей записи,это значение NULL.
 LINES - количество строк на экране терминала.
 COLUMNS - количество символов на каждой строке терминала.
 MSGL - N строки экрана,на которую выдаются сообщения.
 MODL - N строки экрана,на которую выдается состояние.
 CLEARSCREEN - команда,используемая для стирания экрана,когда курсор распо-
               ложен в верхнем левом углу.
 BACKSPACE - команда для передвижения курсора на одну позицию левее.Для бо-
             льшинства асинхронных устройств значение равно \008.
 FORESPACE - команда для передвижения курсора на одну позицию правее.В каче-
             стве значения неприемлем пробел.
 GOTO_CL - команда для расположения курсора в заданную строку и колонку.Ис-
           пользуется \y для координат строки и \x для координат колонки.В
           этой колонке таблицы могут использоваться только в последователь-
           ности \y и \x).Более подробно о задании координат курсора см.
           "Идентификатор заголовка".
 CLEARLINE - команда стирания строки независимо от положения курсора.
 TSET - команда инициализации терминала для использования.Посылается в каче-
        стве первой команды утилитам ORACLE,использующим видеотеримналы.Нап-
        ример,SQL*Form может изменить характеристики SETUP терминалов фирмы
        DEC (и перестроить их,используя TRSET).
 TRSET - команда,деинициализирующая терминал после его использования.Посыла-
         ется в качестве последней команды утилитами ORACLE,использующими
         видеотерминалы.Например,SQL*Form восстанавливает характеристики
         SETUP терминалов фирмы DEC,которые были установлены командой TSET.
 ATT1 - команда,включающая видеоатрибут 1 (обычно негативное изображение).
        Используется SQL*Form для выделения вводимых полей на экране; не ис-
        пользуется SQL*Calc.IAD использует только видеоатрибут 1.
 ATT2 - команда,включающая видеоатрибут 2 (обычно подчеркивание символов).
        Используется в SQL*Form для значений во вспомогательных (HELP) экра-
        нных формах; не используется SQL*Calc.
 ATTOFF - это управляющая последовательность,отменяющая действие видеоатри-
          бутов.
 WINDOW - команда для создания на экране области "свертки",состоящей из нес-
          кольких последовательных строк экрана.Для указания верхней и ниж-
          ней строки используются \t и \b (последовательности \t и \b могут
          использоваться только в этой колонке,они не имеют смысла в других
          колонках).Более подробно о задании координат курсора см."Идентифи-
          катор заголовка".
 SCRUP - команда,сдвигающая область "свертки" на одну строку вверх.
 SCRDN - команда,сдвигающая область "свертки" на одну строку вниз.
 GRAPHON - команда включения графического режима терминального устройства.
           Последующие символы интерпретируются устройством как данные гра-
           фики,а не символьные данные.Если устройство не графическое,значе-
           ние в этой колонке д.б. равно NULL.
 GRAPHOFF - команда выключения графического режима терминального устройства.
            Последующие символы интерпретируются устройством как символьные
            данные,а не данные графики.Если устройство не графическое,значе-
            ние в этой колонке д.б. равно NULL.
 PROTON - команда включения защиты экрана.
 PROTOFF - команда выключения защиты экрана.
 CLEAREOL - команда стирания участка экрана от текущей позиции курсора до
            конца строки.
 CURSORUP - команда перемещения курсора на одну позицию вверх.
 CURSORDOWN - команда перемещения курсора на одну позицию вниз.
 TOP2X - эта команда применяется для изображения символов двойной высоты и
         двойной ширины,начиная с позиции,обозначенной курсором.TOP2X указы-
         вает,что на этой строке экрана будут отображаться верхние половины
         символов двойной высоты и двойной ширины.Используется совместно с
         командой BOTTOM2X.
 BOTTOM2X - эта команда применяется для изображения символов двойной высоты
            и двойной ширины,начиная с позиции,обозначенной курсором.
            BOTTOM2X указывает,что на этой строке экрана будут отображаться
            нижние половины символов двойной высоты и двойной ширины.Исполь-
            зуется совместно с командой TOP2X.
 ATT3 - команда включения произвольных характеристик экрана,таких как повы-
        шенная яркость или четкость.Используется в SQL*Forms и не используе-
        тся в SQL*Calc.
 ATT1_3 - команда включения произвольных характеристик экрана,таких как по-
          вышенная яркость или четкость.Используется в SQL*Forms и не испо-
          льзуется в SQL*Calc.
 ATT2_3 - команда включения произвольных характеристик экрана,таких как по-
          вышенная яркость или четкость.Используется в SQL*Forms и не испо-
          льзуется в SQL*Calc.
 ATT1_2_3 - команда включения произвольных характеристик экрана,таких как
            повышенная яркость или четкость.Используется в SQL*Forms и не
            используется в SQL*Calc.
 ATT_BOLD - команда включения повышенной яркости или четкости.Используется в
            SQL*Calc,не используется в SQL*Forms.
 ATT_FLASH - команда включения мигания участка экрана.Используется в SQL*
             Calc,не используется в SQL*Forms.
 ATT_REVRS - команда включения негативного изображения.Используется в SQL*
             Calc,не используется в SQL*Forms.
 ATT_UNDER - команда включения подчеркивания символов.Используется в SQL*
             Calc,не используется в SQL*Forms.

   Необходимо отметить следующие особенности значений,содержащихся в отдель-
ных колонках (такие как ATT1 или ATT2_3):
 - все значения ATT колонок,за исключением ATTOFF посылаются на терминал не-
   медленно после того,как на устройство послана управляющая последователь-
   ность ATTOFF.Поэтому когда вводится управляющая последовательность,опре-
   деляющая атрибуты терминала,необходимо ввести только те последовательно-
   сти,которые включают ранее выключенные атрибуты терминала (т.е.атрибуты
   перед установкой не требуется предварительно отключать);
 - сразу после управляющей последовательности ATTOFF на терминал м.б. посла-
   но несколько управляющих последовательностей,устанавливающих атрибуты
   "повышенная яркость","мигание","подчеркивание" и "негативное изображе-
   ние";
 - не существует никакой взаимосвязи между значениями в колонках с числовыми
   именами (такими как ATT_1) и значениями в колонках с символьными именами
   (таких как ATT_BOLD);
 - каждое значение колонок ATTx действительно используется для включения
   произвольной характеристики экрана,необязательно являясь комбинацией 2
   других характеристик.Например,значение в колонке ATT2_3 необязательно ра-
   вно комбинации значений колонок ATT2 и ATT3;
 - управляющие последовательности,определяющие атрибуты терминалов,по-разно-
   му используются в различных продуктах ORACLE.В настоящее время SQL*Forms
   использует только числовые колонки (такие как ATT_1),в то время как SQL*
   Calc использует только значения в колонках с символьными именами (такими
   как ATT_BOLD).
 - хотя в этом руководстве указывается,как в настоящее время компоненты
   ORACLE используют приведенные атрибуты,вероятно,что с течением времени
   будут внесены изменения.Поэтому необходимо сверять приведенные в руковод-
   стве данные с уточнениями к реализации системы.

                          Таблица SYSTEM.CRTBOX
   В этой таблице каждая запись описывает характеристики одного терминала.
Каждая колонка содержит символ,который используется для выдачи на экран или
для печати псевдографического изображения.Все колонки,за исключением колонки
CRTNAME,содержат один символ.Ниже приводится описание колонок таблицы
SYSTEM.CRTBOX.
 CRTNAME - имя видеотерминала такое,как записано в таблице CRT.
 CMODE - указатель наличия графического режима.Если значение равно Y ("Да"),
         то IAD будет использовать последующие символы для вывода на экран
         терминала или печати файла.
 BOX_BV - символ,которым обозначаются вертикальные линии при изображении
          прямоугольника на видеотерминале.
 BOX_BH - символ,которым обозначаются горизонтальные линии при изображении
          прямоугольника на видеотерминале.
 BOX_CUL - символ,которым обозначается верхний левый угол при изображении
           прямоугольника на видеотерминале.
 BOX_CUR - символ,которым обозначается верхний правый угол при изображении
           прямоугольника на видеотерминале.
 BOX_CBL - символ,которым обозначается нижний левый угол при изображении
           прямоугольника на видеотерминале.
 BOX_CBR - символ,которым обозначается нижний правый угол при изображении
           прямоугольника на видеотерминале.
 BOX_TL - символ,которым обозначается примыкание вертикальной линии к гори-
          зонтальной слева при изображении на видеотерминале.
 BOX_TR - символ,которым обозначается примыкание вертикальной линии к гори-
          зонтальной справа при изображении на видеотерминале.
 BOX_TU - символ,которым обозначается примыкание вертикальной линии к гори-
          зонтальной снизу при изображении на видеотерминале.
 BOX_TB - символ,которым обозначается примыкание вертикальной линии к гори-
          зонтальной сверху при изображении на видеотерминале.
 BOX_X - символ,которым обозначается пересечение вертикальной и горизонталь-
         ной линий.
 PRT_BV - символ,которым обозначаются вертикальные линии при выводе на печа-
          тающее устройство.
 PRT_BH - символ,которым обозначаются горизонтальные линии при выводе на пе-
          чатающее устройство.
 PRT_CUL - символ,которым обозначается верхний левый угол при выводе на пе-
           чатающее устройство.
 PRT_CUR - символ,которым обозначается верхний правый угол при выводе на пе-
           чатающее устройство.
 PRT_CBL - символ,которым обозначается нижний левый угол при выводе на печа-
           тающее устройство.
 PRT_CBR - символ,которым обозначается нижний правый угол при выводе на пе-
           чатающее устройство.
 PRT_TL - символ,которым обозначается примыкание вертикальной линии к гори-
          зонтальной слева при выводе на печать.
 PRT_TR - символ,которым обозначается примыкание вертикальной линии к гори-
          зонтальной справа при выводе на печатающее устройство.
 PRT_TU - символ,которым обозначается примыкание вертикальной линии к гори-
          зонтальной снизу при выводе на печатающее устройство.
 PRT_TB - символ,которым обозначается примыкание вертикальной линии к гори-
          зонтальной сверху при выводе на печатающее устройство.
 PRT_X - символ,которым обозначается пересечение вертикальной и горизонталь-
         ной линий при выводе на печатающее устройство.

                        Таблица SYSTEM.CRT_PRODUCTS
   В этой таблице содержится код программного продукта ORACLE,использующего
видеотерминалы.Таблица состоит из следующих колонок:
 PROD_CODE - код до 6 символов длиной,присваиваемый программному продукту.
             Этот код используется в таблицах ESC и FUNCTIONS.
 PROD_NAME - имя программного продукта,использующего видеотерминал.

       Таблица содержит записи для SQL*Forms,SQL*Calc и SQL*Menu.
Несмотря на то,что SQL*Calc использует утилиту CRT,она не использует ее для
определения ключевых функций,и поэтому в таблице CRT_PRODUCTS нет записей
для Easy*SQL.

                          Таблица SYSTEM.CRT_TYPE
   Эта таблица содержит сведения о типе видеотерминала (синхронное или асин-
хронное устройство).Обычно нет необходимости изменять эту таблицу.Она испо-
льзуется для проверки записей в таблице CRT.Таблица состоит из следующих ко-
лонок:
   NUM - одна из следующих цифр:
       - 1 - асинхронное устройство;
       - 2 - синхронное устройство,отличное от 3270 типа;
       - 3 - синхронное устройство типа 3270.
   TYPE - двухсимвольный код,идентифицирующий устройство.
   DESCRIPTION - текст,описывающий тип устройства.

                 Эта таблица выглядит следующим образом:
 SELECT * FROM CRT_TYPE:

   NUM TYPE    DESCRIPTION
 -------- ---------- -------------------------------
    1 CHAR    Character oriented terminal
    2 BLOCK    Block Mode with hidden attributеs
    3 3270    3270 look alike

                            Таблица SYSTEM.ESC
   Эта таблица содержит по несколько записей для каждого терминала,каждая из
которых описывает связь программного продукта ORACLE с именем терминала,фун-
кцией программы и клавишей терминала.Таблица состоит из следующих колонок:
 PROD_CODE - код,присвоенный утилите ORACLE,использующей видеотерминал.
 NAME - код терминала,соответствующий коду в таблице CRT.
 FUNC - код функции терминала,соответствующий коду,используемому в таблице
        FUNCTIONS.
 ESCSEQ - символьная последовательность,генерируемая терминалом при нажатии
          соответствующей функциональной клавиши.Последовательность задается
          в форме \nnn,где nnn - три 8-ных цифры.Для избежания конфликта с
          обычными данными эта последовательность должна начинаться с симво-
          ла,который нельзя сгенерировать путем нажатия клавиши на термина-
          ле.Нужно обратить внимание на то,что необходимо вводить видимое
          представление непечатаемых символов.Например,на терминале VT100
          символ  представляется как \032,а символ - как \e.
 COMMENTS - описание функциональной клавиши,используемое во вспомогательной
            экранной форме (HELP) для пользователей.

                        Таблица SYSTEM.FUNCTIONS
   Эта таблица содержит список программных продуктов ORACLE,используемых ви-
деотерминалами,таких как SQL*Forms и SQL*Menu вместе с функциями экрана,ко-
торые им требуются,и соответствующие этим функциям коды.Эта таблица не долж-
на изменяться,иначе поведение SQL*Forms непредсказуемо.Таблица состоит из
следующих колонок:
 PROD_CODE - 3-символьный код,присваиемый утилитам ORACLE,которые используют
             CRT.Этот код соответствует коду в таблице CRT_PRODUCTS.
 FUNCN - целое,присваиваемое комбинации функция/продукт.
 FUNC - 2-символьный код,присваиваемый функции.Этот код используется в таб-
        лице ESC.
 FNAME - описание функции,такое как "переместить курсор вверх".
   Список кодов функций и их описание для компонентов SQL*Forms (IAP) и
SQL*Menu приведен в приложении E "Коды функций терминалов для утилиты CRT".

                           Таблица SYSTEM.GOTO_LC
   Некоторым терминалам требуется таблица SYSTEM.GOTO_LC для преобразования
адреса курсора,заданного в строках и колонках экрана,в координаты,используе-
мые ORACLE.Эта таблица нужна не для всех терминалов,а только для тех,у кото-
рых адреса строки и колонки экрана не представляют собой возрастающую после-
довательность чисел (и не могут поэтому быть вычислены как N строки или ко-
лонки плюс значение BASE плюс OFFSET).
   Если координаты строки CRT не м.б. вычислены,таблица GOTO_LC должна соде-
ржать набор записей (одна запись на строку),преобразующих N строки в коорди-
наты строки.Аналогично,если координаты колонки CRT не м.б. вычислены,таблица
GOTO_LC должна содержать набор записей (одна запись на строку),преобразующих
N колонки в координаты колонки.Если не м.б. вычислены ни координаты строки,
ни координаты колонки,то таблица должна содержать оба набора записей.Таблица
содержит следующие колонки:
 NAME - имя терминала,соответствующее колонке NAME в таблице CRT.
 TYPE - тип координаты,описываемой в этой записи.Допустимые значения:
      - L - координаты строки экрана
      - C - координаты колонки экрана
 VALUE - N строки или колонки,координиты которой определяются в этой записи.
 ESCSEQ - последовательность символов,которые являются координатой описывае-
          мой в этой записи строки или колонки.

                  ДОБАВЛЕНИЕ ОПИСАНИЯ НОВОГО ТЕРМИНАЛА
   Для того,чтобы добавить в таблицы описание нового терминала,можно либо
использовать экранную форму CRT,занося в нее необходимую информацию,либо ис-
пользовать SQL*Plus для занесения этой информации непосредственно в таблицы.

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

                   Использование экранной формы CRT
   Для занесения описания нового терминала с помощью формы CRT необходимо
выполнить следующие шаги:
   1.Если файл CRT.FRM уже существует,можно ввести команду
                            IAP CRT

   Если версия FRM еще не создана,ее можно создать,выполнив команду
                          IAG CRT -T   ,

а затем выполнить первую команду,которая высвечивает форму CRT на экране ви-
деотерминала.Форма CRT состоит из 2 страниц,внешний вид которых представлен
на рис.18 и 19.
   2.Заполнить форму,задав необходимые атрибуты нового видеотерминала и же-
лаемые значения функциональных клавиш.
   3.Закончить работу с экранной формой и сгенерировать файл CRT с помощью
программы CRT (см.Запуск программы CRT ниже).Необходимо убедиться,что в ко-
мандной строке задано то же время,что и на первой странице формы CRT.
---------------------------------------------------------------+
|     Crt Name: ______         Type: _______    |
|                                |
| Columns: ___  Lines: __ Mode Line: ___ Message Line: _ Base:_|
|                                |
| Terminal Setup:________   Term Reset: ____________     |
|   Graphics On:________  Graphics Off: ____________     |
|   Protect On:________  Protect Off: ____________     |
|     2X Top:________   2X Bottom: ____________     |
|                                |
| Clearscreen: _______  Clear Line: _______  Clear to EOL:___|
|Create Window: _______  Scroll Up: _______  Scroll Down: __|
|  C-L Offset: __     Goto C-L: _______    C-L Map: __|
|                                |
| Cursor Left: ___  Right: ________  Up: ___  Down: _______|
|                                |
|  Video Bold: ___  Flash: ________ Revrs: ___  Under: ______|
| Attribs Off: ___    1: ________   2: ___    3: ______|
|    1+2+3: ___   1+2: ________  2+3: ___   1+3" ______|
+---------------------------------------------------------------+
        Рис.18.Экранная форма CRT.Страница 1

+---------------------------------------------------------------+
|     Graphics (Y/N): ___          Screen Printer |                  Vertical line:  -       -
|                Horizontal line:  -   -  |
| Crt Name          Upper left corner:  -   -  |
|___________         Upper right corner:  -   -  |
|               Lower left corner:  -   -  |
|              Lower right corner:  -   -  |
|                  Left-side T:  -   -  |
|                 Right-side T:  -   -  |
|                   Upright T:  -   -  |
|                  Inverted T:  -   -  |
|                   Cross (+):  -   -  |
| Prod Fn                           |
| Code Cd  Function Description   Escape Sequence Comments |
| ___ ___  ____________________   _______________ ________ |
| ___ ___  ____________________   _______________ ________ |
| ___ ___  ____________________   _______________ ________ |
+---------------------------------------------------------------+
          Рис.19.Экранная форма CRT.Страница 2

                         С помощью языка SQL*Plus
   Для того,чтобы занести описание нового терминала с помощью SQL*Plus,необ-
ходимо выполнить следующие шаги:
   1.Получить доступ к таблицам,указанным на рис.17.Обычно эти таблицы при-
надлежат администратору БД с именем SYSTEM.
   2.Вставить записи,описывающие основные свойства терминала,в соответствую-
щие таблицы CRT.
   3.Вставить несколько записей в таблицу ESC для назначения клавишам терми-
нала функций программного продукта ORACLE.
   4.Если команды установки курсора для нового терминала используют невычис-
ляемые коды,вставляется несколько записей в таблицу GOTO_LC.
   5.Запустить программу CRT для создания файла к новому устройству.

                        Задание координат курсора
   Расположение курсора на строке и колонке экрана м.б. выражено либо в виде
символьной строки,либо в виде единственного символа,чье 2-ное значение равно
значению координаты плюс константа.Если координаты курсора не м.б. выражены
в виде номеров строки или колонки плюс константа,то для преобразования номе-
ров строки и колонки в координаты д.б. использована таблица GOTO_LC.
   В таблице GOTO_LC термин "координата курсора" имеет точное значение: он
ссылается на число,которое д.б. послано на видеотерминал как часть команды,
располагающей курсор на заданной строке и/или колонке.Число м.б. передано на
терминал в виде строки ASCII символов,либо в 2-ной форме (в виде единствен-
ного байта),но оно не д.б. обязательно равным номеру строки или колонки и,
даже номеру строки или колонки плюс константа.
   Значение управляющих последовательностей '\x','\y' и '\t','\b' заменяются
одним или несколькими символами,которые представляют позицию строки или ко-
лонки и определяются следующими правилами:
   1.Если базовое значение равно 0,то строки и колонки экрана нумеруются на-
чиная с 0.Если базовое значение равно 1,то строки и колонки экрана нумеруют-
ся начиная с 1.Исключением является случай,когда используется таблица преоб-
разования координат; в этом случае строки и колонки нумеруются начиная с 1.
Базовые значения,отличные от 0 и 1,не допускаются.
   2.Если применяется таблица преобразований координат,то используется сим-
вольная строка,соответствующая позиции строки или колонки экрана.Строки и
колонки в этом случае всегда отсчитываются от 1 (т.е.верхняя строка и левая
колонка имеют N 1) независимо от значения в колонке BASE таблицы CRT.Количе-
ство записей,относящихся к строкам и колонкам,д.б. точно таким,как и их ко-
личество на экране терминала.Кроме того,использование таблицы преобразования
координат - единственный способ раздельного преобразования координат строк и
колонок.
   3.Если используется смещение (OFFSET),символьная строка,представляющая
позицию строки или колонки экрана,является единственным символом,чье 2-ное
(BINARY) значение равно смещению плюс N строки или колонки.Например,символ,
представляющий верхнюю строку или левую колонку,будет иметь 2-ное значение,
равное смещению,если базовое значение равно0.Смещение не может иметь отрица-
тельное значение.Кроме того,смещение не может иметь также значение 0,если
базовое значение также равно 0.
   4.Если значение смещения не указано и не используется таблица преобразо-
вания координат,то используется символьная строка с 10-ным (DECIMAL) предс-
тавлением позиции строки или колонки.Например,верхняя строка экрана будет
представлена символьной строкой '0',если базовое значение равно 0,или '1',
если базовое значение равно 1.

               МОДИФИКАЦИЯ СУЩЕСТВУЮЩИХ ОПИСАНИЙ ТЕРМИНАЛОВ
   Изменить существующее описание терминала можно двумя способами:
 - используя экранную форму CRT;
 - используя SQL*Plus для непосредственной модификации таблицы ESC.

                         ЗАПУСК ПРОГРАММЫ CRT
   После того,как в таблицы БД введено описание нового терминала,необходимо
создать для него файл CRT,запустив программу CRT.Синтаксис команды CRT,осу-
ществляющей запуск программы,приведен на рис.20.
  -----------------------------------------------------+
 | CRT <имя_терминала> [имя_пользователя/пароль] [-d?] |
  -----------------------------------------------------+
      Рис.20.Синтаксис команды CRT

   Имя терминала,указанного в командной строке,должно соответствовать имени
терминала в таблицах CRT,ESC и CRTBOX.Если опция d не используется,то имя
.CRT файла по умолчанию DEFAULT.CRT.Местоположение .CRT файла зависит от OC.
   Пользователь,вызывающий программу CRT,должен иметь доступ ко всем табли-
цам,приведенным на рис.17.

                     УСТАНОВКА/ИНИЦИАЛИЗАЦИЯ CRT
             (ОТВЕТСТВЕННОСТЬ АДМИНИСТРАТОРА БАЗ ДАННЫХ)
   В отношении использования программы CRT и описаний терминалов администра-
тор БД несет ответственность за:
 - создание и загрузку таблиц CRT в БД с помощью файла CRTINS;
 - указывает терминал (в ответ на запрос программы CRTINS),описание которого
   используется по умолчанию;
 - предоставляет доступ к набору таблиц CRT разработчикам прикладных прог-
   рамм,которым может потребоваться модификация описаний терминалов;
 - убеждается,что пользователи прикладных программ знают назначение функцио-
   нальных клавиш в используемых ими программах,обращающихся к ORACLE.

                     CОВЕТЫ ПО ИСПОЛЬЗОВАНИЮ CRT
   Версия 2 SQL*Forms поддерживает дисплей со 132 колонками на экране.Экран-
ная форма в этом случае д.б. определена,используя .CRT файл,поддерживающий
132 колонки,и выполняться также с его использованием.В других случаях никог-
да нет необходимости иметь 2 .CRT файла.

+            ЧАСТЬ III.СТРУКТУРА БАЗЫ ДАННЫХ CИСТЕМЫ ORACLE
   Эта часть подробно описывает,как данные хранятся в БД.Первая глава описы-
вает словарь данных,который присутствует во всех БД и является основным сп-
равочником для поиска данных.В следующей главе описывается хранение данных,
начиная от БД в целом и кончая детальным описанием типов данных.

                 ГЛАВА 7.СЛОВАРЬ ДАННЫХ СИСТЕМЫ ORACLE
   В этой главе описывается создание и назначение таблиц БД,называемых сло-
варем данных.Список колонок таблиц приводится в приложении В.
   Одной из наиболее важных частей СУРБД ORACLE является словарь данных.Сло-
варь данных представляет собой набор таблиц,автоматически создаваемых и об-
новляемых,в которые устанавливаются имена и описания пользователей,таблиц и
виртуальных таблиц,информация о привилегиях пользователей и о расположении
данных в памяти.Другими словами - это ценный источник информации о БД.Каждый
пользователь использует словарь данных в качестве справочника.Пользователь с
привилегиями DBA использует словарь данных для того,чтобы контролировать ис-
пользование СУРБД ORACLE и оказывать помощь пользователям в разработке прик-
ладных программ.И наконец,СУРБД ORACLE cама использует словарь данных для
того,чтобы производить запись,проверку данных и вести свою постоянную работу.

                      ЧТО ТАКОЕ СЛОВАРЬ ДАННЫХ?
   Словарь данных - это набор таблиц и виртуальных таблиц автоматически соз-
даваемых и обновляемых ORACLE,с тем чтобы использовать их в качестве справо-
чника о данных,их расположении в памяти и пользователях.Например,словарь да-
нных может сообщать: - идентифицировать пользователей ORACLE; - имена объек-
тов БД,которыми владеют пользователи (таблиц,определений пространства памя-
ти,виртуальных таблиц,индексов,кластеров,синонимов); - сколько памяти выде-
лено и сколько используется объектами; - права и привилегии,предоставленные
пользователям.
   Словарь данных обычно создается во время установки ORACLE путем использо-
вания SQL*Plus для выполнения файла CATALOG.ORA.После этого словарь данных
всегда доступен для ссылок любому пользователю,независимо от того,имеет этот
пользователь созданные им таблицы или нет.
   Для того,чтобы просмотреть начальный список виртуальных таблиц (VIEW)
словаря,доступных всем пользователям словаря,нужно ввести следующее предло-
жение языка SQL:
                       SELECT * FROM DTAB;

   В результате на экране терминала появится следующая таблица:
    TNAME                    REMARKS
-----------  --------------------------------------------------
Reference   ORACLE catalog as of 10-May-84,installed on 
Date
AUDIT_ACCESS  Audit entries for accesses to user's tables/views
        (DBA sees all)
AUDIT_ACTIONS Maps auditing action numbers to action names
AUDIT_CONNECT Audit trail entries for user logon/logoff (DBA sees all users)
AUDIT_DBA   Audit trail entries for DBA activities -- for DBA use only
AUDIT_EXISTS  Audit trail entries for objects which do NOT EXIST - DBA's only
AUDIT_TRAIL  Audit trail entries relevant to the user (DBA sees all)
CATALOG    Profile of tables accessible to user,excluding data dictionary
CLUSTERS    Clusters and their tables (either must be accessible to user)
CLUSTERCOLUMNS Maps cluster columns to clustered table columns
COL      Specifications of columns in tables created by the user
COLUMNS    Specifications of columns in tables (excluding data dictionary)
DBLINKS    Public and private links to external databases
DEFAULT_AUDIT Default table auditing options
DTAB      Description of tables & views in Oracle Data Dictionary
EXTENTS    Data structure of extents within tables
INDEXES    Indexes created by user & indexes on tables created by user
PARTITIONS   File structure of files within partitions -- for DBA use only
PRIVATESYN   Private synonyms created by the user
PUBLICSYN   Public synonyms
SESSIONS    Record of login sessions for user
SPACES     Selection of space definitions for creating tables & clusters
STORAGE    Data and Index storage allocation for user's own tables
SYNONYMS    Synonyms,private and public
SYSAUDIT_TRAIL Synonym for sys.audit_trail -- for DBA use only
SYSCATALOG   Profile of tables and views accessible to the user
SYSCOLAUTH   Directory of column level update grants by or to the user
SYSCOLUMNS   Specifications of columns in accessible tables and views
SYSDBLINKS   All links to external databases --for DBA use only
SYSEXTENTS   Data structure of tables throughout system -- for DBA use only
SYSINDEXES   List of indexes,underlying columns,creator,and options
SYSPROGS    List of programs precompiled by user
SYSSTOPAGE   Summary of all database storage -- for DBA use only
SYSTABALLOC  Data and index space allocations for all tables -- for DBA's
SYSTABAUTH   Directory of access authorization granted by or fo the user
SYSTEM_AUDIT  System auditing options -- for DBA use only
SYSUSERAUTH  Master list of Oracle users -- for DBA use only
SYSUSERLIST  List of Oracle users
SYSVIEWS    Quotations of the SQL text upon which system views are based
TAB      List of tables,views,clusters and synonyms created by the user
TABALLOC    Data and index space allocations for all user's tables
TABQUOTAS   Table allocation (space) parameters for tables created by user
TABLE_AUDIT  Auditing options of user's tables and views (DBA sees all)
VIEWS     Quotations of the SQL statements upon which views are based
44 records selected
                         где

Reference   Каталог ORACLE по состоянию на 10-Mая-84,установленный
Date      <дата/время>
AUDIT_ACCESS  Записи регистрационного контроля о доступе к таблицам БД и ви-
              ртуальным таблицам пользователей
AUDIT_ACTIONS Соответствие между номерами и именами действий регистрационно-
              го контроля
AUDIT_CONNECT Записи регистрационного контроля о входе/выходе пользователей
              в систему (администратор БД видит все записи)
AUDIT_DBA     Записи регистрационного контроля о деятельности администратора
              БД -- только для него
AUDIT_EXISTS  Записи регистрационного контроля о "несуществующих"  (NOT
              EXIST) объектах -- только для администратора БД
AUDIT_TRAIL   Записи регистрационного контроля,относящиеся к пользователю
              (администратор БД видит все записи)
SYSTABAUTH    Доступ предоставленный пользователю или пользователем
SYSTEM_AUDIT  Системные опции контроля -- только для администратора БД
SYSUSERAUTH   Основной список пользователей ORACLE -- только для администра-
              тора БД
SYSUSERLIST   Список пользователей ORACLE
SYSVIEWS     Текст предложений SQL,описывающих системные виртуальные таблицы
TAB           Список таблиц,кластеров и синонимов,созданных  пользователем
TABALLOC      Выделенное под данные и индексы пространство памяти для всех
              таблиц пользователей
TABQUOTAS     Параметры выделения памяти для таблиц,созданных пользователем
TABLE_AUDIT   Опции контроля за таблицами пользователя (администратор БД ви-
              дит все записи)
VIEWS         Текст предложений SQL,описывающих виртуальные таблицы

   Несмотря на то,что колонка этой таблицы называется TNAME (имена таблиц),
таблицы в этой колонке на самом деле являются виртуальными таблицами.Таблица
DTAB создается при работе CATALOG.ORA,более того,единственными данными,кото-
рые изменяются в ней,являются содержащиеся в первой строке дата и время пос-
леднего выполнения CATALOG.ORA.
   Доступ к словарю данных ничем не отличается от доступа ко всем остальным
данным.Словарь представляет собой всего лишь набор предварительно определен-
ных таблиц и виртуальных таблиц,чьи колонки и записи не отличаются,в сущнос-
ти,от создаваемых в своих таблицах пользователем.Например,для того,чтобы по-
льзователь увидел,владельцем каких таблиц он является,он должен ввести:
                          SELECT * FROM TAB;

 TAB - это виртуальная таблица словаря данных,содержащая имена и типы объек-
       тов,владельцем которых является данный пользователь ORACLE.
 CATALOG    Список таблиц доступных пользователю исключая словарь данных
CLUSTERS    Кластеры и их таблицы (те и другие д.б. доступны пользователю)
CLUSTERCOLUMNS Соответствие колонок кластера и колонок кластеризованных таб-
               лиц
COL      Спецификации колонок таблиц,созданных пользователем
COLUMNS    Спецификации колонок таблиц (за исключением словаря данных)
DBLINKS    Групповые и личные связи с внешними БД
DEFAULT_AUDIT Опции контроля таблиц по умолчанию
DTAB      Описание таблиц и виртуальных таблиц словаря данных
EXTENTS    Структура экстентов данных в таблицах
INDEXES    Индексы созданные пользователем
PARTITIONS   Структура файлов в разделах только для администратора БД
PRIVATESYN   Частные синонимы созданные пользователем
PUBLICSYN   Общие синонимыs
SESSIONS    Записи о входе пользователя в систему
SPACES     Описания пространства памяти для создания таблиц и кластеров
STORAGE    Выделенная под данные и индексы память для таблиц пользователя
SYNONYMS    Синонимы,частные и общие
SYSAUDIT_TRAIL Синоним для sys.audit_trail -- только для админи стратора БД
SYSCATALOG   Список таблиц и виртуальных таблиц доступных пользователю
SYSCOLAUTH   Доступ к обновлению колонок предоставленный пользователю или
             пользователем
SYSCOLUMNS  Спецификации колонок в доступных таблицах и виртуальных таблицах
SYSDBLINKS   Все связи с внешними БД только для администратора
SYSEXTENTS   Структура данных таблиц всей системы -- только для администра-
             тора
SYSINDEXES   Список индексов,индексированных колонок,создателей и опций
SYSPROGS    Список программ,прекомпилированных пользователем
SYSSTOPAGE   Краткие сведения о распределении памяти для всей БД -- только
             для администратора БД
SYSTABALLOC  Выделенное под данные и индексы пространство памяти для всех
             таблиц -- только для администратора БД

              КАК СОЗДАЕТСЯ И ОБНОВЛЯЕТСЯ СЛОВАРЬ ДАННЫХ?
   Словарь данных состоит из нескольких таблиц и нескольких виртуальных таб-
лиц,базирующихся на этих таблицах.Таблицы постоянно обновляются СУРБД ORACLE
во время системных операций,но редко используются пользователями непосредст-
венно потому,что информация в них нормализована и многие из них используют
числовые ключи,а не легко понимаемые имена.
   Виртуальные же таблицы "декодируют" значения числовых ключей в понятные
имена пользователей и таблиц,и используют объединение таблиц и выборку из
них по условию.Поэтому виртуальные таблицы содержат ту же информацию в форме
более удобной для пользователей.
   Таблицы автоматически создаются во время старта системы командой IOR INIT
и принадлежат пользователю с именем SYS.Большинство основных таблиц может
просматриваться пользователем (несмотря на то,что по умолчанию к ним имеют
доступ пользователи с привилегиями DBA).В число этих таблиц входят таблицы с
именами SYS.TABLES,SYS.USERS,SYS.EXTENTS и SYS.COLUMNS.
   Таблицы,принадлежащие пользователю SYSTEM,автоматически не создаются,а
создаются на каждой установленной системе с помощью файла CATALOG.ORA,испо-
льзуя SQL*Plus.
   Во время своей работы СУРБД ORACLE постоянно обновляет таблицы словаря
данных.Естественно,что виртуальные таблицы не обновляются,т.к. они всегда
только ссылаются на данные,содержащиеся в реальных таблицах.
   Например,если пользователь с именем NANCY создает таблицу с именем PARTS,
то в таблицу SYS.TABLES заносится новая запись,фиксирующая тот факт,что таб-
лица PARTS принадлежит NANCY.Когда Нэнси вводит предложение языка SQL
(CREATE TABLE) в таблицу SYS.TABLES и некоторые другие таблицы словаря дан-
ных автоматически заносятся новые записи.Если после этого пользователь NANCY
просмотрит виртуальную таблицу TAB,он увидит,что в таблицу занесено имя
PARTS.
   Пользователь никогда не изменяет самостоятельно содержимое таблиц словаря
данных,которые создала ORACLE (за очень небольшими исключениями,как это от-
мечено ниже).

           ЗАМЕЧАНИЯ ОБ ОСОБЕННОСТЯХ НЕКОТОРЫХ ТАБЛИЦ СЛОВАРЯ
   Так,таблицы словаря данных читаются часто и объединяются одним и тем же
способом,некоторые таблицы объединены в кластеры.Например,таблицы SYS.TABLES
и SYS.COLUMNS объединены в кластер по колонкам TABLES.TAB$PID,TABLES.TAB$RBA
и COLUMNS.COL$PID,COLUMNS.COL$RBA.

                  ДОБАВЛЕНИЕ НОВЫХ КОМПОНЕНТ СЛОВАРЯ ДАННЫХ
   Несмотря на то,что изменять существующие таблицы словаря данных чрезвыча-
йно опасно,разрешается добавлять к словарю новые таблицы или новые виртуаль-
ные таблицы,базирующиеся на уже существующих.Однако,для того,чтобы гаранти-
ровать,что словарь данных в том виде,каким он был при установке системы,не
будет случайно изменен,рекомендуется владельцам всех новых объектов сделать
пользователя SYSTEM,или создать третьего пользователя с привилегиями DBA,
чтобы владельцем новых объектов был он.

                     ОБНОВЛЕНИЕ СЛОВАРЯ ДАННЫХ ВРУЧНУЮ
   За очень небольшими исключениями пользователи не могут изменять таблицы
словаря данных,то есть выполнять операции DROP TABLE и ALTER TABLE или
DELETE,INSERT и DELETE по отношению к этим таблицам.Однако,если ведется ре-
гистрационный журнал (см.раздел "Подключение регистрационного контроля" ),
то может оказаться необходимым удалить данные из таблицы SYS.AUDIT_TRAIL.Эта
таблица растет со скоростью,которая зависит от общей загрузки системы и от
того,какие опции использовались при запуске системы регистрации.В отличие от
других таблиц словаря данных,она доступна для удаления записей.Однако изме-
нять содержимое таблицы или уничтожать ее нельзя.
   Администратор БД может предоставлять доступ другим пользователям и лишать
доступа к виртуальным таблицам словаря данных,в тех случаях,когда он хочет
изменить доступ предоставленный при установке системы по умолчанию.

+               ГЛАВА 8.КАК ДАННЫЕ ХРАНЯТСЯ В БАЗЕ ДАННЫХ?
   В этой главе описывается,как данные хранятся в БД,начиная с общих положе-
ний до наиболее подробных деталей,от описания структуры БД и того,какие эле-
менты составляют БД,до различных типов данных.Также обсуждаются преобразова-
ние данных и временные таблицы.

                              ФАЙЛ БАЗЫ ДАННЫХ
   База данных ORACLE состоит из файла БД (DB файла),под которым понимается
один или несколько разделов,которые в свою очередь состоят из одного или не-
скольких файлов.

                              Файлы и разделы
   Каждая БД состоит,по крайней мере,из одного раздела.В только что установ-
ленных БД всегда имеется раздел с именем SYSTEM.В любое время м.б. добавлены
дополнительные разделы по таким,например,причинам,как размещение в этом раз-
деле данных для отладки.Добавляемым разделам можно присваивать любые имена.
   Разделы являются логическими понятиями.Каждый раздел д.б. связан,по край-
ней мере,с одним физическим файлом.Например,в устанавливаемой системе файл,
имя которого указано в параметре DATABASE файла INIT.ORA,будет связан с раз-
делом SYSTEM.На рис.21 показана структура БД,состоящей из 3 логических раз-
делов и 5 физических файлов.
             +-------------------------+
             |   БАЗА  ДАННЫХ          |
             +-------------------------+
                         |
    +--------------------+----------------------+
    |                    |                      |
+--------------+  +------------------+  +-----------------+
|    Раздел    |  |      Раздел      |  |      Раздел     |
|   "SYSTEM"   |  |      "TESTA"     |  |     "TESTB"     |
+--------------+  +------------------+  +-----------------+
     |                    |                     |
     |             +------+-------+        +----+----+
     |             |              |        |         |
 +---------+   +---------------------+  +---------------+
 |   Файл  |   | Файл | Файл |  Файл |  |  Файл |  Файл |
 | ORA.DBS |   |   1  |   2  |   3   |  |   4   |   5   |
 +---------+   +---------------------+  +---------------+
         Рис.21.Структура БД

   Раздел должен иметь,по крайней мере,один файл.По мере необходимости к ра-
зделу могут подсоединяться дополнительные файлы.Максимальное количество фай-
лов на одну БД (сумма всех файлов во всех разделах) зависит от ОС.Сведения о
максимальном количестве файлов содержатся в руководстве по установке и в ру-
ководстве пользователя для конкретной ОС .Файлы могут располагаться в любом
месте под управлением ОС.
   В одном разделе может содержаться много таблиц БД.Таблица может занимать
любой или даже все сразу файлы раздела,однако таблица не может занимать бо-
лее одного раздела.Для того,чтобы использовать раздел,отличный от раздела
SYSTEM,таблица должна явно быть создана в этом разделе (см.раздел этого ру-
ководства "Указание раздела БД при создании таблицы").Индексы хранятся в том
же самом разделе,что и таблицы,для которых они были созданы.

                              Раздел SYSTEM
   Каждая ORACLE должна иметь раздел SYSTEM.Раздел SYSTEM обычно содержит:
 - таблицы словаря данных;
 - временные таблицы;
 - таблицы с вспомогательной информацией (HELP),если они загружены (прибли-
   зительно 250 блоков ORACLE).
   В большинстве систем эти элементы расположены в разделе SYSTEM,однако,мо-
жно заказать систему,у которой эти элементы будут расположены в другом раз-
деле.
   Когда оценивается размер файла для раздела SYSTEM,следует предусмотреть
достаточно места для этих элементов и для любых данных пользователей,которые
будут введены в раздел SYSTEM.
   Первый (и часто единственный) файл в разделе SYSTEM - это физический фа-
йл,имя которого задано в параметре DATABASE файла INIT.ORA.Администратор БД
может добавлять файлы к разделу SYSTEM в любое время.

                       Добавление разделов и файлов
   Разделы и файлы м.б. добавлены к БД пользователями с привилегиями DBA,но
никогда не м.б. уничтожены или отделены от БД.Разделы добавляются к БД в
SQL*Plus с помощью предложения языка SQL так,как показано на рис.22.В этом
примере в новый раздел добавляется файл.Если бы было необходимо добавить фа-
йшл к разделу SYSTEM,достаточно было бы использовать только предложение
ALTER PARTITION потому,что раздел SYSTEM уже существует.Так как раздел всего
лишь логическое понятие,то с каждым новым разделом д.б. связан физический
файл.Это выполняется предложением ALTER PARTITION ...ADD FILE введенным пос-
ле создания нового раздела.
 +----------------------------------------------------------+
 | SQL> CREATE PARTITION имя_раздела                        |
 |                                                          |
 | Partition created.                                       |
 |                                                          |
 | SQL> ALTER PARTITION имя_раздела ADD FILE 'имя файла'    |
 |                             |                            |
 | Partition altered.                                       |
 +----------------------------------------------------------+
 Рис.22.Синтаксис предложений для добавления раздела и файла

   Спецификация имя файла зависит от OC.Для определения точной спецификации
файлов необходимо обратиться к руководству по установке системы и руководст-
ву пользователя конкретной ОС.
   ЗАМЕЧАНИЕ: В первое время необходимо особенно осторожно относиться к пра-
              вильному указанию имени файла.Если ORACLE не находит файл с
              заданным именем,происходит ошибка.Ошибка возникает также в
              случае,если при назначении файла неправильно указаны либо его
              имя,либо логическая ссылка на файл.Эти ошибки обычно выявляют-
              ся при следующем "теплом" старте командой IOR W.В таких случа-
              ях система выдает сообщение
                        unrecoverable recursion error

при этом возможно единственное решение - переинициализация БД.Поэтому в ка-
честве меры предосторожности рекомендуется копирование,либо экспортирование
всей БД.
   Для того,чтобы добавить или изменить раздел в системах с разделяемыми БД
(таких,как кластер ORACLE на комплексах VAX cluster),то БД д.б. стартована
без опции SHARED перед тем,как произвести изменения структуры.После успешно-
го добавления или изменения раздела необходимо перестартовать систему коман-
дой
                            IOR WARM SHARED

   Нельзя добавлять к БД один и тот же файл дважды.СУРБД ORACLE проиводит
проверку на дублирование имен,но в некоторых ОС для указания файлов исполь-
зуются логические имена и не все эти системы могут определить,не назначены
ли различные логические имена одному и тому же файлу (ОС VMS это может).

                              Утилита CCF
   Для того,чтобы выделить блоки высшей памяти для DB и BI файлов в ORACLE
используется для большинаства ОС специальная утилита CCF (создать последо-
вательный файл).Если ORACLE предполагает использование утилиты CCF,то ее
следует применять для создания всех физмических файлов,используемых систе-
мой,до присвоения их имен параметрам файла INIT.ORA и до добавления их к
разделам.Нельзя применять утилиту CCF к существующим файлам.Утилита CCF пре-
дназначена для создания новых файлов.
   Синтаксис команды,вызывающей утилиту CCF
                                             CCF имя_файла размер,
где
   имя_файла - это имя создаваемого файла.Она м.б. логическим именем в ОС,
               поддерживающих назначения логических имен;
   размер - количество блоков ОС,выдаваемых для создаваемого файла.
Например:
    CCF  ORACLE.DBS 10240

                    Что делать,когда раздел переполняется
   По мере того,как БД заполняется данными,раздел SYSTEM или любой другой
раздел могут переполниться.Если это случится,ORACLE выдаст сообщение:
                       OUT OF SPACE IN PARTITION

   Ниже приводятся 2 запроса,которые администратор БД может использовать для
того,чтобы получить информацию о распределении памяти в БД.Администратор БД
может увидеть количество свободных блоков,допущенных для использования,введя
следующий запрос:
                  SELECT SPM$PID,SPM$ENDBLOCK - SPM$STARTBLOCK + 1
                  FROM  SYS.SPACEMAP;

SPM$PID SPM$ENDBLOCK-SPM$STARTBLOCK+1
------- -----------------------------
   1              1778
   1              304
   1               66
   1              125

   Каждая запись результата (строка таблицы) представляет собой идентифика-
тор раздела (для раздела SYSTEM - 1) и количество блоков в каждом последова-
тельном наборе свободных блоков.Сложив все числа во второй колонке,можно по-
лучить общее количество всех свободных блоков во всех разделах.
   Для того,чтобы успешно создать таблицу,по крайней мере,один набор после-
довательных свободных блоков должен превышать количество блоков,занятых под
данные,содержащиеся в таблице,и ее индексы.Соответственно,для растущей по
своим размерам таблицы,требующей новых экстентов,должно иметься достаточно
свободных блоков для того,чтобы сформировать новый экстент (см.раздел "Опре-
деление пространства памяти").
   Меньшее количество больших наборов свободных блоков предпочтительнее бо-
льшого количества наборов меньшего размера.БД с большим количеством неболь-
ших наборов блоков иногда называется "фрагментированной" БД.Фрагментирован-
ность БД обычно указывает на необходимость ее реорганизации с целью предос-
тавления возможности выделения памяти большими "порциями".Этого можно доби-
ться путем экспорта/импорта всей БД или выборочного копирования и уничтоже-
ния (записи в архив) таблиц.
   Другой полезный запрос показывает средний размер памяти,доступной в раз-
делах.

SELECT AVG(SPM$ENDBLOCK - SPM$STARTBLOCK + 1) "AVERAGE",
    MIN(SPM$ENDBLOCK - SPM$STARTBLOCK + 1) "MINIMUM",
    MAX(SPM$ENDBLOCK - SPM$STARTBLOCK + 1) "MAXIMUM",
    COUNT (*) "HOWMANY",SPM$PID "PARTITION"
FROM  SYS.SPACEMAP
GROUP BY SPM$PID;

AVERAGE MINIMUM MAXIMUM HOWMANY PARTITION
------- ------- ------- ------- ---------
  1646    1       4797    3         1

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

                                 ТАБЛИЦЫ
   Таблицы являются основными единицами хранения данных в БД ORACLE.Каждая
таблица описывается (создается) своим именем и набором колонок.Колонкам при-
сваиваются имена,тип данных и ширина.После того,как таблица создана,в нее
могут заноситься строки (записи) с данными (один из вариантов предложения
CREATE TABLE позволяет одним предложением создавать таблицу и загружать ее
данными из уже существующих таблиц).
   Когда таблица создается,то система автоматически резервирует память как
для будущих данных,так и для будущих индексов.Зарезервированная память дели-
тся на 2 части,называемые сегментами: сегмент данных и сегмент индексов.На-
чальные размеры и размеры приращения этих сегментов задается при определении
пространства памяти,которое используется при создании таблицы (более подро-
бно см.раздел "Описание пространства памяти").
   Сегмент данных и сегмент индексов состоят из экстентов блоков данных.На
рис.23 показана структура сегментов данных и индексов,в этом примере испо-
льзовано отличное от задаваемого по умолчанию определение пространства памя-
ти,использованное для создания таблицы EMP.
---------------------------------------------------------------+
|          Память для таблицы EMP                              |
|    СЕГМЕНТ ДАННЫX          СЕГМЕНТ ИНДЕКСОВ                  |
|    -----------------         ----------------                |
|    Начальный экстент         Начальный экстент               |
|        данныx                     индексов                   |
|    (1000 блоков)               (750 blocks)                  |
|    Дополнительный             Дополнительный                 |
|   экстент данныx 1         экстент индексов 1                |
|    (500 blocks)            (500 blocks)                      |
|    Дополнительный          Дополнительный                    |
|   экстент данныx 2         экстент индексов                  |
|    (500 blocks)            (500 blocks)                      |
|       ...               ...                                  |
---------------------------------------------------------------+
     Рис.23.Сегменты данных и индексов

Логический формат некластеризованных блоков данных
   На рис.24 показан логический формат блоков данных для некластеризованных
таблиц.На рис.25 приведен логический формат кластерированного блока данных.
Каждый блок данных имеет свой заголовок,который включает указатели на другие
(сцепленные) блоки и время,когда в этот блок,в последний раз производилась
запись.Кроме того,для каждой записи и колонки также имеется заголовок.
-----------------------------------------------------------------
|     Время              |                     Тип              |
-----------------------------------------------------------------
|          Адрес следующего блока                               |
-----------------------------------------------------------------
|          Адрес предыдущего блока                              |
-----------------------------------------------------------------
|            Заголовок блока                                    |
-----------------------------------------------------------------
|Последовательный номер записи х |     Длина записи х    |
-----------------------------------------------------------------
|  Идентификатор колонки А   |     Длина колонки А   |
-----------------------------------------------------------------
|             Данные колонки А           |
-----------------------------------------------------------------
|  Идентификатор колонки В   |     Длина колонки В   |
-----------------------------------------------------------------
| (...и т.д.для остальных колонок и записей)         |
-----------------------------------------------------------------
|еиспользованное пространство,первоначально установленное   |
|          параметром PCTFREE             |
-----------------------------------------------------------------
 Рис.24.Формат логического блока данных (некластерированный)

   Размер логического блока ORACLE зависит от типа ОС.В большинстве OC он
равен либо 2048 байтам,либо 4096 байтам.ORACLE требует 76 байтов на заголо-
вок,остальные 1972 байта или 4020 байтов логического блока для данных поль-
зователя.Из 86 байтов заголовка 44 байта изпользуются для заголока блока фи-
зических данных и 32 байта используются для заголовка блока логических дан-
ных.

                       Ресурсы памяти,требуемые ORACLE
   ORACLE требуется дополнительное количество памяти для каждой таблицы,за-
писи и колонки,как это описано выше.
   Каждой таблице требуется дополнительно 2 блока данных и 1 блок индексов.
Первый блок данных (блок "экстентов") содержит информацию о пространстве па-
мяти такую,как начальный адрес каждого экстента,используемого в настоящий
момент таблицей,последний блок и сколько блоков содержится в экстенте.Нача-
льный адрес первого блока совпадает с TAB$RBA для данных,которые появляются
в некоторых таблицах словаря данных.
   Следующий блок данных содержит информацию,которая дублирует информацию из
словаря данных (такую,как описание таблицы) для того,чтобы избежать необхо-
димость непрерывно обращаться к словарю данных для внутренней проверки и,
следовательно,блокирования словаря данных.Блоку словаря данных может потре-
боваться более одного физического блока для размещения своей информации.
   Блок,требуемый дополнительно для сегмента индексов,сравним с блоком "экс-
тентов" для данных.Он содержит информацию о текущих экстентах,используемых
для всех индексов таблицы.
   Каждая запись требует дополнительно 4 байта.В 2 байтах хранится общая
длина записи в байтах,в оставшихся 2 байтах хранится последовательный N за-
писи (в том порядке,в котором запись была занесена в блок).Если запись на-
ходится в кластеризованной таблице,требуется еще один байт для указания но-
мера таблицы.
   Последовательный N записи определяется для каждого блока.В каждом блоке
имеется запись с номером 1 (если только первая запись,занесенная в блок,не
была удалена).В одном и том же блоке не м.б. записей с одним и тем же номе-
ром.После того,как записи в блоке присваивается последовательный N,он никог-
да не удаляется,даже в том случае,если удаляется сама запись.И,будучи однаж-
ды присвоен записи,N никогда не изменяется.
   Не следует путать последовательный N записи с идентификатором записи
ROWID.Последовательный N записи хранится физически и является частью ROWID.
Идентификатор же записи ROWID не хранится в памяти и может изменяться со
временем.Кроме того,к идентификатору записи можно легко получить доступ с
помощью предложений языка SQL (См.раздел "Тип данных ROWID" ниже).Не следует
путать также последовательный N записи в блоке с ROWNUM (зарезервированным
ключевым словом в языке SQL).
   Каждой колонке требуется дополнительно 2 байта.В одном байте хранится
идентификационный N колонки,в другом количество байтов для данных,содержащи-
хся в колонке.Колонке,описанной как NULL,дополнительной памяти не требуется,
т.к. никакая ее часть в памяти не хранится.

                 Как используется пространство памяти
   В последующем обсуждении использования пространства памяти используется
минология,связанная с описанием пространства памяти,которое рассматривается
в разделе "Описание пространства памяти" ниже.
   Когда создается таблица,ей немедленно выделяется начальный сегмент данных
и начальный сегмент индексов.По мере занесения данных в таблицу блоки нача-
льного экстента данных запоминаются.Аналогично запоминается начальный эксте-
нт индексов,когда на таблице создаются индексы.На блоки данных физически во-
здействуют при предложения DML:
 - предложение INSERT;
 - предложение UPDATE;
 - предложение DELETE.
   Блоки индексов также подвергаются воздействию предложений DML,т.к. должны
непрерывно обновляться,для того чтобы отразить новые данные.Первое предложе-
ние CREATE INDEX начинает заполнять первый экстент индексов для заданной та-
блицы.Предложение DROP INDEX освобождает блоки,используемые заданным индек-
сом,для их использования под другие индексы той же самой таблицы.

                           При занесении записей
   Записи заносятся в таблицу в физической последовательности.Первая запись
хранится в первом блоке первого экстента.Следующие за ней записи заносятся в
первый блок до тех пор,пока он не заполнится.Блок считается заполненным,ког-
да очередной записи не хватает оставшегося свободного пространства в блоке.
Данные для колонки не могут превышать размеры блока,за исключением данных
типа LONG.
   Начально доступное пространство для данных равно размеру блока ORACLE
(2048 байтов для большинства систем),минус размер заголовка блока данных (76
байтов для некластеризованных блоков данных в большинстве систем) и размер,
определяемый параметром PCTFREE,указанным в описании пространства памяти (по
умолчанию обычно 20% от размера логического блока).
   Когда,по мере занесения записей,заполняются все блоки первого экстента,
выделенного таблице,для данных выделяется первый дополнительный экстент.Нап-
ример,если используется описание пространства памяти,принятое по умолчанию,
то,когда запомнятся первые 5 блоков данных,ORACLE выделяет дополнительный
экстент из 25 блоков.Когда будет запомнен и этот экстент,ORACLE выделит сле-
дующий.
   Пространство памяти,зарезервированное с помощью параметра PCFREE для об-
новления данных,не м.б. использовано для занесения новых данных.
   Если во время занесения записи в кластеризованный блок доступного прост-
ранства памяти в блоке не хватает,новая запись заносится в сцепленный блок
(См.раздел "Сцепленные блоки" ниже).

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

                          При сцеплении блоков
   Сцепленные блоки используются при следующих обстоятельствах:
 - при занесении записи,размер которой превосходит размеры блока ORACLE;
 - при обновлении записи,если измененная запись не помещается в блоке;
 - при занесении кластеризованных данных,если данные не помещаются полностью
   в логический блок для данного кластерного ключа.
   Во всех этих случаях записи заносятся в сцепленный блок.Сцепленный блок
- это дополнительный физический блок,составляющий логический блок ORACLE.Он
создается,когда при обновлении требуется дополнительное пространство.Если
это необходимо,логический блок может состоять из нескольких сцепленных бло-
ков.ORACLE помещает адреса блоков в заголовки блоков данных.На рис.24 пока-
заны адрес следующего блока,адрес предыдущего блока (при сцеплении блоков,
если это имеет место),и блок заголовка (первоначальный адрес блоков).Сцепле-
нный блок может располагаться как в том же самом экстенте,что и блок,с кото-
рым он сцеплен,так и в другом экстенте.
   Выборка "сцепленных" данных происходит медленнее,чем поиск данных,которые
физически расположены последовательно,поэтому при создании описания простра-
нства необходимо при оценке значения параметра PCTFREE учитывать ожидаемое
количество обновления записей.Например,если в таблицу загружаются данные и
многие из них имеют значение NULL,но им будут присваиваться значения позд-
нее,следует значительно увеличить значение параметра PCTFREE.
   Если все данные,находящиеся в сцепленном блоке,уничтожаются,блок станови-
тся доступным для использования той же таблицей.

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

                  Как выделяется пространство памяти
   После выделения таблице экстента данных или индекса он не освобождается
до тех пор,пока таблица не будет уничтожена.Экстент всегда отражается в сло-
варе данных (например,в виртуальной таблице STORAGE) как выделенный данной
таблице.
   Однако если все данные удалены из блока данных (т.е.все записи удалены),
то этот блок становится доступным для повторного использования этой же таб-
лицей или кластером.Аналогично,даже если все записи из блока индексов удаля-
ются,он остается выделенным для индексов таблицы до тех пор,пока таблица не
будет уничтожена.Все сцепленные блоки,за исключением блока заголовка,стано-
вятся доступными для повторного использования,если все данные в них удаляют-
ся.
   Поэтому,несмотря на то,что STORAGE может показать все экстенты какого-ли-
бо экстента "используемыми",в них может оказаться достаточно места для зане-
сения данных или индексов потому,что неизвестно,насколько они заполнены.
   Когда таблица уничтожается,все блоки становятся свободными для использо-
вания под данные или индексы других таблиц.

                       ОПИСАНИЕ ПРОСТРАНСТВА ПАМЯТИ
   С помощью описания пространства памяти можно указать,как нужно таблице
использовать это пространство и какое количество памяти выделено ей.Можно
использовать либо встроенное в ORACLE описание по умолчанию,либо созданное
пользователем.Созданные описания пространства памяти доступны для ссылки на
них всем пользователям системы.
   Описание пространства памяти используется также для того,чтобы указать,в
каком разделе должна храниться таблица.См.раздел "Указание раздела при соз-
дании таблицы" ниже.
   С помощью описания пространства можно указать количество памяти,которое
отводится под данные и индексы таблицы.Ограничение на память накладывается
всем данным и всем индексам,созданным на таблице (а не каждому индексу в от-
дельности).Одно и то же описание пространства м.б. использовано для многих
таблиц.Создание описания пространства памяти не зависит от создания таблиц.
Для того,чтобы связать таблицу с каким-либо описанием пространства,имя упо-
минается в предложении CREATE TABLE.

  CREATE TABLE LOTSANUMBERS (ALLOWANCE NUMBER,RECEIPT_DAY DATE)
        SPACE BIGSPACE;

где BIGSPACE - существующее уже описание пространства памяти.

              Определение пространства памяти по умолчанию
   Описание пространства памяти по умолчанию приведено на рисунке 25.
  ---------------------------------------------
  |  CREATE SPACE DEFINITION DEFAULT          |
  |   DATAPAGES   (INITIAL  5,                |
  |          INCREMENT 25,                    |
  |         MAXEXTENTS 9999,                  |
  |         PCTFREE 20)                       |
  |   INDEXPAGES  (INITIAL 5,                 |
  |         INCREMENT 25,                     |
  |          MAXEXTENTS 9999)                 |
  |   PARTITION SYSTEM;                       |
  ---------------------------------------------
 Рис.25.Описание пространства памяти по умолчанию

   Ниже приводится описание различных параметров описания пространства.
DATAPAGES ссылается на блоки,составляющие сегмент данных,INDEXPAGES ссылает-
ся на блоки в сегменте индексов.

 INITIAL - количество блоков при первом выделении пространства.Начальное вы-
           деление памяти производится как для данных,так и для индексов.Ми-
           нимальное количество блоков в начальном экстенте равно 3,как для
           данных,так и для индексов.Во время создания таблицы д.б. выделено
           достаточное количество свободных блоков для индексов и данных.
 INCREMENT - после того,как блоки начальных экстентов запомнятся данными и
             когда данным пользователя или индексам потребуется больше места
             в памяти,ORACLE выделяется дополнительный набор блоков.Параметр
             INCREMENT задает,сколько блоков будет выделено,когда потребует-
             ся дополнительное пространство.
 MAXEXTENTS - этот параметр указывает,сколько раз ORACLE может выделять до-
              полнительные экстенты.Если нет необходимости действительно ог-
              раничить пространство,выделяемое таблице,этот параметр должен
              иметь очень большое значение,потому что увеличение пространст-
              ва после того,как было достигнуто ограничение,требует опреде-
              ленных усилий.
   Значение параметра MAXEXTENTS по умолчанию равно 9999.Действительный мак-
симум зависит от OC.Например,в OC VAX/VMS максимум равен примерно 475 экс-
тентам,а на MS-DOS максимум равен 110.Для определения точного значения необ-
ходимо обратиться к Руководству по установке и Руководству пользователя для
конкретной OC.Значение параметра устанавливается равным 9999 для того,чтобы
в случае экспорта таблиц и данных к одной OC и импорта ее на другой,максима-
льное число экстентов не ограничивалось нижним пределом одной из систем.
 PCTFREE - этот параметр указывает,какой процент от размера логического бло-
           ка (за вычетом 32 байтов) д.б. зарезервирован для обновления дан-
           ных Минимальное значение параметра равно 1,максимальное 99.
 PARTITION - если необходимо,чтобы таблица размещалась в разделе,отличном от
             SYSTEM,то его имя нужно задать в этом параметре.
   Например,когда таблица создается,используя описание пространства памяти
по умолчанию,5 блоков ORACLE немедленно выделяются для данных и 5 для индек-
сов (параметры INITIAL для DATAPAGES и для INDEXPAGES).Когда количество за-
писей в этой таблице возрастает настолько,что данные занимают все 5 блоков,
занесение следующей записи требует выделения таблице дополнительного эксте-
нта.По умолчанию экстент данных равен 25 блокам ORACLE (параметр INCREMENT
в DATAPAGES).

           Описание пространства памяти для временных таблиц
   Для создания временных таблиц ORACLE использует описание пространства па-
мяти с именем TEMPTABLE.См.раздел "Описание пространства памяти с именем
TEMPTABLE" ниже.

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

                Создание описания пространства памяти
   Любой пользователь с привилегией RESOURCE может создать описание простра-
нства памяти с помощью команды CREATE SPACE.Синтаксис команды приведен на
рис.26.
   +----------------------------------------------+
   |  CREATE SPACE [DEFINITION] имя_пространства  |
   |   DATAPAGES  (INITIAL n,                     |
   |        INCREMENT n,                          |
   |         MAXEXTENTS n,                        |
   |         PCTFREE n)                           |
   |   INDEXPAGES (INITIAL n,                     |
   |        INCREMENT n,                          |
   |         MAXEXTENTS N)                        |
   |   PARTITION имя_раздела                      |
   +----------------------------------------------+
      Рис.26.Синтаксис команды CREATE SPACE

   Хотя можно присваисать описанию пространства любые имена,на практике луч-
ше связывать описание с таблицей,для которой оно используется (например,про-
странство с именем SP_EMP для таблицы EMP).Однако несмотря на имя,описание
пространства может использоваться любым пользователем или любой таблицей.
   Задавать каждый параметр в DATAPAGES и INDEXPAGES нет необходимости.Если
параметр не задан,его значение берется по умолчанию.Имя раздела необходимо
указывать только в том случае,если это не раздел SYSTEM.
   Необходимо отметить,что при создании описания пространства памяти никакой
памяти не выделяется.Пространство выделяется впервые при создании таблицы
(кластера) в соответствии с его описанием.Затем,когда при выполнении опера-
ций INSERT и UPDATE потребуется дополнительная память,она будет выделяться
также в соответствии с этим описанием.

                      Расчет количества сегментов данных
   При использовании описания пространства памяти следует придерживаться
следующих рекомендаций:
 - меньшее количество больших экстентов предпочтительнее большого количества
   небольших экстентов;
 - в результате обновления отдельные записи могут увеличиться в размере.Нап-
   ример,если вставляется много записей,но некоторые колонки имеют значение
   NULL и будут заполняться позже,то,вероятно,следует увеличить значение па-
   раметра PCTFREE.Обновление таких записей неизбежно потребует большего ко-
   личества памяти,так как значение NULL ее не занимает совсем.
 - если действительно нет необходимости ограничивать размеры пространства
   памяти под таблицу,не нужно задавать параметр MAXEXTENTS.
 - необходимо помнить,что при создании таблиц нужно иметь достаточное коли-
   чество последовательных блоков для того,чтобы сформировать начальные экс-
   тенты данных и экстентов.Последовательные логические блоки также необхо-
   димы для дополнительных блоков под данные и индексы.
   Для оценки начального количества блоков данных в описании пространства
используется общая формула.Эта формула используется для определения размера
одной некластеризованной таблицы.Она учитывает следующие значения:
 - количество записей в таблице;
 - среднюю длину данных переменной длины;
 - процент незаполненных данных (NULL) для каждой колонки (и,соответственно,
   ожидаемую длину заносимых записей);
 - количество обновлений,особенно таких,которые увеличивают размер записи.
   В формуле используются следующие переменные.

   ИСХОДНЫЕ:
    R  Количество записей в таблице
    Ci  Средняя длина i-го значения
    Ni  Остаток i-й колонки с нулевым значением
    F  Значение параметра PCTFREE

   ЗАВИСИМЫЕ ОТ ВЕРСИИ СИСТЕМЫ ORACLE И ОПЕРАЦИОННОЙ СИСТЕМЫ:
    K  Указатель длины колонки     (VAX=1)
    I  Идентификатор колонки      (VAX=1)
    L  Длина записи           (VAX=2)
    Q  Последовательный номер записи  (VAX=2)
    S  Размер логического блока ORACLE (VAX=2048,VM=4096)
    H  Размер заголовка блока ORACLE  (VAX=76)

   РЕЗУЛЬТАТЫ РАСЧЕТА:
    BR  Среднее количество байтов на запись
    RB  Среднее количество записей на блок ORACLE
    SUMi Сумма по всем i-м значениям
    B  Количество логических блоков ORACLE,требующихся на одну таблицу

Во-первых расчитывается следующее количество байтов на запись:
    BR = SUMi [(1 - Ni) * (Ci + K + I)] + L + Q

Во-вторых,расчитывается среднее количество записей на блок:
                |  (1-F) * (S-H) |
    RB = integer portion of |  ------------- |
                |     BR    |
                 -        -
В-третьих,расчитывается количество блоков (В используется как значение пара-
метраINITIAL для DATAPAGES):
          R
    B = -----
         RB

                    Расчет количества сегментов индексов
   Вообще,точно оценить размеры памяти под индексы трудно.Они зависят от: -
распределения значений в индексированных колонках (от количества различных
значений в колонках и от того,насколько они отличаются друг от друга);
   - сколько колонок индексировано;
   - длины индексированных колонок;
   - процента значений NULL;
   - уплотненности индекса;
   - времени создания индекса (до загрузки данных в таблицу или после).
   Необходимо отметить,что все индексы для таблицы хранятся в одном и том же
индексном сегменте.Ключи кластеров также хранятся в индексном сегменте.Орие-
нтировочно принимается,что пространство,требуемое для индексов таблицы,равно
20-30% пространства,требуемого таблицей.Для оценки требуемого количества
блоков м.б. использована формула:
   R - количество записей в таблице
   S - размер блока для конкретной OC (обычно 2048 или 4096)
   Н - байтов заголовка на блок (обычно 76)
   KL - оценочная длина ключа
     =10 для уплотненных индексов
     =16 + (количество_колонок_в_ключе) + (сумма_длин_колонок_в_ключе)

   Формула имеет следующий вид:
                         R
      B = 1.1 * ----------------------
                   (S-H) *0,75
                   ------------
                        KL
   Значение 0,75 - это приблизительная оценка заполнения используемого инде-
ксного блока,т.к. обычно заполнение блоков В*-дерева (за исключением корне-
вого блока) изменяется от 50% до 100%.Это значение предлагает,что параметр
PCTFREE равен 25.Если расчитываются блоки для уже существующей таблицы,соз-
данной с описанием пространства памяти по умолчанию,в формуле следует испо-
льзовать значение 0,8,а не 0,75.
   10% добавляется для того,чтобы учесть верхние узлы В*-дерева.Например,
предположим,что требуется выполнить команду CREATE INDEX для таблицы,содер-
жащей 10000записей,размер логического блока 2048,значение параметра PCTFREE
пользователь желает установить равным 20,индекс д.б. создан на одной колонке
неуплотненным.Тогда,в соответствии с приведенной формулой

Размер уплотненного
индекса     =(1000 / ((1984 * 0,80) / 10)) * 1.10 = 70 блокам

Или,для неуплотненного индекса

Размер неуплотненного
индекса    =(10000 / ((1984 * 0,80) / 37)) * 1.10 = 275 блокам

                  Расчет пространства памяти для кластера
   ЗАМЕЧАНИЕ: Общее описание кластеров и их использование приводятся в раз-
              деле "Кластеры",глава 10.
   Нужно стараться,чтобы на каждый уникальный кластерный ключ приходился
один логический блок.Если с ключом связано данных больше,чем может войти в
один логический блок,то непоместившиеся данные располагаются в сцепленных
блоках,что некоторым образом противоречит задачам кластеризации.
   Параметр PCTFREE для кластеров не несет смысловой нагрузки.
   Сегменты индексов для кластеров выдаются с учетом того,что они должны со-
держать все индексы для всех таблиц в кластере и ключ кластера.

                Использование описания пространства памяти
   Для того,чтобы связать таблицу с описанием пространства памяти,имя описа-
ния упоминается в предложении CREATE TABLE,например

 CREATE TABLE LOTSANUMBERS (ALLOWANCE NUMBER,RECEIPT_DAY DATE)
 SPACE BIGSPACE;

где BIGSPACE - уже существующее описание пространства памяти.Если явная ссы-
лка на имя пространства отсутствует,то для таблицы используется описание
пространства по умолчанию.При создании таблицы ORACLE выделяется 2 набора
блоков DATAPAGES и INDEXES.
   Будучи созданной с использованием какого-либо описания пространства,таб-
лица будет расти в соответствии с параметрами этого описания даже в том слу-
чае,если само это описание будет изменено или уничтожено.

                 Задание раздела при создании таблицы
   По умолчанию всем таблицам блоки выделяются в разделе SYSTEM.Для того,
чтобы таблица располагалась в другом разделе,пользователю необходимо:
   1.Идентифицировать или,если это необходимо,создать с помощью команды
CREATE SPACE DEFINITION описание пространства памяти,в котором указывается
желаемый раздел.
   2.Создать таблицу командой CREATE TABLE со ссылкой на имя этого описания
в опции SPACE.
   В следующем примере создается новое описание пространства памяти с именем
MEDSPACE,которое ссылается на раздел TESTDATA.Затем с помощью этого описания
создается таблица ACCOUNTS,поэтому память для таблицы будет выделена в раз-
деле TESTDATA.

SQL> CREATE SPACE DEFINITION MEDSPACE
     DATAPAGES (INITIAL 250,
       INCREMENT 100,
       MAXEXTENTS 999,
       PCTFREE 25)
 INDEXPAGES (INITIAL 100,
       INCREMENT 100,
       MAXEXTENTS 999,
       PCTFREE 25)
 PARTITION TESTDATA;

                 Описание пространства памяти создано.
SQL> CREATE TABLE ACCOUNTS (ano number,aname char (40))
     SPACE MEDSPACE;

                 Изменение описания пространства памяти
   Существующие описания пространства памяти можно изменять,хотя это может
повлиять только на создаваемые после изменения описания таблицы,а не на уже
созданных.Синтаксис команды ALTER SPACE,изменяющей описание пространства,по-
хож на синтаксис команды CREATE SPACE DEFINITION и представлен на рис.27.
       -------------------------------------
       |  ALTER SPACE имя_пространства     |
       |   DATAPAGES  (INITIAL n,          |
       |         INCREMENT n,              |
       |         MAXEXTENTS n,             |
       |         PCTFREE n)                |
       |   INDEXPAGES (INITIAL n,          |
       |         INCREMENT n,              |
       |         MAXEXTENTS n,             |
       |   PARTITION имя_раздела           |
       -------------------------------------
       Рис.27.Синтаксис команды ALTER SPACE

   Любой параметр описания пространства м.б. изменен,если он указывается в
команде.Если параметр в команде не указывается,его значение остается неизме-
нным.

                  Уничтожение описания пространства памяти
   Любой пользователь с привилегией RESOURCE может уничтожить описание прос-
транства памяти с помощью команды
                                    DROP SPACE имя_пространства

   Пользователи могут использовать или уничтожать все описания пространства
за исключением описания TEMPTABLE.Описание TEMPTABLE может уничтожать или
изменять только администратор БД.

     Что делать,если таблица превысит максимальное количество экстентов
   Если таблица вырастает в размерах так,что ей требуется количество экстен-
тов,превосходящее максимальное значение,указанное в используемом его описа-
нии пространства памяти,то выдается сообщение
                                   MAXIMUM NUMBER OF EXTENTS EXCEEDED

   Несмотря на то,что можно изменить описание пространства,используемого
этой таблицей,это не изменит ограничений для существующей таблицы.Из этой
ситуации можно выйти с помощью одного из 2 способов.Если в БД имеется доста-
точно места,то рекомендуются следующие действия.
   1.Создать таблицу с такой же структурой,но с другим именем,используя бо-
льшее пространство памяти,и затем перегрузить в нее старую таблицу:
                CREATE TABLE temp_new
                AS SELECT * FROM old_big_table
                SPACE bigger_space
   2.Уничтожить старую таблицу.
   3.Переименовать новую таблицу,присвоив ей имя уничтоженной старой.
   Если в БД места не хватает,следует выполнить слеующие действия:
   1.Сделать экспорт таблицы.
   2.Уничтожить описание таблицы.
   3.Создать описание пространства памяти с новыми,более высокими ограниче-
     ниями.
   4.Создать таблицу,используя новое описание пространства памяти.
   5.Сделать импорт данных в созданную таблицу.

+                        ТИПЫ ДАННЫХ СИСТЕМЫ ORACLE
   Данные в СУРБД ORACLE хранятся в виде записей в таблицах.Одна таблица мо-
жет содержать до 254 колонок и каждая колонка может содержать данные одного
из следующих типов:
     CHAR
     NUMBER
     DATE
     LONG
     RAW или LONG RAW
   Все данные в колонках,имеющие значения,отличные от NULL,хранятся совмест-
но с однобайтным параметром длины и однобайтным идентификатором колонки.Зна-
чения NULL не хранятся.
   Далее следует подробное описание различных типов данных.

                             Тип данных CHAR
   Символьные данные хранятся в строках переменной длины,состоящих из ASCII
или EBCDIС.Данные этого типа могут содержать любые буквы и цифры.Максималь-
ная длина символьной строки в колонке задается при создании таблицы,но не
может превосходить 240 символов.Пробелы справа не хранятся,если только они
не задаются явно в предложении INSERT путем заключения в апострофы.
   Используя функцию DUMP,можно просмотреть действительные значения,хранящи-
еся в таблице TEST:

 SQL> SELECT CHARDATA,DUMP(CHARDATA) FROM TEST;

   CHARDATA          DUMP(CHARDATA)
   --------  ---------------------------------
   a              Typ=1 Len= 1: 129
   ab             Typ=1 Len= 2: 129,130
   ab c           Typ=1 Len= 4: 129,130,64,131
   one 1       Typ=1 Len= 5: 150,149,133,64,241

                           Тип данных NUMBER
   В БД могут храниться числа фактически любой величины с точностью прибли-
зительно 38 цифр.Могут храниться такие большие числа,как 100 в 64-й степени
или 1,за которой следуют 28 нулей.Если это необходимо,пользователи могут
указать точность (общее количество цифр) и масштаб (количество цифр справа
от 10-ной точки),например
                           CREATE TABLE MINI (weenumbers number (2,1));

                       Внутренний числовой формат
   1.Числовые данные хранятся в формате переменной длины,начиная с байта,со-
держащего степень числа со знаком,за которым следуют байты данных.Каждый ба-
йт данных содержит две 10-ные цифры числа.Фактически в байте содержится одна
100-ричная цифра.
 +-------------------------------------------------------------+
 | <знак/степень_числа> 1_цифра 2_цифра 3_цифра ...19_цифра    |
 +-------------------------------------------------------------+
      Рис.28.Внутренний числовой формат

   Старший бит байта,содержащего степень числа,является знаковый бит.Если он
равен 1,то число положительное.Если равен 0,то отрицательное.
   Степень числа занимает семь младших битов байта.Основание степени 100.
Степень может изменять свое значение от 0 до 127 и представлено в виде сме-
щения на 64.Результат вычитания 64 из показателя степени показывает,на ско-
лько байтов д.б. сдвинуто число,где сдвиг на один байт соответствует умноже-
нию или делению на 100.Если результат отрицательный,то число сдвигается
вправо относительно точки,если результат вычитания положительный,то число
д.б. сдвинуто влево.
   Каждая цифра внутреннего формата представляет собой 2-ное число от 0 до
99,т.е.100-ричная цифра.К каждой цифре прибавляется 1,для того чтобы избежа-
ть существования 2-ого нуля как цифры,поэтому действительное внутреннее пре-
дставление каждой цифры внутреннего формата - это 2-ные числа,изменяющиеся
от 1 до 100.Первая цифра никогда не бывает равной 0,т.к. числа нормализова-
ны.Точка располагается слева от первой цифры.
   Отрицательные числа преобразуются в положительные числа.Преобразование
положительных чисел в отрицательные гарантирует,что все числа в ORACLE будут
сравниваться правильно.Метод преобразования заключается в следующем: отрица-
тельный байт показателя степени,включая знаковый бит,является дополнением
положительного байта.Каждая отрицательная цифра является дополнением до 100
соответствующей положительной цифры плюс 1.Это означает,что для получения
соответствующей отрицательной цифры необходимо вычесть из 100 положительную
цифру.Если отрицательное число имеет количество цифр менее максимального,то
байт,следующий за последней цифрой,содержит число 102.
   Нуль представлен в виде одного байта,содержащего число 128.Это байт с на-
именьшим показателем степени (-64) и знаковым битом равным 1.Это обеспечива-
ет то,что 0 будет больше всех отрицательных чисел и меньше всех положитель-
ных.
   Положительная бесконечность представляется 2 байтами [255,101],отрицате-
льная бесконечность - 3 байтами [1,1,102].Такое представление было выбрано
для того,чтобы обеспечивалось правильное сравнение с этими 2 значениями.

                  Использование масштаба и точности чисел
   При задании числовых полей следует,если это возможно,указывать максималь-
ное количество цифр и место 10-ной точки.Это позволяет избежать использова-
ния излишней точности большого количества цифр и,соответственно,перерасхода
памяти.
   На рис.29 приведены примеры хранения данных при различных значениях точ-
ности и масштаба.
---------------------------------------------------------------+
| ДЕЙСТВИТЕЛЬНЫЕ      ЗАДАНЫ КАК          ХРАНЯТСЯ В ВИДЕ      |
| ДАННЫЕ                                                       |
---------------------------------------------------------------+
| 7,456,123.89         NUMBER             7456123.89           |
| 7,456,123.89         NUMBER (9,2)       7456123.89           |
| 7,456,123.89         NUMBER (9,1)        7456123.9           |
| 7,456,123.8          NUMBER (6)(не воспринимаются - превышена|
|                                                 точность)    |
| 7,456,123,89         NUMBER (7,-2)        7456100            |
---------------------------------------------------------------+
    Рис.29.Примеры различных значений масштаба и точности числовых данных

   Если указан отрицательный масштаб,то число округляется до указанного ко-
личества цифр,например,спецификация (10,-2) означает округление до сотен.

                             Тип данных DATE
   Время хранится в формате фиксированной длины и занимает 7 байтов.Для каж-
дой даты хранится следующая информация:

БАЙТ:  1    2     3     4     5     6      7
      Век  Год  Месяц  День  Час  Минута  Секунда
так же как в:

    19   85    4    1   15   15     45
на 1-ое апреля 1985 г.,3:15:45 после полудня

   По умолчанию время суток устанавливается равным 12:00 a.m.(полночь),если
время не вводится.Для того,чтобы ввести дату и время в формате,отличном от
стандартного для ORACLE,нужно использовать функцию TO_DATE с маской формата.
Аналогично,для того чтобы ввести время суток,нужно использовать функцию
TO_DATE с маской формата,как в следующем примере.
SQL> INSERT INTO BIRTHDAYS (JUSTWHO,BDAY) VALUES ('ANNIE',
   TO_DATE('13-NOV-85 10:56 A.M.','DD-MON-YY HH:MI A.M.');

                   Использование дат Юлианского календаря
   Для преобразования дат в даты Юлианского календаря в функциях преобразо-
вания дат (TO_DATE или TO_CHAR),м.б. использована маска "J".
Например, SELECT TO_CHAR (HIREDATE,'J') FROM EMP

   По этому запросу все даты найма на работу будут выданы в формате дат Юли-
анского календаря.Если необходимо использовать даты для вычислений,то нужно
применять функцию TO_NUMBER.
   Имеются различные интерпретации даты Юлианского календаря.Метод вычисле-
ния,используемый ORACLE,предоставляет юлианскую дату в виде числа,состоящего
из 7 цифр.Например,23 января 1982 г.будет представлено в виде 2444993.Юлиан-
ская дата вводится для того,чтобы производить последовательный отсчет време-
ни,начиная с какой-либо точки.Точка отсчета принята равной приблизительно
4000 г.до н.э.,поэтому текущая дата равна где-то 2,4 миллионам.Вообще гово-
ря,юлианская дата не является целым числом,дробная часть определяет время
суток.ORACLE использует упрощенный подход,в результате которого получаются
целые значения.

                              Тип данных LONG
   Колонка,обЪявленная как LONG,может хранить символьные строки переменной
длины,содержащие до 65536 символов.Данные типа LONG представляют собой прос-
то неструктурированный набор байтов.Их единственное отличие от данных,описа-
нных как LONG ROW,является то,что при передаче данных с помощью SQL*Net,дан-
ные типа LONG м.б. конвертированы в различные наборы символов (ASCII или
EBCDIC и т.п.),в то время как данные LONG ROW не конвертируются.
   Данные типа LONG м.б. использованы для хранения массивов символов или да-
же небольших документов.Тип данных LONG используется в словаре данных для
хранения текстов описания виртуальных таблиц.Колонки,описанные как LONG,мо-
гут использоваться в списках предложений SELECT,в предложениях SET и INSERT.

                      Ограничения на данные типа LONG
   Хотя колонки типа LONG находят много различных применений,имеется ряд ог-
раничений на их использование,в основном из-за размера:
 - в таблице м.б. только одна колонка типа LONG;
 - таблицы,содержащие колонки типа LONG,не м.б. кластеризованы;
 - колонки типа LONG не могут индексироваться;
 - на колонки LONG нельзя ссылаться в выражениях WHERE,GROUP BY,ORDER BY,
   CONNECT BY и DISTINCT;
 - никакие функции (например,SUBSTR или INSTR) не могут применяться к данным
   типа LONG;
 - колонки типа LONG не могут входить в списки предложения SELECT гнездующи-
   хся запросов;
 - колонки типа LONG не могут использоваться в выражениях;
 - колонки типа LONG не могут входить в список предложений SELECT,входящих в
   блок запросов,который связан с другим блоком выражениями UNION,INTERSECT
   или MINUS.

                Использование данных типа LONG в SQL*Plus
   При использовании данных типа LONG в SQL*Plus может оказаться полезным
применение следующих двух предложений:
 SET LONG n
 COLUMN имя_колонки_типа_long FORMAT An WORD_WRAP

где An - маска формата шириной n-символов для символьных данных.

         Использование данных типа LONG в программах пользователя
  Переменные,описываемые в программе пользователя,м.б. любого типа,допускае-
мого в языке,на котором написана программа.Тип данных ORACLE д.б. типом 5
(данные типа RAW) для того,чтобы избежать обрезания крайних пробелов и отб-
расывания пустых значений (2-ных нулей) в середине данных типа LONG.

                       Типы данных RAW и LONG RAW
   Данные типа RAW и LONG RAW впервые используются в версии 5 ORACLE для
хранения неинтерпретируемых системой данных.Тип RAW аналогичен типу CHAR,а
тип LONG RAW типу LONG за исключением того,что не делается никаких предложе-
ний относительно значений хранимых байтов.Эти типы данных предназначены для
2-ных данных или строк байтов для хранения,например,последовательности гра-
фических символов.
   При передаче данных с помощью SQL*Net данные типа RAW и LONG RAW не кон-
вертируются в отличие от данных типа CHAR и LONG.

                    Типы данных,совместимые с SQL/DS
   Кроме типов данных ORACLE предложения SQL
    CREATE TABLE...
    CREATE CLUSTER...
воспринимают типы данных систем SQL/DS и DB2 фирмы IBM и преобразуют их в
типы данных ORACLE так,как это показано на рис.30.
 +----------------------------------------------------------+
 |   Типы данных       Типы данных                          |
 |    SQL/DS           ORACLE                               |
 +----------------------------------------------------------+
 |    SMALLINT     NUMBER                                   |
 |    INTEGER     NUMBER                                    |
 |    DECIMAL(m,n)   NUMBER(m,n)                            |
 |    FLOAT      NUMBER                                     |
 |    VARCHAR(n)    CHAR(n)                                 |
 |    LONG VARCHAR   LONG                                   |
 |    GRAPHIC      нет соответствующего типа данных         |
 |    VARGRAPHIC    нет соответствующего типа данных        |
 |    LONG VARGRAPHIC  нет соответствующего типа данных     |
 +----------------------------------------------------------+
  Рис.30.Преобразование типов данных системы SQL/DS в типы данных ORACLE

   Из-за отсутствия соответствующих типов данных в ORACLE не следует исполь-
зовать типы данных системы SQL/DS GRAPHIC,VARGRAPHIC и LONG VARGRAPHIC.Одна-
ко,т.к. все типы SQL/DS являются зарезервированными словами,то их нельзя ис-
пользовать для наименования обЪектов,таких как таблицы,колонки,кластеры или
индексы.

                           Тип данных ROWID
   С каждой записью в БД связана логическая колонка,которая соответствует
адресу этой строки.Этот адрес м.б. выбран с помощью запроса на языке SQL,ис-
пользуя зарезервированное слово ROWID.Как видно из следующего примера,резу-
льтатом поиска по запросу на выборку ROWID будет 16-ричное представление ад-
реса каждой выбранной строки.

           SELECT ROWID,ENAME FROM EMP;
             ROWID       ENAME
   ------------------ ----------
   00004618.0001.0001   SMITH
   00004618.0002.0001   ALLEN
   00004618.0003.0001   WARD
   00004618.0004.0001   JONES
     ...      ...

   Идентификатор записи ROWID содержит следующую информацию,необходимую для
определения расположения записи:
 - раздел,в котором находится запись;
 - блок с записью в этом разделе;
 - последовательный N записи в этом блоке.
   Формат идентификатора записи представлен на рис.31.
----------------------------------------------------------------+
|  НОМЕР ЛОГИЧЕСКОГО   ПОСЛЕДОВАТЕЛЬНЫЙ  ИДЕНТИФИКАТОР          |
|  БЛОКА В РАЗДЕЛЕ     НОМЕР ЗАПИСИ      РАЗДЕЛА                |
|                                                               |
|  Например,идентификатор второй записи в блоке 4СЕ8,в          |
|  разделе SYSTEM (раздел 1) будет иметь вид 00004СЕ8.0002.0001 |
----------------------------------------------------------------+
     Рис.31.Формат идентификатора записи ROWID

   N логического блока в разделе указывает,какой логический блок в разделе
содержит запись.Последние биты (в OC VMS последние 3 бита) указывают N логи-
ческого блока в физическом блоке.Остальные (начальные) биты идентифицируют
физический блок в разделе.
   Последовательный N записи - это тот же самый последовательный N записи,
который хранится в заголовке блока для каждой записи (см.рис.24 и 35).
   В следующем примере для OC VAX/VMS,в котором выбираются идентификаторы
записей ROWID для всех записей в таблице EMP,видно,что данные хранятся в ра-
зделе 1 (SYSTEM) в блоке 2САВ0,с 14 записями в 2048-байтном блоке ORACLE
(для VMS).

    SQL> select rowid,ename from emp;

   ROWID               ENAME
   ------------------ ---------
   0002CABO.0001.0001   SMITH
   0002CABO.0002.0001   ALLEN
   0002CABO.0003.0001   WARD
   0002CABO.0004.0001   JONES
   0002CABO.0005.0001   MARTIN
   0002CABO.0006.0001   BLAKE
   0002CABO.0007.0001   CLARK
   0002CABO.0008.0001   SCOTT
   0002CABO.0009.0001   KING
   0002CABO.000A.0001   TURNER
   0002CABO.000B.0001   ADAMS
   0002CABO.000C.0001   JAMES
   0002CABO.000D.0001   FORD
   0002CABO.000E.0001   MILLER

            Для чего используются идентификаторы записи ROWID?
   Если значения идентификатора записи столь громоздки,почему пользователь
заинтересован в их использовании? На самом деле они используются для решения
следующих важных задач:
 - использование идентификаторов записи - самый быстрый способ доступа к от-
   дельной записи;
 - с их помощью можно определить,сколько блоков памяти требуется таблице;
 - они используются для блокирования на уровне записи.
   Несмотря на то,что к идентификаторам записей иногда можно осуществлять
доступ как к обычным колонкам таблицы (обычно в предложениях SELECT и
WHERE),они никогда не могут обрабатываться как колонки по следующим причи-
нам:
 - отсутствуют гарантии того,что идентификатор любой записи остается неизме-
   нным в течение времени (физическое расположение записи может изменяться
   при обновлении записи или при экспорте и реимпорте).
 - идентификатор записи не хранится в БД,хотя на него можно ссылаться как на
   обычные данные,он не представляет собой еще одну колонку с данными.Поэто-
   му не имеют смысла операции UPDATE,INSERT или DELETE по отношению к ROWID.

                   Примеры использования данных типа ROWID
   Используя некоторые групповые функции совместно с идентификатором записи
ROWID,можно собрать все виды полезной информации о внутреннем хранении дан-
ных в БД ORACLE.Прежде всего покажем,как функция SUBSTR м.б. использована
для того,чтобы разбить ROWID на 3 отдельных компоненты (N блока в разделе,
последовательный N записи в блоке и идентификатор раздела):
   SQL> SELECT ROWID,SUBSTR(ROWID,1,8) BLOCK,
        2  SUBSTR(ROWID,10,4) RSN,
        3 SUBSTR(ROWID,15,4) PUD
        4 FROM TABLEA;

   ROWID                BLOCK     RSN   PID
   ------------------  -------   ----   ----
   00004618.0001.0001  0004618   0001   0001

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

   SQL> SELECT COUNT(DISTINCT(SUBSTR(ROWID,1,8))) BLOCKS
        2 FROM имя_таблицы;

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

   SQL> SELECT SUBSTR(ROWID,1,8) BLOCK,COUNT(*)
        2 FROM имя_таблицы
        3 GROUP BY SUBSTR(ROWID,1,8);

                             Преобразование данных
   В выражении WHERE могут сравниваться между собой данные различных типов.В
этих случаях ORACLE может использовать преобразование данных.Например,
   1.SELECT ENAME FROM EMP WHERE ENAME = 135
   2.SELECT ENAME FROM EMP WHERE EMPNO = '7936'
   3.SELECT ENAME FROM EMP WHERE HIREDATE = '12-MAR-86'
   4.SELECT ENAME FROM EMP WHERE ROWID = '00002514.0001.0001'

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

+                            ВРЕМЕННЫЕ ТАБЛИЦЫ
   Несмотря на то,что пользователи никогда явно не просматривают,не создают
и не используют временные таблицы,описываемые в этом разделе,СУРБД ORACLE
часто требуются временные таблицы для завершения транзакций пользователя.В
этом разделе приводятся некоторые сведения о том,когда используются времен-
ные таблицы,и как администратор БД может влиять на их использование.

              Операции,требуюшие использования временных таблиц
Создание или использование временных таблиц может потребоваться для выполне-
ния следующих операций:
   - CREATE INDEX
   - ORDER BY
   - DISTINCT
   - GROUP BY
   - UNION,INTERSECT,или MINUS
   - неиндексированных объединений
   - некоторых подзапросов.
   Например,если запрос содержит выражения DISTINCT,GROUP BY и ORDER BY,ему
может потребоваться до 3 временных таблиц.
   Временная таблица не создается,если операция сортировки (например,при
ORDER BY) м.б. выполнена в оперативной памяти или оптимизатор находит какой-
либо другой способ выполнения этой операции.

                     Как используются временные таблицы?
   Когда БД инициализируется или стартуется командой IOR WARM,никаких време-
нных таблиц не существует.Во время работы с БД временные таблицы требуются
для выполнения приведенных выше операций и создаются по мере необходимости.
После того,как предложение использует их,временные таблицы становятся досту-
пными для повторного использования другими предложениями.
   ORACLE всегда создает столько временных таблиц,сколько это необходимо.Па-
раметр TEMP_TABLES файла INIT.ORA определяет количество временных таблиц,со-
зданных после "теплого" старта,которое поддерживает ORACLE.Например,если
значение параметра TEMP_TABLES равно 20,но в какое-то время использовалось
25 временных таблиц,то первые 5 освободившихся таблиц будут уничтожены.

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

   Описание пространства памяти для временных таблиц имеет вид:
    CREATE SPACE DEFINITION TEMPTABLE
    DATAPAGES (INITIAL 20,
         INCREMENT 100,
         MAXEXTENTS 240,
         PCTFREE 1)
    INDEXPAGES (INITIAL 20,
          INCREMENT 100,
          MAXEXTENTS 240)
    PARTITION SYSTEM;

   Хотя страницы индексов определены в описании,они не используются для вре-
менных таблиц.По умолчанию временные таблицы создаются в разделе SYSTEM.Нес-
мотря на то,что это описание м.б. изменено (уменьшены или увеличены значения
параметров,либо изменен раздел),оно никогда не должно уничтожиться.
   Если описание пространства памяти будет уничтожено,во время запросов,тре-
бующих создания временных таблиц,будет выдаваться следующее сообщение об
ошибке:
              Gspace definition name does not exist

   В этом случае описание пространства памяти с именем TEMPTABLE д.б. созда-
но вновь до повторного выполнения запроса.Использовать команды DROP или
ALTER по отношению к описанию TEMPTABLE может только администратор БД.

+                   ЧАСТЬ IV.НАСТРОЙКА СУРБД ORACLE
   Эта часть содержит информацию,которая может помочь администратору БД по-
нять,как происходит взаимодействие нескольких пользователей,осуществляющих
одновременный доступ к одним и тем же данным и как ORACLE обеспечивает сог-
ласованность и целостность данных,используя механизм блокирования для защиты
данных.Затем в ней описываются некоторые способы улучшения производительнос-
ти системы,включая 2 наиболее важных способа: индексацию и кластеризацию.По-
сле подробного обсуждения команд индексации и кластеризации следуют некото-
рые советы по оптимизации работы системы.

+             Глава 9.CОГЛАСОВАННОСТЬ И ОДНОВРЕМЕННОСТЬ РАБОТЫ
   В этой главе приводится описание транзакций и команд языка SQL для управ-
ления ими.В ней также описываются и приводятся многочисленные блокировки,ко-
торые ORACLE использует для того,чтобы гарантировать целостность данных при
работе в режиме коллективного пользования.Сравниваются 3 режима блокировки.

                    ЛОГИЧЕСКИЕ ЕДИНИЦЫ РАБОТЫ (ТРАНЗАКЦИИ)
   Под логической единицей работы понимается последовательность предложений
языка SQL,которая обрабатывается ORACLE как единая сущность.Логические еди-
ницы работы называются также транзакциями.ORACLE гарантирует согласованность
данных на уровне логической единицы работы: для каждой логической единицы
работы либо все ее операции выполняются (т.е.все изменения в БД становятся
постоянными),либо не выполняется ни одна из них.Если во время выполнения
ORACLE логической единицы работы произойдет ошибка в работе системы или про-
граммы пользователя,БД будет автоматически восстановлена в состояние,в кото-
ром она находилась перед началом транзакции.
   Например,если деньги снимаются с одного счета и добавляются к другому,то
оба изменения должны либо произойти вместе,либо не произойти вообще.Если во
время изменений происходит ошибка,то изменений не производится.
   Если программа пользователя завершается аварийно,ORACLE восстанавливает
данные после выявления ошибки.Если происходит сбой в системе,данные восста-
навливаются после рестарта ORACLE.
   Количество операций в транзакции может варьироваться в широком диапазоне:
от всех возможных операций над БД,выполняемых одной программой,до единствен-
ного предложения UPDATE язык SQL.Во многих программах принято разделять опе-
рации,выполняемые программой пользователя на подмножества логических единиц
работы.В таких программах для завершения одной единицы работы и начала дру-
гой используются команды языка SQL COMMIT и ROLLBACK (команда COMMIT делает
изменения,произведенные в БД постоянными,а команда ROLLBACK возвращает БД в
состояние,в котором она находилась перед началом транзакции).
   Логическая единица работы начинает выполняться,когда найдено первое выпо-
лнимое предложение языка SQL.Она заканчивается,если происходит одно из сле-
дующих событий:
 - выполняются команды COMMIT или ROLLBACK;
 - вызывается команда DDL (такая как CREATE,DROP,RENAME,ALTER);
 - возникают ошибки (такие как взаимоблокировки);
 - происходит выход из системы (например,EXEC SQL ...RELEASE);
 - задание завершается ненормально.
   После завершения одной логической единицы работы автоматически стартует
следующая.Если в программе нет предложений COMMIT или ROLLBACK,то в нормаль-
ном завершении программы автоматически будет завершена и транзакция.

                          ПРЕДЛОЖЕНИЕ COMMIT WORK
   Предложение COMMIT WORK делает "постоянными" все изменения,произведенные
в БД логической единицей работы (естественно,что данные в базе впоследствии
могут изменяться) и завершает эту логическую единицу работы.
   Рекомендуется при программировании явно завершать транзакции в прикладных
программа,используя предложение COMMIT WORK (или ROLLBACK WORK).Если транза-
кция не завершена явно,то при ненормальном завершении прикладной программы,
независимо от причины,система восстановит БД в состояние,предшествующее на-
чалу последней транзакции (т.е.неявно выполнит операцию ROLLBACK).

        Что происходит,когда пользователь выполняет операцию COMMIT
   Когда транзакция выполняется,явно или неявно,происходит следующее:
   1.Все блоки,используемые этой транзакцией и еще не записанные в файл,уда-
ляются.
   2.Недавно модифицированные блоки записываются в БД.
   3.Транзакция намечается как выполненная.
   4.Блоки в BI файле помечаются как вновь доступные для использования дру-
гими транзакциями,если в данный момент нет запросов на чтение блоков.
   5.Таблицы и записи в них,используемые транзакцией,разблокируются.

                       ПРЕДЛОЖЕНИЕ ROLLBACK WORK
   Предложение ROLLBACK отменяет все операции в текущей транзакции и завер-
шает ее.
   Рекомендуется при программировании явно завершать транзакции в прикладных
программах,используя предложение COMMIT WORK (или ROLLBACK WORK).Если тран-
закция не завершена явно,то при ненормальном завершении прикладной програм-
мы,независимо от причины,система восстановит БД в состояние,предшествующее
началу последней транзакции (т.е.неявно выполнит операцию ROLLBACK).

                ВЫПОЛНЕНИЕ ОПЕРАЦИЙ СOMMIT ИЛИ ROLLBACK
              Явное выполнение операций COMMIT и ROLLBACK
   По умолчанию,в большинстве компонентов ORACLE необходимо выполнять (или
отменять) транзакции явно с помощью команд COMMIT WORK или ROLLBACK WORK со-
ответственно.Однако,в некоторых компонентах системы (например,SQL*Plus или
SQL*Calc) можно управлять выполнением этих операций.Например,если выполнена
команда AUTOCOMMIT ON в SQL*Plus,то каждая операция DML выполняется автома-
тически.

      Неявное (автоматическое) выполнение операций COMMIT и ROLLBACK
   Некоторые предложения языка SQL всегда вызывают выполнение операций
COMMIT.В число этих предложений DDL входят:
 - CREATE TABLE
 - DROP TABLE
 - CREATE VIEW
 - CREATE INDEX
   Если предложение DDL вводится сразу после того,как введено несколько пре-
дложений DML,то перед своим выполнением предложение DDL выполняет предыдущую
логическую единицу работы и завершает ее.Только затем,в случае успешного за-
вершения предыдущей транзакции,предложение DDL также выполняется.
   Операция ROLLBACK также м.б. выполнена неявно.Например,в SQL*Plus,если
предложение AUTOCOMMIT ON не выполнялось или было выполнено предложение
AUTOCOMMIT OFF,некоторые ошибки вызывают автоматическое выполнение операции
ROLLBACK.Так,если несколько записей заносится в таблицу вручную,попытка за-
несения неправильной записи может вызвать автоматическое выполнение операции
ROLLBACK перед занесением.
   Ошибки,которые вызывают выполнение операции ROLLBACK,- это,как правило,
ошибки,которые выявляются во время выполнения предложений языка SQL,такие
как попытка вставить дубликат индекса или неправильное число в колонку,опи-
санную как числовую.Синтаксические ошибки,допущенные при написании предложе-
ний SQL и обнаруживаемые на этапе синтаксического разбора,не вызывают авто-
матического выполнения операции ROLLBACK.
   Автоматическое выполнение операции ROLLBACK происходит также при выявле-
нии взаимоблокировки или нормальном завершении прикладной программы.

                                  BI ФАЙЛ
   BI файл выполняет следующие функции:
 - хранит блоки БД на случай выполнения операции ROLLBACK;
 - хранит блоки БД для того,чтобы запомнить состояние БД в начале запроса
   (для обеспечения целостности чтения);
 - хранит блоки БД на случай выполнения команды IOR CLEAR или сбоя централь-
   ного процессора.
   BI файл содержит копии блоков БД,сделанные до внесения в них изменений на
случай,если по какой-либо причине эти изменения станут нежелательными.Напри-
мер,если пользователь изменит свое мнение о необходимости совершения транза-
кции из-за недостатка информации,он может выполнить команду ROLLBACK WORK,
которая осуществит перепись блоков BI файла в БД,отменив,таким образом,выпо-
лнение транзакции.Кроме того,до тех пор,пока какой-либо пользователь работа-
ет с таблицей,другие пользователь,запрашивающие ту же самую таблицу,будут
читать блоки из BI файла,то есть видеть таблицу такой,какой она была до на-
чала работы с ней первого пользователя.
   Отдельный фоновый процесс BIW копирует блоки из системной глобальной об-
ласти SGA в BI файл.Процесс BIW - единственный,осуществляющий запись в BI
файл.
   BI файл используется как циркулярный файл.Записи в файле м.б. переписаны
после того,как они становятся ненужными.Например,блоки,которые были записаны
в BI файл перед выполнением транзакции,становытся ненужными после ее выпол-
нения.

                     Контроль за состоянием BI файла
   Одна из экранных форм систем отображения работы ORACLE (утилиты ODS -
см.главу 4),может применяться для контроля за использованием блоков в BI фа-
йле.Сравнивая первый и последний блоки,можно оценить текущее состояние BI
файла.Подробная интерпретация этой экранной формы приведена в главе 4.

                      Увеличение размеров BI файла
   BI файл представляет собой единственный физический файл.Если OC позволяет
файлам располагаться более чем на одном тексте магнитных дисков,то это допу-
скается и для BI файла.Для того,чтобы увеличить размеры BI файла,вначале не-
обходимо убедиться в том,что он не содержит невыполненных транзакций и толь-
ко потом заменить его на файл больших размеров.
   Следующие действия гарантируют отсутствие невыполненных транзакций и пра-
вильную замену BI файла.
   1.Все пользователи должны выполнить явно или неявно операцию COMMIT и вы-
йти из ORACLE.
   2.Завершить работу ORACLE командой IOR SHUT.Если работа системы заверши-
лась успешно и система выдала сообщение
                                  No active transaction found
то можно пропустить шаги 3 и 4.
   3.Стартовать ORACLE в режиме DBA (командой IOR WARM DBA).
   4.Сразу же остановить систему командой IOR SHUT.
   5.Сохранить BI файл,для того чтобы можно было вернуться к прежнему состо-
янию при необходимости.Разумной мерой предосторожности было бы копирование
на магнитную ленту как BI файла,так и DB файла.
   6.Создать новый,больший по размерам BI файл (на большинстве OC с помощью
утилиты CCF).
   7.Стартовать ORACLE командой IOR WARM с новым BI файлом.(Перед этим необ-
ходимо убедиться,что в файл INIT.ORA занесено имя нового файла).
   ПРИМЕЧАНИЕ: Если выполнить эти действия не удалось,а BI файл испорчен и
               заменен другим файлом,то при старте ORACLE командой IOR WARM
               система может выдать сообщение
           cannot recover; no before image control block found
               Если при этом не сохранилось копии старого BI файла,то БД
               придется создавать заново.

+                          ЦЕЛОСТНОСТЬ ЧТЕНИЯ
   Целостность чтения - это свойство,которое гарантирует то,что в каждом
процесс пользователя видит данные такими,какими они были перед текущей опе-
рацией DML,несмотря на то,что эта операция изменяет данные в этот момент.На-
пример,в ответе на запрос пользователь не видит изменений в данных,произве-
денных во время поиска данных для этого запроса.Целостность чтения осуществ-
ляется только к предложениям DML,т.е.предложениями SELECT,INSERT,UPDATE и
DELETE.
   Для того,чтобы обеспечить целостность чтения в BI файле,запоминаются все
блоки,необходимые для выполнения каждого предложения языка SQL,поступившего
в систему.Любой блок BI файла представляет собой копию БД,сделанную либо для
обеспечения целостности чтения,либо для выполнения операции ROLLBACK,либо и
для того,и другого.
   Если приходится выполнять длительный поиск данных с помощью предложения
SELECT в таблице,которую обновляют другие пользователи,возможно потребуется
увеличить размер BI файла и значения параметров TRANSACTIONS,TABLE_HANDLES и
TABLE_ACCESSES.

+                     БЛОКИРОВАНИЕ В СИСТЕМЕ ORACLE
   Этот раздел в большей степени представляет интерес для пользователей сис-
тем коллективного пользования,чем для пользователей однопроцессных систем,
таких как MS-DOS.Хотя ORACLE в среде MS-DOS использует блокировки точно так-
же,как и в среде любой другой OC,в MS-DOS никогда не случается ни взаимобло-
кировок,ни состояний ожидания,потому что в наличии всегда имеются необходи-
мые ресурсы.
   Одна из главных задач любой системы управления БД
 - обеспечение одновременной работы нескольких пользователей или доступа к
   одним и тем же данным многим пользователям.Без адекватного управления па-
   раллельной работой данные м.б. изменены или обновлены либщ неправильно,
   либо не в той последовательности.Обычный способ управления параллельным
   доступом - использование блокирования.Блокирование - это механизм,предна-
   значенный для предотвращения разрушительного взаимодействия между процес-
   сами (пользователями) в ORACLE.Разрушительное взаимодействие м.б. интерп-
   ретировано как взаимодействие,в результате которого неправильно обновляю-
   тся данные или неправильно изменяется инфраструктура данных (например,та-
   блицы,описания колонок,индексы,предоставление доступа и т.п.).

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

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

 LOCK TABLE tablename [,tablename,...] IN
{ SHARE | SHARE UPDATE | EXCLUSIVE } MODE [NOWAIT]

   Блокировку можно представить себе как нечто,требуемое процессу для того,
чтобы удержать другие процессы от какого-либо действия.Блокировка снимается,
когда процессу это больше не требуется.Обычно блокируются какие-либо ресурсы
или объекты (например,таблицы).
   Процесс требует блокирования объекта в режиме SHARE в тех случаях,когда
он желает просмотреть какой-либо объект и не желает при этом,чтобы кто-нибу-
дь модифицировал его в это время.Процесс требует блокирования объекта в ре-
жиме EXCLUSIVE для того,чтобы модифицировать его и не допустить его модифи-
кации или блокирования в режиме SHARE другим процессом.

                           Типы блокировок
   Блокировки в ORACLE разбиваются на следующие категории:
 - внутренние;
 - словаря/интерпретатора (также называемые блокировками DDL);
 - таблицы/записи (также называемые блокировками DML).
   Первая категория представляет наименьший интерес для пользователей БД,но
кратко обсуждается тоже.Последние 2 категории включают несколько других бло-
кировок.Т.к. они представляют значительный интерес для пользователей,они об-
суждаются более подробно.

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

 - asyncreadahead  защищают структуры данных,используемые для связи асинхро-
    (ARH)          нных запросов на чтение от выполняющего процесса с проце-
                   ссом ARH.
 - audit (AUD)     защищают регистрационный журнал от одновременного доступа
                   несколькими пользователями.
 - before image    защищают блоки на магнитных дисках в BI файле от одновре-
     (BFI)         менного чтения и записи.
 - cashe buffers   защищают структуры данных,которые указывают,какие блоки
     (CBH)         БД размещены в буфере и как они используются.
 - control blocks  защищают специальные системные блоки в БД,которые содер-
     (DCB)         жат номера транзакций,системные константы (такие как N
                   последующего AIJ файла) и таблицы с именами файлов БД.
 - dictionary cache   защищают резидентно размещенные в системной глобальной
     (DCA)            области SGA кэш-буферы словаря данных (таблицы,колон-
                      ки,кластеры и т.д.).
 - enqueues (ENQ)  защищают структуры данных,которые указывают на заблокиро-
                   ванные таблицы,записи и другие ресурсы,а также использую-
                   тся для выявления взаимоблокировок.
 - framing (FRM)   защищают структуры данных,которые указывают контрольные
                   точки для восстановления после аварийного завершения про-
                   цесса.
 - processes (PCB) защищают структуры данных,которые описывают пользовате-
                   лей,вошедших в систему.
 - table access    защищают структуры данных,которые указывают,какие таблицы
     (TAC)         используются,кем,подвергались ли они изменениям и каким.
 - temp tables (TMP)    защищают кэш-буфер временных таблиц.
 - transactions    защищают структуры данных,которые указывают на активные
     (ERT)         DML и DDL транзакции.

                   Сравнительные характеристики блокировок
   СУРБД ORACLE использует 3 основных типа блокировок,краткое описание кото-
рых приводится в следующих разделах:
 - блокировки в режиме SHARE
 - блокировки в режиме EXCLUSIVE
 - блокировки в режиме SHARE UPDATE.

                                 Режим SHARE
Используется при:   - чтении данных из таблицы по запросу.
Используется для того,чтобы не допустить:  - изменения данных в таблице дру-
                                             гими пользователями во время
                                             чтения данных;
                                           - блокирования таблицы в режиме
                                             EXCLUSIVE.
Устанавливается:    - только явно командой
             LOCK TABLE имя_таблицы IN SHARE MODE
Снимается:       - командами COMMIT/ROLLBACK при выходе из системы.
Примечания: блокировки строк таблицы в режиме SHARE UPDATE не запрещаются,но
            изменение записей процессом,который установил на них блокировку,
            не допускается.

                              Режим EXCLUSIVE
Используется при:    изменении данных в таблице.
Используется для того,- изменения данных в таблице другими
чтобы не допустить:    пользователями в это же время (чтение возможно);
                      - блокирования таблицы в режимах SHARE,SHARE UPDATE и
                        EXCLUSIVE.
Устанавливается:    - явно командой LOCK TABLE имя_таблицы IN EXCLUSIVE MODE
                    - неявно предложениями DML:
                    - INSERT INTO имя_таблицы;
                    - UPDATE имя_таблицы;
                    - DELETE FROM имя_таблицы.
Снимается:  - при выполнении операций COMMIT/ROLLDACK;
            - при выходе из системы.
Примечания: Хотя другие процессы не могут установить блокировки в режиме
            SHARE на эту таблицу,они могут запрашивать данные из нее.Однако
            данные могут изменяться во время запросов,хотя эти изменения не
            появятся в ответе на эти запросы.Блокировка в режиме EXCLUSIVE
            означает то,что только одному процессу разрешается изменять дан-
            ные в таблице в любой момент времени.Так как требуется только
            единственная блокировка на таблицу,не имеет значения,сколько за-
            писей модифицируется в ней.Использование этого типа блокировок
            минимизирует требования к списку блокировок ORACLE.

                           Режим SHARE UPDATE
Используется для: - резервирования права записи в одну или несколько строк
                    таблицы для их последующего обновления;
                  - предоставления возможности другим пользователям запраши-
                    вать данные в этой таблице и устанавлиать на нее блоки-
                    ровки в режиме SHARE UPDATE.
Используется для того, - изменения тех же самых записей в таб-
чтобы не допустить:     лице другими пользователями;
                       - блокирования таблицы в режиме  EXCLUSIVE.
Устанавливается: - явно командой LOCK TABLE имя_таблицы IN SHARE UPDATE MODE
                 - неявно предложением языка SQL SELECT ...FOR UPDATE
Снимается:       - при выполнении операций COMMIT/ROLLBACK;
                 - при выходе из системы.

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

            Блокировки словаря/интерпретатора (DDL блокировки)
   Вообще,DDL блокировки (устанавливаемые предложениями описания данных язы-
ка SQL) блокируют словарь данных так,чтобы инфраструктура данных не изменя-
лась во время работы с ними.Изменения структуры объектов БД (таких как опи-
сания таблиц,колонок,кластеров и привилегий доступа пользователей) д.б. от-
делены от изменения данных.Блокировки для операций DML,которые защищают дан-
ные,будут рассматриваться несколько позже.
   Блокировки DDL устанавливаются неявно,на этапе синтаксического разбора,
когда происходит обращение к командному интерпретатору языка SQL путем вызо-
ва процедуры OSQL3,и снимаются при выходе из системы,при повторном использо-
вании курсора или его закрытии.Более подробно о процедурах ORACLE,включая
процедуру OSQL3,смотри в руководствах по интерфейсам с языками высокого уро-
вня,таких как Руководство пользователя Pro*FORTRAN.Все блокировки словаря
данных устанавливаются автоматически ORACLE,они не могут устанавливаться по-
льзователем явно.
   Существует 3 типа блокировок словаря/интерпретатора:
 - блокировки операций со словарем;
 - блокировки описания словаря;
 - блокировки описания таблиц.

                       Блокировки операций со словарем
   Эти блокировки запирают словарь данных во время действия любой операции
над словарем,гарантируя то,что только одна единственная операция выполняется
над словарем в каждый момент времени.Следовательно,в любой момент времени
м.б. установлена только одна такая блокировка,и эта блокировка устанавливае-
тся в режиме EXCLUSIVE.Примерами операций,воздействующих на словарь данных,
могут служить операции при выполнении предложения CREATE TABLE,DROP TABLE,
INDEX,VIEW,CLUSTER и операции,производимые в том случае,если таблице требуе-
тся следующий экстент данных или индексов.
   Необходимо отметить,что таблицы словаря данных не блокируются на все вре-
мя операции.Они заперты только тогда,когда ORACLE непосредственно производит
изменения в них.Например,команда CREATE INDEX блокирует таблицы словаря то-
лько на время,когдав них добавляются новые записи,описывающие индекс,а не на
время,когда строится сам индекс.
   В системе ODS эти блокировки отображаются следующим образом:
 DDL ...10000 ...0   X

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

                        Блокировки описания словаря
   В каждый момент времени м.б. установлено несколько блокировок описания
словаря данных,и они м.б. установлены либо в режим SHARE,либо в режиме
EXCLUSIVE.
   Блокировки описания словаря устанавливаются в режиме EXCLUSIVE процесса-
ми,выполняющими команды DDL и DCL.Это предотвращает структуру таблицы (или
ее существование) от изменений в то время,когда из словаря запрашиваются
данные.
   В системе ODS блокировка описания словаря в режиме EXCLUSIVE отображается
следующим образом:
 DDL ...20000 ...0   X

   Блокировки описания словаря устанавливаются в режиме SHARE пользователя-
ми,которые используют командный интерпретатор для синтаксического разбора
запросов или предложений DML (таких как INSERT,UPDATE или DELETE).
   В системе ODS блокировка описания словаря в режиме SHARE отображается
следующим образом:
 DDL ...20000 ...0   S

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

                      Блокировки описания таблиц
   Блокировки описания таблиц могут устанавливаться как в режиме SHARE,так и
в режиме EXCLUSIVE.
   Они устанавливаются в режиме EXCLUSIVE пользователями,модифицирующими
описания таблиц.В системе ODS такие блокировки отображаются следующим обра-
зом:
     DDL ...partition ...rba   X

где partition и rba представляют собой ссылки на определенную таблицу.
   Блокировки описания таблиц устанавливаются в режиме SHARE пользователями,
которые ссылаются на эти таблицы в предложениях языка SQL.Каждое активное
предложение языка SQL устанавливает блокировку на описания таблиц в режиме
SHARE.Такой тип блокировок,возможно,является самым распространенным.В систе-
ме ODS блокировки описания таблиц отображаются следующим образом:
 DDL ...partition ...rba   S

где partition и rba представляют собой ссылки на определенную таблицу.Эти
блокировки предотвращают любые изменения записей в словаре для данной табли-
цы,пока на эту таблицу ссылается активное предложение языка SQL.Например,по-
ка на таблицу ссылается подвергающееся синтаксическому разбору предложение
SQL,никакие операции со словарем,воздействующие на описание этой таблицы
(такие как ALTER TABLE,CREATE INDEX или DROP INDEX,или DROP TABLE) не могут
осуществляться.Процессы,пытающиеся осуществить такие операции,получают сле-
дующее сообщение об ошибке:
                          data definition operation and resource being used

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

                Блокировки таблицы/записи (DML блокировки)
   В отличие от блокировок словаря/интерпретатора,которые блокируют структу-
ры,эти блокировки осуществляются для того,чтобы гарантировать целостность
данных при одновременных транзакциях.Блокировка может устанавливаться либо
на уровне таблиц,либо на уровне записей.Большинство DML блокировок м.б. зап-
рошено процессом явно или,при необходимости,неявно,используя некоторые пред-
ложения SQL.Блокирование целых таблиц,осуществляемое процессом,прекращается
в следующих случаях:
 - при выполнении операции COMMIT;
 - при выходе из системы или завершении процесса;
 - при выполнении операции ROLLBACK.
   Блокирование отдельных записей в таблице,осуществляемое процессом,прекра-
щается только при выполнении операции COMMIT,при выходе из системы или заве-
ршении процесса.Необходимо особо отметить,что блокирование записей не прек-
ращается после выполнения операции ROLLBACK.

              Существует 2 способа блокирования таблиц:
LOCK TABLE имя_таблицы [,имя_таблицы] IN SHARE MODE   [NOWAIT]

LOCK TABLE имя_таблицы [,имя_таблицы] IN EXCLUSIVE MODE [NOWAIT]

   Как в режиме SHARE,так и в режиме EXCLUSIVE,можно блокировать несколько
таблиц.Кроме режимов SHARE и EXCLUSIVE,существует и третий режим SHARE
UPDATE,который рассматривается при блокировании на уровне записи.Для того,
чтобы избежать ожидания в случае,если блокирование временно недоступно,испо-
льзуется опция NOWAIT.Имеется один способ блокирования отдельных записей в
таблице:
         SELECT ...FROM имя_таблицы FOR UPDATE OF имя_колонки [NOWAIT]

                 Блокирование таблиц в режиме SHARE
   Блокирование таблиц в режиме SHARE производится только явно и использует-
ся для того,чтобы не допустить изменения содержимого таблицы другими пользо-
вателями,но не чтения из них.Основное назначение этой блокировки - не допус-
тить изменения данных между двумя запросами.Команда,устанавливающая блокиро-
вку таблицы в режиме SHARE,имеет следующий синтаксис:
                 LOCK TABLE имя_таблицы IN SHARE MODE [NOWAIT]

   Информация о таблицах,блокированных в режиме SHARE,отображается системой
ODS на двух строках экрана:
                             DML   partition   rba   S
                             DML  10000+partition rba  S

   Блокирование таблиц в режиме SHARE прекращается при выполнении процессом
операций COMMIT,ROLLBACK,выходе из системы или завершении процесса.

                  Блокирование таблиц в режиме EXCLUSIVE
   Блокирование таблиц в режиме EXCLUSIVE м.б. произведено неявно,используя
предложения DML,такие как INSERT,UPDATE и DELETE,или явно,используя предло-
жение:
           LOCK TABLE имя_таблицы IN EXCLUSIVE MODE  [NOWAIT]

   Блокирование таблицы в режиме EXCLUSIVE не позволяет другим пользователям
произвести блокирование этой таблицы в режиме SHARE или выполнение DML тран-
закций,таких как INSERT,UPDATE или DELETE,которые устанавливают на эту таб-
лицу блокировку в режиме EXCLUSIVE.Другие процессы могут запрашивать данные
из этой таблицы,однако нет гарантий,что они получат последние данные.Блоки-
рование таблиц в этом режиме является единственным способом,который гаранти-
рует,что только один процесс может изменять данные в таблице.Если какая-либо
транзакция типа UPDATE требует нескольких таблиц,то их блокирование в режиме
EXCLUSIVE может снизить вероятность возникновения взаимоблокировок.
 В системе ODS блокировки в режиме EXCLUSIVE отображаются следующим образом:
                 DML  partition  rba   X

пример:  DML.......1....124d   X

            БЛОКИРОВАНИЕ НА УРОВНЕ ЗАПИСЕЙ (режим SHARE UPDATE)
   Блокирование таблиц обеспечивает согласованность и целостность данных,но,
в то же время,снижает эффективность одновременной работы нескольких пользо-
вателей.Блокирование же записей в таблице гарантирует,с одной стороны,согла-
сованность данных и их целостность,с другой,улучшает показатели одновремен-
ной работы с данными.Блокирование на уровне записей осуществляется в режиме
SHARE UPDATE MODE (не путать с режимом SHARE,в котором блокируется вся таб-
лица).
   Блокирование на уровне записей гарантирует,что записи,которые желает из-
менить пользователь,не будут изменены другими пользователями за тот промежу-
ток времени,в который происходит поиск этих записей и их обновление.Рассмот-
рим 3 следующих сценария (A,B и C) обновления записи:
--------------------------------------------------------------+
|             УРОВЕНЬ ТАБЛИЦ   УРОВЕНЬ ЗАПИСЕЙ                |
|            --------------------- ---------------            |
| ПОЛЬЗОВАТЕЛЬ:       A            B              C           |
| ДЕЙСТВИЕ:                                                   |
|------------------------------------------------------------ |
| Найти запись для того,ищет   ищет (таб-  ищет (select |
| чтобы просмотреть ее      лица заблоки-  for update)  |
|                рована в режи-        |
|                ме SHARE)           |
|             .    .      .    |
| Просмотреть запись    .    .      .    |
|             .    .      .    |
| Обновить       обновляет (таблица автоматически    |
|            блокируется в режиме EXCLUSIVE)    |
| Записать в базу    записывает (блокировка EXCLUSIVE    |
| данных (COMMIT)          снимается)         |
+--------------------------------------------------------------+
   В сценарии A до обновления записи не производится никаких блокировок,и
поэтому запись м.б. изменена и записана в БД операцией COMMIT другим пользо-
вателем до того,как пользователь A произведет свои изменения.Несмотря на об-
легчение одновременной работы,одновременно растет риск изменения уже измене-
нных данных.
   В сценарии B возможность изменения данных кем-либо еще исключена,но прои-
зводительность одновременной работы снижена,так как пользователь B блокирует
таблицу в режиме SHARE до того,как устанавливает на нее блокировку в режиме
EXCLUSIVE для внесения изменений.
   В сценарии C,блокируя отдельные записи в таблице(используя SELECT ...FOR
UPDATE),достигается как согласованность и целостность данных,так и высокая
производительность одновременной работы.Блокирование записей гарантирует,что
они не будут изменены в то время,когда пользователь C просматривает их,а та-
блица блокируется полностью в режиме EXCLUSIVE только тогда,когда действите-
льно происходит изменение записей.
   Блокирование на уровне записей - это то же самое,что и блокирование в ре-
жиме SHARE UPDATE
   Если быть точным,то блокирование на уровне записей производится в режиме
SHARE UPDATE.Однако режим SHARE UPDATE можно установить еще до блокирования
записей таблицы.Пользователь может установить режим SHARE UPDATE для таблицы
двумя способами: используя предложение SELECT ...FOR UPDATE как в запросе 1,
или явно,как в запросе 2.
        Запрос 1                 Запрос 2
     SELECT EMPNO,ENAME       LOCK TABLE имя_таблицы
     FROM EMP                 IN SHARE UPDATE MODE
     WHERE EMPNO = 7839
     FOR UPDATE OF SAL

   Все таблицы,чьи колонки появляются в предложении FOR UPDATE,блокируются в
режиме SHARE UPDATE.
   ПРИМЕЧАНИЕ: Выбор идентификатора записи ROWID требовался в версии 4
               ORACLE,но не требуется в версии 5.Однако включение его в спи-
               сок предложения SELECTможет оказаться полезным особенно для
               того,чтобы быть уверенным,что ROWID не изменился с того вре-
               мени,как пользователь в последний раз имел доступ к нему.

                Для чего используется режим SHARE UPDATE
   Главной причиной использования режима SHARE UPDATE является положение,при
котором пользователю не нужно или он не желает использовать предложение
SELECT...FOR UPDATE,а другие пользователи используют блокирование на уровне
записей.В таких случаях пользователь может использовать команду LOCK TABLE
...IN SHARE UPDATE MODE потому,что он вставляет новые записи (а не удаляет
или обновляет существующие записи),или потому,что при обновлении не требует-
ся точно указывать идентификаторы обновляемых записей,
например:  UPDATE EMP SET SAL = SAL * 1.1 WHERE JOB = 'PROGRAMMER'

   Ecли какой-либо пользователь заблокировал таблицу в режиме SHARE UPDATE,
любой другой пользователь должен использовать этот режим для занесения,обно-
вления или удаления записей в этой таблице или,в противном случае,ему приде-
тся ожидать,пока блокировка в режиме SHARE UPDATE не будет снята с этой таб-
лицы.
   Даже в режиме SHARE UPDATE никакие 2 пользователя не могут на самом деле
модифицировать таблицу в одно и то же время.В действительности при обновле-
нии (или любой другой операции DML) таблица блокируется в режиме EXCLUSIVE
до тех пор,пока транзакция не будет завершена операцией COMMIT или ROLLBACK.
   Блокирование записей всегда производится в режиме EXCLUSIVE.
   Эти блокировки в системе ODS отображаются следующим образом:
        SELECT...FOR UPDATE:
         ROW   kba  prn    X
например:  ROW....9228  10001   X

где KBA - 16-ный адрес блока ядра,а prn - N раздела и записи в логическом
блокею В следующем примере адрес блока ядра - 9228,раздел- 1 и запись- 0001.

                           Режим SHARE UPDATE:
   во время SELECT FOR UPDATE или LOCK ...SHARE UPDATE:
     DML   partition    rba    S

    например:  DML.......1....1243  S

   во время операции обновления:
     DML 10000 + partition  rba   X

    например:  DML...10001....1243  X

                         Блокирование в SQL*Forms
   SQL*Forms работает в режиме SHARE UPDATE потому,что блокирование на уров-
не записей целесообразно применять в тех прикладных программах,в которых на
поиск заданной записи и ее обновление на экране терминала затрачивается при-
емлемое время.Использование блокирования на уровне записи гарантирует,что
запись не будет изменена без предупреждения пользователю.Если запрашиваемая
запись в данное время заблокирована другим пользователем,то запрашивающий
получит на свой терминал следующее сообщение:
               Attempting to reserve record for update (x to abort)

где x - специфическая для данной OC последовательность прерывания.Затем
SQL*Forms запрашивает блокировку от имени пользователя,ожидающего,пока она
сможет быть установлена.
   Изменения,произведенные в таблице,не записываются в БД до тех пор,пока
пользователь не произведет всех необходимых ему изменений и не нажмет клави-
шу,вызывающую операцию COMMIT.Если выполняется операция ROLLBACK,блокировки
не снимаются в ожидании того,что пользователь изменит некоторые значения и
вновь попытается выполнить операцию COMMIT.
   SQL*Forms не выполняет предложения LOCK для переключателей.

Если переключатели устанавливаются на основной таблице текущего блока и при
этом записи обновляются или удаляются,то таблица уже заблокирована.Однако
если переключатель связан не с основной таблицей,то он должен состоять по
крайней мере из 2 предложений языка SQL,при этом первое из них блокирует эту
таблицу в режиме SHARE UPDATE во избежании слишком длительных ожиданий.
 ...
;field name:
post update
;SQL>
lock table bonus in share update mode
/
;msg
some message here
;must value exist
y
;SQL>
update bonus set bonus = &sal * 1.15 where ename = &ename

 Пользователям SQL*Plus,желающим модифицировать таблицы,используя SQL*Forms,
следует также использовать режим SHARE UPDATE.

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

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

                Общие рекомендации по блокированию
некоторых ресурсов для того,чтобы повысить пропускную способность.Более кон-
кретно,желательно минимизировать время между первым обновлением записи и вы-
полнением операций COMMIT или ROLLBACK.Этому могут способствовать следующие
рекомендации:
   1.Если при выполнении операций UPDATE или DELETE предусматривается неко-
торый промежуток времени до завершения транзакции,то желательно рассмотреть
возможность блокирования модифицируемых записей для того,чтобы они не были
изменены за это время и задержать эти изменения до самого выполнения тран-
закции.
   2.Если возможна модификация записей другими процессами в режиме SHARE
UPDATE (как в SQL*Forms),то нужно использовать режим SHARE UPDATE,а не SHARE
или неявное блокирование,для того чтобы увеличить производительность парал-
лельной работы и позволить другим процессам использовать блокирование на
уровне записей.
   3.Необходимо,когда это возможно,разрабатывать прикладные программы так,
чтобы доступ к таблицам обеспечивался в режиме SHARE UPDATE.Это улучшит про-
изводительность параллельной работы.
   4.Необходимо избегать модификации инфраструктуры данных (таблиц,колонок,
индексов,кластеров,виртуальных таблиц,синонимов) во время выполнения прикла-
дной программой операций DML (например,ввода или поиска данных).

+     ГЛАВА 10.НАСТРОЙКА СИСТЕМЫ С ЦЕЛЬЮ ПОВЫШЕНИЯ ЕЕ ПРОИЗВОДИТЕЛЬНОСТИ
   В этой главе описывается назначение индексов и кластеров - двух наиболее
важных средств повышения производительности ORACLE.Рассматривается также
пространство контекста и вопросы улучшения производительности системы путем
написания различных предложений SQL.
   Отдельный пользователь может предпринять разнообразные действия для улуч-
шения производительности собственной работы с ORACLE независимо от других
пользователей.Среди допустимых ему средств наиболее ценными являются индексы
и кластеры.
   Кроме того,администратор БД и разработчик прикладных программ могут улуч-
шить производительность ORACLE,особенно в режиме коллективного пользования.
Это достигается настройкой параметров файла INIT.ORA,установки значений па-
раметров БД по умолчанию и т.д.
   И,наконец,увеличению производительности ORACLE могут способствовать меро-
приятия,осуществляемые из общих соображений повышения эффективности работы в
среде OC.Более подробная информация об этом способе настройки содержится в
Руководстве по установке и Руководстве пользователю для конкретной OC.
   ПРИМЕЧАНИЕ: Информация,содержащаяся в этой главе,относится к текущей вер-
               сии СУРБД ORACLE на момент написания данного руководства; эта
               информация м.б. изменена в последующих реализациях системы.

                      НАСТРОЙКА ОТДЕЛЬНЫМ ПОЛЬЗОВАТЕЛЕМ
   Цели повышения производительности м.б. достигнуты отдельным пользователем
в основном за счет правильного описания и хранения данных.Для одного и того
же набора данных,предназначенного для хранения,м.б. созданы различные наборы
таблиц,однако,в зависимости от того,какой конкретно набор таблиц будет выб-
ран,производительность может увеличиться (если выбор сделан правильно),либо
значительно ухудшиться (если выбор сделан неправильно).Хорошее понимание те-
ории реляционных БД и их практического применения (и то,и другое выходит за
рамки этого руководства) может помочь как разработчику,так и пользователю
достигнуть гибкости и высокой производительности хорошо разработанных реля-
ционных БД.
   Помимо правильной разработки схемы БД пользователь может улучшить произ-
водительность системы самостоятельно путем использования возможностей индек-
сации и кластеризации.Опытные пользователи могут заметить разницу в произво-
дительности,задавая один и тот же запрос с помощью различных предложений
языка SQL,т.к.обычно имеется по крайней мере 2 способа запроса одних и тех
же данных.

                                ИНДЕКСАЦИЯ
   Индексирование производится для достижения следующих 2 целей:
 - Ускорение выполнения операций.Так же как алфавитный указатель в конце
   книги помогает читателю найти необходимую информацию быстрее,чем при его
   отсутствии,так и индексы в ORACLE помогают СУРБД ORACLE быстрее определи-
   ть местоположение данных,необходимых пользователю;
 - Гарантия уникальности.Индексы могут гарантировать,что данные в одном поле
   или комбинации полей уникальны для каждой записи в таблице.Например,инде-
   кс может гарантировать,что каждая вводимая в БД комбинация кода области и
   телефонного номера будет уникальна.

                      Индексы,ключи и связанные ключи
   Необходимо понимать различие между индексами и ключами.Индексы действите-
льно применяются к SQL для достижения двух упомянутых выше целей.Ключи же
представляют собой логическое понятие.Ключ представляет собой колонку (ком-
бинацию колонок),которая м.б. использована для проверки уникальности запи-
сей.Связанные ключи также являются логическим понятием и представляют собой
колонку в одной таблице,которая является ключом к другой таблице.Связанные
ключи чрезвычайно полезны в случаях,когда выбираются данные из нескольких
таблиц путем их обЪединения.Например,в следующем примере колонка DEPTNO яв-
ляется связанным ключом в таблице EMP,в то время как в таблице DEPT она яв-
ляется ключом (предположительно индексированным),потому что каждое значение
в DEPTNO уникально идентифицирует одну запись в этой таблице.

ECT ENAME,DEPTNO,DNAME
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO

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

                           Создание индексов
  Владелец таблицы может создавать на ней индексы.Любой пользователь ORACLE,
которому предоставлен доступ INDEX к этой таблице,также может создавать ин-
дексы на ней.Индексы на таблице используются для реализации предложений язы-
ка SQL,когда это возможно,независимо от того,кто создал эти индексы.

   Синтаксис команды создания индексов приведен на рис.32.
------------------------------------------------------------+
|  CREATE [UNIQUE] INDEX имя_индекса ON имя_таблицы         |
|   имя_колонки1 [,имя_колонки2,имя_колонки3]               |
|   [{SYSSORT | NOSYSSORT}]                                 |
|   [ PCTFREE=n]                                            |
|   [{COMPRESS | NOCOMPRESS}]                               |
|   [ ROWS = количество_записей ]                           |
------------------------------------------------------------+
      Рис.32.Синтаксис команды CREATE INDEX

 SYSSORT/NOSYSSORT - по умолчанию SYSSORT и д.б. использовано всегда.Эта оп-
                     ция вызывает процедуру сортировки/обЪединения
                     ORACLE.NOSYSSORT означает,что вместо этой процедуры ис-
                     пользуются алгоритмы занесения индексов.Значение
                     NOSYSSORT следует применять только по рекомендации пре-
                     дставителей фирмы-разработчика.
 ROWS -              в версии 5 эта опция игнорируется.
 PCTFREE=n -         эта опция указывает,насколько д.б. заполнены листья
                     B*-дерева во время начального создания индексов.Если в
                     таблицу предполагается заносить новые записи,то обосно-
                     ванным значением PCTFREE будет 10-15%.По умолчанию -
                     10%.
 COMPRESS/NOCOMPRESS - указывает,должны ли данные быть уплотнены или нет.По
                       умолчанию COMPRESS.В разделе "Уплотненные и неуплот-
                       ненные индексы" приведено описание обоих типов индек-
                       сов.
   Когда вводится команда CREATE INDEX,записи в колонке(ках),на которой соз-
дается индекс,упорядочиваются,ROWID при этом сохраняется.Поэтому для предло-
жения
           CREATE INDEX IN_EMP_EMPNO ON EMP(EMPNO)

выполняется сортировка по колонкам EMPNO и ROWID для всех существующих запи-
сей,и загружается В*-дерево индекса снизу вверх.Краткое описание внутренней
структуры индексов приводится в разделе "Внутренняя структура индексов" ниже.
   Будучи однажды создан,индекс автоматически поддерживается и используется
ORACLE.Например,при изменении данных,таких как добавление новых записей или
удаление записей,индекс автоматически привлекается ORACLE,не требуя дополни-
тельных усилий со стороны пользователя.
   Таблица может иметь любое количество индексов.Однако,чем больше индексов,
тем больше накладных расходов несет система при обновлении данных в таблице.
Для принятия решения о количестве индексов необходимо оценить увеличение
скорости поиска и уменьшение скорости обновления данных.Например,если табли-
ца только читается,большое количество индексов может оказаться полезным,но
если таблица очень часто обновляется,более разумным может оказаться уменьше-
ние количества индексов.
   Обычно индекс создается после того,как данные загружены в таблицу (напри-
мер,более эффективно сначала грузить данные в таблицу,используя ODL,а затем
создать индексы).Если индекс создается до загрузки данных,то при каждом за-
несении нловой записи индекс обновляется.М.б. сделано одно исключение за
счет производительности в случае,когда требуется обеспечить уникальность
значения каждой загружаемой записи.В этом случае на тех колонках,значения
которых д.б. уникальными,нужно создать уникальный индекс.

                         Конкатенированные индексы
   Конкатенированный индекс - это индекс,который создается более чем на од-
ной колонке в таблице.Создание конкатенированных индексов - единственный
способ обеспечить уникальность записей по нескольким колонкам.Конкатениро-
ванные индексы могут также увеличить скорость выборки данных по запросам для
некоторых условий,задаваемых выражением WHERE в предложениях языка SQL.
   С помощью одного конкатенированного индекса м.б. проиндексировано до 16
колонок.При индексации накладывается ограничение на общую длину индекса.Не-
зависимо от того,конкатенированный индекс используется или нет,максимальное
количество индексов,содержащихся в индексе - 240,включая однобайтовый раз-
делитель,который используется для выделения колонок.Действительная длина ко-
нкатенированного индекса определяется суммированием длин всех индексируемых
колонок плюс количество этих колонок минус единица (для учета разделителей).
   Ниже приводится пример создания конкатенированного индекса:
CREATE UNIQUE INDEX IND_VEND_ID
ON VENDORS (VEND_ID,PART_NO)

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

SELECT *
FROM VENDORS
WHERE VEND_ID = '1292'
AND PART_NO = 457

   Порядок,в котором имена колонок появляются в предложении CREATE INDEX,не
связан с порядком появления этих имен в описании таблицы.Однако производите-
льность может зависеть от выбранного порядка.В основном,имя колонки,которая,
как ожидается,будет использоваться чаще,д.б. первым.
   Конкатенированный индекс увеличивает скорость выборки данных по запросам,
использующим начальную часть индекса.Запросы с выражением WHERE,в котором
используются первые(первая) колонки конкатенированного индекса,также повыша-
ют производительность.Для следующих примеров предполагается,что создан кон-
катенированный индекс следующей командой:

 SQL> CREATE INDEX INDNAME_CITY_STATE ON
   EMPLOYEE (LAST_NAME,CITY,STATE)

   В первом примере индекс будет увеличивать скорость выборки данных из таб-
лицы,т.к. выражение WHERE обращается к тем же 3 колонкам,которые были проин-
дексированы:
              SELECT ...
              FROM EMPLOYEE
              WHERE LAST_NAME = 'SMITH'
              AND CITY = 'FREDERICK'
              AND STATE = 'MD'

   Если в выражении WHERE используется только первая колонка,индекс тоже бу-
дет использоваться,хотя и не так эффективно,как в первом примере.

 SELECT ...
FROM EMPLOYEE
WHERE LAST_NAME = 'JONES'
 AND STATE = 'VA'

   В следующих двух примерах индекс не м.б. использован потому,что выражение
WHERE не содержит ссылок на имя первой колонки в индексе:
                    SELECT ...FROM EMPLOYEE
                    WHERE CITY = 'BLACKSBURG'
                    AND STATE = 'MD'
      SELECT ...
      FROM EMPLOYEE
      WHERE STATE = 'DC'

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

                   Уплотненные и неуплотненные индексы
                          Уплотненные индексы
   По умолчанию индексы создаются уплотненными.То есть индексы хранятся уп-
лотненными как слева,так и справа.При этом та часть значения индекса,которая
действительно хранится,представляет собой часть,отличающуюся от значений ин-
декса непосредственно перед и непосредственно после данного значения.На
рис.33 приведены примеры уплотненных значений индексов.
   Достоинствами уплотненных индексов является экономия памяти,использование
В*-деревьев с меньшим числом уровней,что приводит к уменьшению количества
операций ввода-вывода.Однако,их использование связано с затратами на обрабо-
тку,связанными с выполнением уплотнения и декодированием уплотненных значе-
ний при выборке данных из таблицы.Например,если колонка для значений,пока-
занная на рис.33,была описана как CHAR(10),то ORACLE может восстановить эти
ключи только следующим образом:
  JOHNS?????
 JOHNSTO???
 JOHNSTOW??
 JOHNT????
однако для выборки действительных значений данных ORACLE должна обратиться к
блокам данных,а не индексов.ORACLE может внутренним образом проверить,дейст-
вительно ли записи,удовлетворяющие запросу по уплотненным ключам удовлетво-
ряют ему по реальным данным.
---------------------------------------------------------------+
| Проиндексировать значения:                                   |
|  JOHNSON                                                     |
|  JOHNSTON                                                    |
|  JOHNSTOWN                                                   |
|  JOHNTON                                                     |
|                                                              |
| УПЛОТНЕНИЕ СЛЕВА:                                            |
| Сколько символов в начале каждого ключа аналогичны           |
|               предшествующему ключу?                         |
| Ключ:    Количество   Результат: Количество уплотненных      |
|         уплотняемых     слева символов и остаток ключа:      |
|         символов:                                            |
|                                                              |
| JOHNSON   0 (первый ключ) 0 JOHNSON                          |
| JOHNSTON  5               5 TON                              |
| JOHNSTOWN  7              7 WN                               |
| JOHNTON   4               4 TON                              |
|                                                              |
| УПЛОТНЕНИЕ СПРАВА:                                           |
| Сколько символов в конце каждого ключа аналогичны            |
|                            предшествующему ключу?            |
| Ключ    Результат     Результат                              |
|        уплотнения     уплотнения                             |
|          слева         справа                                |
|                                                              |
| JOHNSON   0 JOHNSON     0 JOHNS                              |
| JOHNSTON  5 TON         5 TO                                 |
| JOHNSTOWN  7 WN         7 W                                  |
| JOHNTON   4 TON         4 T                                  |
|                                                              |
| ДЕЙСТВИТЕЛЬНЫЕ ЗНАЧЕНИЯ ИНДЕКСОВ УПЛОТНЕННЫХ СЛЕВА И СПРАВА  |
| Ключ    Количество     Длина ключа      Оставшиеся данные    |
|         уплотненных                          о ключе         |
|          символов                                            |
|                                                              |
| JOHNSON   0                5                  JOHNS          |
| JOHNSTON  5                2                   TO            |
| JOHNSTOWN  7               1                   W             |
| JOHNTON   4                2                   T             |
---------------------------------------------------------------+
    Рис.33.Пример уплотнения значений индексов справа и слева

                          Неуплотненные индексы
   Можно указать,чтобы индексы создавались без всякого уплотнения,задав оп-
цию NOCOMPRESS в команде CREATE INDEX.Из-за того,что неуплотненные индексы
хранят полное значение индексируемых данных,в некоторых случаях выборка из
таблицы с их помощью производится быстрее.Тщательно выбранные,неуплотненные,
конкатенированные индексы могут оказаться чрезвычайно полезными для повыше-
ния производительности.Используя неуплотненные индексы (конкатенированные
или неконкатенированные),некоторые запросы м.б. разрешены непосредственно в
индексах,даже без чтения блоков данных.Это справедливо в случаях,когда пред-
ложение языка SQL ссылается только на колонки с неуплотненными индексами.
Например,если колонка ENAME проиндексирована с использованием неуплотненных
индексов,то оба следующих запроса разрешаются только с помощью индексов.

SELECT ENAME                SELECT COUNT (ENAME)
FROM EMP                    FROM EMP
WHERE ENAME LIKE 'N%S'      WHERE ENAME = 'CHRIS'

   Использование неуплотненных индексов также экономит время поиска потому,
что не производится разуплотнение индексов во время их просмотра.Однако из-
за того,что в индексе хранится полное значение данных,требуется значительно
больше памяти.В то время как уплотненный индекс занимает примерно 10 байт на
запись,неуплотненный индекс требует в среднем 17 байт плюс значение ключа
(см.раздел "Расчет количества сегментов индекса").

      Как писать предложения языка SQL для того,чтобы воспользоваться
                         преимуществами индексов
    Существует 2 основных способа доступа к данным,хранящимся в таблицах БД
ORACLE:
 - просмотр всей таблицы;
 - использование индексов.
   Почти во всех случаях использование индексов предпочтительнее полному
просмотру таблицы потому,что большинство предложений языка SQL предназначаю-
тся для того,чтобы выбрать желаемые записи данных из таблицы,а не для того,
чтобы использовать все записи из таблицы.Предложения DML (в особенности
SELECT,UPDATE и DELETE) часто содержат выражения,указывающие,какие записи
д.б. включены или исключены.Например,изменить зарплату всем служащим опреде-
ленного отдела или выбрать дни рождения всех женщин.
   Полный просмотр таблицы предпочтительнее только в тех случаях,когда зара-
нее известно,что опрашиваемой таблице будет выбрано более 25 процентов запи-
сей и,поэтому,использование индексов только увеличит накладные расходы.
   Индексы м.б. использованы,если:
 - На них ссылаются из условного выражения.Условие - это часть критерия,ис-
   пользуемого для определения включать или не включать запись в результат.
   Например,следующее выражение WHERE содержит 2 условия:
     WHERE DNAME = 'DEVELOPMENT'
     AND SEX != 'FEMALE'
 - индексированная колонка не модифицирована функцией или арифметической
   операцией;
 - индекс будет использоваться,если оптимизатор найдет это необходимым (нес-
   колько последующих разделов описывают действия ORACLE при некоторых обс-
   тоятельствах,многие из которых пользователь может контролировать).

                   Индекс не будет использован,если:
 - отсутствует выражение WHERE;
 - условие модифицируется каким-либо способом (посредством функции или ариф-
   метической операции);
 - идет поиск записей со значениями NULL и NOT NULL в индексированной колон-
   ке (т.е.условие содержит IS NULL или IS NOT NULL).

   Если колонка д.б. модифицирована для того,чтобы удовлетворять условиям
выборки,как это показано в следующем примере,индекс использоваться не может:
 SELECT * FROM EMP
 WHERE SAL * 12 = 24000
 ...
 WHERE SAL + 0 = 500
 ...
 WHERE ''||ENAME = ' Smith'
 ...
 WHERE SUBSTR(ENAME,1,1) = 'S'

   Это правило не выполняется,если запрос включает выражение,содержащее:
            { MIN | MAX } ( <колонка> { + | - } < константа> )

и не включает никаких других колонок,например:
 SELECT 2 * MAX (SAL+1) FROM EMP

   Один и тот же запрос м.б. сформулирован двумя различными способами:
с использованием индекса и без него.В следующем примере предполагается,что
колонка HIREDATE описана как DATE и имеет неуникальный индекс.Запрос
     SELECT *
     FROM EMP
     WHERE TO_CHAR(HIREDATE,'Month dd,yyyy')
     = 'January 14,1986'

модифицирует колонку HIREDATE с помощью функции TO_CHAR,поэтому индекс не
используется,в то время как в запросе
    SELECT *
    FROM EMP
    WHERE HIREDATE =
    TO_DATE('January 14,1986','Month dd,yyyy')

константа (January 14,1986) преобразуется в данное типа DATE,и поэтому для
поиска данных ORACLE использует индекс.
      Вообще,при использовании константы в качестве критерия поиска всегда
предпочтительнее преобразовывать ее в соответствующий тип данных.
      В следующих разделах обсуждаются вопросы о том,как писать предложения
языка SQL для того,чтобы избежать использования индексов и как определить,
какие индексы следует использовать.

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

SELECT EMPNO,ENAME
FROM EMP
WHERE JOB = 'CLERK'

как только ORACLE обнаруживает,что колонка JOB имеет индекс (либо уникаль-
ный,что маловероятно в этом случае,либо неуникальный),она начинает поиск за-
данного значения индекса ('CLERK') и выбирает все записи со значением
'CLERK'.

                       Индексы и значения NULL
   Желательно,когда это возможно,описывать колонки таблицы как NOT NULL,это
позволит использовать индекс немного более широкому кругу запросов.
   Индексы не используются,если в условии содержатся выражения IS NULL или
IS NOT NULL.Однако,если необходимо получить все значения,отличные от NULL,
можно записать предложение языка SQL так,чтобы использовался индекс.Это мо-
жно сделать,запросив записи,имеющие значения,а не равные NULL.Например,если
нужно выбрать информация о служащих,имеющих комиссионные (чьи комиссионные
NOT NULL),то это можно сделать двумя способами:

    Запрос 1:             Запрос 2:
 SELECT * FROM EMP         SELECT * FROM EMP
 WHERE COMM IS NOT NULL      WHERE COMM >= 0

   Предполагается,что колонка COMM индексирована.Индекс не используется в
запросе 1,но используется в запросе 2 для получения результата без просмотра
всей таблицы.Однако если большинство записей в таблице имеет значения для
колонки COMM,предпочтительнее запрос 1.Запрос 2 предпочтительнее только тог-
да,когда большинство записей в колонке COMM имеют значения NULL.

                 Несколько индексов на одной таблице
   Запрос с двумя или более условиями может использовать несколько индексов
если:
 - индексы являются неуникальными;
 - условия представлены равенствами;
 - условия относятся к одной и той же таблице.
   Данные,найденные в результате поиска по каждому индексу,"объединяются для
получения конечного результата.Несколько индексов не используются для таких
условий,как
               SELECT *
               FROM EMP
               WHERE JOB = 'MANAGER'
               AND DEPTNO > 10

  Здесь будет использоваться только индекс в операции равенства.

                      Выбор из нескольких индексов
   В запросах,которые используют несколько индексов,среди которых нет индек-
сов с явным предпочтением,ORACLE выбирает ведущий индекс,основываясь на ти-
пах индексов (уплотненный-неуплотненный; уникальный-неуникальный) и характе-
ристиках колонок.
   В тех случаях,когда доступны как уникальный,так и неуникальный индексы,
ORACLE использует уникальный индекс и игнорирует неуникальный индекс,избегая
таким образом "объединения".Например,в следующем примере предполагается уни-
кальный индекс на колонке EMPNO и неуникальный индекс на колонке SAL.

SELECT ENAME
FROM EMP
WHERE SAL = 3000
AND EMPNO = 7902

   ORACLE в этом случае будет использовать только индекс на колонке EMPNO.
Если будет найдена запись со значением EMPNO равным 7902,то с константой
3000 будет сравниваться действительное содержание поля SAL,а не поиск по
индексу SAL.
   В версии 5 ORACLE "объединяется" только 5 индексов.Если в предложении
языка SQL используется более 5 критериев,то 5 индексов "объединяется",а все
оставшиеся данные проверяются "вручную" для того,чтобы извлечь записи,удов-
летворяющие требованиям оставшихся критериев.

                   Запрещение использования индексов
   Так как все индексы,которые можно использовать,ORACLE пытается "объедини-
ть",может случиться так,что какой-либо индекс снизит производительность,или
из-за того,что в запросе используется не более 5 индексов,может потребовать-
ся,чтобы в эту пятерку вошли индексы,наиболее эффективно влияющие на произ-
водительность,то есть запретить использование "наименее ценных" индексов.
   Для того,чтобы запретить использование индекса,просто используется "пус-
тая" функция или выражение,включающее колонку,индекс которой использовать
нежелательно.Обычно к числовой колонке прибавляется 0,а символьная колонка
конкатенируется с пустой строкой.Например,
   SELECT ENAME,DEPTNO,SAL
   FROM EMP
   WHERE DEPTNO + = 20
   AND ENAME = 'SMITH'

   Дополнительная информация о том,как избежать использования индексов,соде-
ржится в разделе "Как писать предложения языка SQL,чтобы воспользоваться
преимуществами индексов" выше.

                        Команда VALIDATE INDEX
   Команда VALIDATE INDEX предназначена для проверки заданного индекса на
последовательность.Команда имеет следующий индекс:
                VALIDATE INDEX имя_индекса [ON имя_таблицы] [ WITH LIST]
Например:
VALIDATE INDEX IN_EMPNO
VALIDATE INDEX ENAME ON SCOTT.EMP

   Опция WITH LIST используется для создания отладочного файла и должна ис-
пользоваться только по запросу представителей фирмы-разработчика ORACLE.Если
на терминал выдается сообщение,отличное от
                                              Index validated.

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

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

   При проверке индексов не выявляется записей с данными,которые не имеют
соответствующих им индексов.

                     Внутренняя структура индексов
   Все индексы в ORACLE хранятся в структурах,называемых В*-деревьями.Рис.34
иллюстрирует структуру индекса.
---------------------------------------------------------------+
| Корни дерева                                           |
| индексных блоков:          MARTIN                            |
|                                                              |
|               +---------+----------+                         |
|               |                    |                         |
| Промежуточные узлы             MARTIN                  |
| дерева индексных      BLAKE         MILLER                   |
| блоков:                JAMES        TURNER                   |
|               |                    |                         |
|           +-------+--------+ +--------+------+               |
|           |       |        | |        |      |               |
| Листья дерева    BLAKE JAMES MARTIN MILLER TURNER      |
| индексных              ADAMS  CLARK JONES KING   SCOTT WARD  |
| блоков:                ALLEN  FORD                SMITH      |
|                                |                             |
|                                |                             |
| Содержимое                     |  BLAKE - ROWID              |
| листьев дерева        +---CLARK - ROWID                      |
| индексных            FORD - ROWID                            |
| блоков:                                                      |
---------------------------------------------------------------+
      Рис.34.Внутренняя структура индекса

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

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

+                             КЛАСТЕРИЗАЦИЯ
                           Что такое кластеры?
   Кластеры - это один из возможных методов хранения данных в БД ORACLE,ко-
торый не влияет на предложения языка SQL,используемые для доступа к данным.
Для того,чтобы определить,какие данные предпочтительнее хранить в кластерах,
а какие лучше хранить некластеризованными,необходимо посмотреть,какие табли-
цы имеют общие колонки (обычно ключевые) и какие таблицы часто используются
совместно (с помощью операции объединения).Кластеризуя такие таблицы,можно
сократить время выборки по запросам на физическом уровне.
   Идея кластеризации заключается в том,чтобы хранить данные,логически испо-
льзуемые часто вместе,физически рядом друг с другом.Этим достигается неско-
лько целей: во-первых,снижается время поиска и затраты времени процессора
из-за того,что данные хранятся близко друг от друга и,во-вторых,экономится
внешняя память,т.к. данные,общие для нескольких таблиц,хранятся в одном эк-
земпляре.
   Важно отметить,что существование кластеров после того,как они были созда-
ны и данные в них были загружены,скрыто от пользователей и прикладных прог-
рамм.Пользователи обращаются к кластеризованным данным точно так же,как и к
некластеризованным.Им не нужно даже знать,кластеризованы данные или нет.

                Логический формат блоков кластеризованных данных
   Логический формат блока кластеризованых данных приведен на рис.35.Заголо-
вок блока содержит 44 байта на каждый физический блок и 32 байта на каждый
логический блок.Для нескольких кластерных блоков может существовать один ло-
гический блок (см.раздел "Определение размера логического блока" ниже).Если
на физический блок приходится один логический блок,заголовок занимает 76
байтов (44 + 32,как в некластеризованных данных.См.раздел "Логический формат
некластеризованных блоков данных" в главе 9).Если на физический блок прихо-
дится 2 логических блока,то размер заголовка равен 108 байтам на физическую
запись (44 + 32 + 32) и так далее.
 ----------------------------------------------------------------
 |  Время         |       Тип         |
 ----------------------------------------------------------------
 |       Адрес следующего блока             |
 ----------------------------------------------------------------
 |       Адрес предыдущего блока             |
 ----------------------------------------------------------------
 |         Заголовок блока               |
 ----------------------------------------------------------------
 |         Ключ кластера                |
 ----------------------------------------------------------------
 | Последоват.номер записи х | Длина записи х | Номер таблицы |
 ----------------------------------------------------------------
 |   Идентификатор колонки А   |     Длина колонки А  |
 ----------------------------------------------------------------
 |              Данные колонки А          |
 ----------------------------------------------------------------
 |   Идентификатор колонки В   |     Длина колонки В  |
 ----------------------------------------------------------------
 |  (...и т.д.для остальных колонок и записей)        |
 ----------------------------------------------------------------
 | Неиспользованное пространство,первоначально установленное  |
 |           параметром PCTFREE           |
 ----------------------------------------------------------------
   Рис.35.Логический формат блока кластеризованных данных

                                 Ключ кластера
   Ключ кластера формируется из колонок,названных в предложении CREATE
CLUSTER,и может состоять из одной или нескольких колонок.Значение ключа кла-
стера хранится в каждом логическом блоке кластера.Он также появляется в каж-
дом сцепленном блоке кластера (что несколько упрощает алгоритмы построения/
поиска).
   Ключ кластера хранится в блоках,выделенных сегментами INDEX,задаваемыми в
описании пространства памяти.Так как ORACLE автоматически строит и сопровож-
дает индекс на ключе кластера,нет необходимости использовать команду CREATE
INDEX для построения индекса на колонках,формирующих ключи.Однако,в случаях,
когда необходимо сделать ключ кластера частью конкатенированного ключа или
сделать уникальный индекс для одной из таблиц,входящих в кластер,целесообра-
зно проиндексировать ключ кластера "вручную",используя команду CREATE INDEX.
   Ключ кластера может обновляться,то есть данные в колонках таблицы,которые
связаны с ключом,могут обновляться.Так как физическое расположение данных
зависит от ключа кластера,изменение значения ключа для какой-либо записи
приводит к физическому перемещению этой записи.

                               Создание кластеров
   Команда создания кластеров имеет следующий синтаксис:
 CREATE CLUSTER имя_кластера
( ключ_кластера1 тип_данных,
 ключ_кластера2 тип_данных,...)
[ SPACE имя_пространства_памяти ]
[ SIZE размер_логического_блока ]
[ COMPRESS | NOCOMPRESS ]

где: SPACE - ссылка на описание пространства памяти,так же как в команде
             CREATE TABLE.

 COMPRESS/NOCOMPRESS- указывает,должен ли ключ кластера быть уплотненным или
                      неуплотненным.
 SIZE -               размер требующегося логического блока,который выравни-
                      вается ORACLE по размеру действительного логического
                      блока.Если опция SIZE не задана,значение принимается
                      по умолчанию равным размеру блока ORACLE для данной OC
                      минус размер заголовка физического блока.См.раздел
                      "Определение размера логического блока" ниже.

      Для создания кластеров существуют следующие правила:
 - нельзя кластеризовать более 32 таблиц или 16 колонок;
 - ключ кластера должен совпадать с ключевой колонкой в таблице,по которой
   она кластеризуется (как по типу данных,так и по размерам) и,по крайней
   мере,одна кластеризуемая колонка в каждой таблице д.б. описана как NOT
   NULL;
 - ключ кластера может состоять из нескольких колонок.

                      Определение размера логического блока
   В зависимости от того,сколько записей предположительно будет приходиться
на один кластерный ключ и какова их средняя длина,можно задать размер логи-
ческого блока.Правильный выбор размера логического блока приводит к лучшему
использованию пространства памяти и уменьшению количества операций чтения во
время физического просмотра записей.Размер логического блока задается в бай-
тах,при этом необходимо предусмотреть место для обновляемых и новых записей
для каждого кластерного ключа.Размер логического блока д.б. меньше,чем раз-
мер блока ORACLE,который зависит от OC.
   Выбранный размер логического блока выравнивается ORACLE (обычно немного
увеличен для того,чтобы попасть на границу физического блока).Используемый
при этом алгоритм и количество логических блоков,приходящихся на один блок
ORACLE изменяются в зависимости от размера ключа кластера и OC.Обычно один
логический блок ORACLE равен 6-7 логическим блокам кластера и менее.Как пра-
вило размер логических блоков не м.б. меньше 300 байтов.Для того,чтобы прос-
мотреть запрашиваемый и действительный размеры блоков,нужно использовать
следующий запрос:
                    SELECT REQBLK,LOGBLK
                    FROM CATALOG
                    WHERE TNAME = <ИМЯ_ТАБЛИЦЫ>

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

                Кластеры и определение пространства памяти
   Размер кластера определяется описанием пространства памяти,использованным
при его создании.Необходимо заметить,что параметр PCTFREE не применяется к
кластерам.Описание пространства памяти,использованное при создании кластера,
определяет пространство для всех таблиц в этом кластере.

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

                              Загрузка кластеров
   После того,как кластер создан,нужно указать,какие таблицы он будет содер-
жать.По крайней мере,одна колонка в таблице,соответствующая одной из колонок
ключа,д.б. описана в предложении CREATE TABLE,как NOT NULL.Таблицы добавляю-
тся в кластер с помощью предложения CREATE TABLE.Различные виды этого пред-
ложения позволяют кластеризовать как новые,так и уже существующие таблицы.
Для того,чтобы кластеризовать новую таблицу,необходимо ввести следующее пре-
дложение:
   CREATE TABLE новая_таблица
   (колонка1 тип_дня,
    колонка2 тип_дня,
       ...,
   колонкаn тип_дня)
   CLUSTER имя_кластера (колонка_таблицы)

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

CREATE TABLE <имя_новой_таблицы>
CLUSTER <имя_кластера> (<колонка_таблицы>)
AS SELECT * FROM <существующая_таблица>

   Затем старая таблица,которая не была кластеризована,уничтожается:
 DROP TABLE <существующая_таблица>

   После этого созданной в кластере таблице присваивается имя предыдущей та-
блицы:
 RENAME <имя_новой_таблицы> TO <имя_существующей_таблицы>

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

                           Уничтожение кластеров
 Перед тем,как уничтожить кластер,каждая таблица в кластере д.б. уничтожена.

+                 ПРОСТРАНСТВО КОНТЕКСТА СИСТЕМЫ ORACLE
   Пространство контекста представляет собой буфер,используемый для хранения
предложений языка SQL во время их выполнения и если предложение является за-
просом,то хранения одной записи результата и заголовков результата.
   В версии 5 ORACLE пространство контекста выделяется динамически,что озна-
чает,что ORACLE увеличивает пространство контекста,когда это необходимо,а не
выдает сообщение об ошибке и вынуждает пользователя реагировать на него.Фак-
тически это означает,что пользователю не нужно заботиться о пространстве ко-
нтекста.Если пользователь израсходовал пространство в своей области контекс-
та,то,если это возможно,ему выделяется новая область.
   Когда создается область контекста (во время выполнения процедуры OOPEN),
выделяется начальная область называемая первичным экстентом.Если в обращении
к процедуре OOPEN указан размер,то используется этот размер.Если он не за-
дан,то используется значение параметра CONTEXT_SIZE в файле INIT.ORA,при по-
следнем "теплом" старте системы; если и этот параметр не указан,то использу-
ется системный размер пространства контекста (в большинстве OC 4К).
   Когда для области контекста требуется дополнительное пространство и при
этом не хватает места в уже выделенной области,выделяется новая область,ко-
торая используется совместно с существующей.Эта новая область называется
вторичным экстентом.Размер этой области задается параметром CONTEXT_INCR в
файле INIT_ORA или системной константой (обычно 4К),если этот параметр не
задан.Однако,если этот размер недостаточен,то система автоматически выделяет
область,достаточено большую для того,чтобы удовлетворить запросу.Размер вто-
ричного экстента не м.б. указан в обращении к процедуре OOPEN.
   Этот процесс продолжается,пока требуется память,до тех пор,пока OC отка-
жется предоставить больше памяти,возможно из-за того,что виртуальная память
заполнена,либо будет достигнуто максимальное количество экстентов контекста.
Максимальное количество экстентов контекста является системной константой,не
устанавливается в файле INIT.ORA и постоянно равно 50.При нормальном исполь-
зовании и правильно установленных параметрах только очень большая область
контекста может действительно вызвать израсходование памяти.
   Будучи однажды выделенной из области контекста,память становится доступ-
ной для последующего грамматического разбора предложений в этой области кон-
текста.Она не освобождается до тех пор,пока курсор не будет закрыт.Область
контекста м.б. восстановлена в своем первоначальном размере путем закрытия и
открытия курсора вновь.

KOAP Open Portal 2000



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