Оглавление
ГЛАВА 5 1
УПРАВЛЕНИЕ УДАЛЕННЫМИ БАЗАМИ ДАННЫХ В СИСТЕМЕ ORACLE 1
5.1. Основные понятия и термины 1
5.2. Типы пользователей 3
5.3. Физическая архитектура хранения данных 4
5.4. Транзакции 7
5.5. Обеспечение целостности данных 8
5.6. Создание триггеров и хранимых процедур 8
Контрольные вопросы 9
ГЛАВА 5
УПРАВЛЕНИЕ УДАЛЕННЫМИ БАЗАМИ ДАННЫХ В СИСТЕМЕ ORACLE
5.1. Основные понятия и термины
Рассмотрим основные понятия и термины, используемые в
системе Oracle - системе управления распределенными базами данных, разработанной фирмой Oracle Corporation, которые несколько отличаются от терминологии СУБД SQL Server и Microsoft Access.
Триггер - механизм, позволяющий создавать процедуры, которые будут автоматически запускаться при выполнении команд INSERT, UPDATE или DELETE.
Транзакция - логически завершенный фрагмент последовательности действий (одна или более SQL-команд, завершенных фиксацией или откатом).
Объекты схемы - абстракции, составляющие базы данных. Это индексы, кластеры, пакеты, последовательности, хранимые процедуры, синонимы, таблицы, представления и т.д.
Таблица - основная единица хранения данных БД Oracle. Включает в себя имя, строки и столбцы. Каждый столбец также имеет имя и тип данных. Таблицы хранятся в табличных пространствах, причем часто в одном табличном пространстве находятся несколько таблиц.
Кластер - набор таблиц, физически хранящихся как одна и имеющих общие столбцы. Использование кластеров крайне эффективно, если часто обрабатываются запросы к данным двух и более таблиц, имеющих общие столбцы. К таким таблицам можно обращаться по отдельности даже в том случае, если они являются частью кластерной таблицы.
Индекс - структура, позволяющая извлекать данные быстро и эффективно (точно так же как оглавление какой-либо книги позволяет найти интересующий раздел). Индекс объявляется для одного или нескольких столбцов. Доступ к таблице происходит по проиндексированному столбцу (столбцам).
Представление (вид) - окно (рамка) для просмотра данных из одной или более таблиц. Вид не хранит никаких данных, а только представляет их. С видами возможны те же операции, что и с таблицами (построение запросов, обновление, удаление) без всяких ограничений. Представления часто используются для упрощения восприятия пользователем хранящихся в базе данных посредством извлечения из таблицы лишь части необходимых данных или набора данных из нескольких таблиц. Кроме того, представления могут использоваться для ограничения доступа пользователей некоторым данным.
Хранимая процедура - SQL-запрос, хранимый в словаре данных. Хранимые процедуры разрабатываются для эффективного выполнения запросов. При использовании хранимых процедур можно уменьшить сетевой трафик СУРБД и тем самым увеличить ее производительность.
Буфер - некоторый объем оперативной памяти, используемый для хранения данных. Содержит данные, которые предполагается использовать или которые использовались совсем недавно. В большинстве случаев буфер содержит копию данных, которые хранятся на жестком диске. Данные в буфере могут изменяться записываться на диск, а также временно храниться. В системе Oracle буферы содержат те блоки данных, к которым недавно обращались. В буфере журнала изменений сохраняются временные записи журнала изменений, которые затем записываются на диск.
Кэш буферов данных - совокупность буферов или область памяти для быстрого доступа к данным. С точки зрения аппаратного обеспечения - это небольшой (применительно к оперативно памяти) объем памяти, который значительно быстрее основной памяти и который используется для уменьшения времени, несходимого на частую загрузку данных или инструкций в центральный процессор (ЦП), имеющий встроенный кэш.
Последовательность - генератор последовательностей, используемый для создания последовательности цифр, хранимых в кэш буферов данных.
DBWR (DataBase Writer) - процесс, основная задача которого записывать изменения базы данных на физический жест диск.
Чистый буфер (clean buffer) - буфер, содержимое которого подвергалось изменению, а следовательно, нет необходимое записывать его на жесткий диск.
Грязный буфер (dirty buffer) - буфер, содержимое которого изменилось (DBWR периодически сбрасывает грязные буферы жесткий диск).
SGA (System Global Area) - разделяемая область памяти, и пользуемая для хранения данных и управляющей информацией экземпляра Oracle. Размещается в памяти при запуске экземпляра Oracle и освобождается при завершении его работы. SGA составляет буферы данных и буфер журнала изменений.
Блок (block) - самая маленькая единица хранения данных СУРБД Oracle. Содержит информацию заголовка и сами данные или PL/SQL-код. Размер блока от 2 до 16 Кбайт.
Узкое место (bottleneck) - компоненты, ограничивающие производительность или эффективность системы.
Словарь данных (data dictionary) - набор таблиц, используемых для поддержания информации о БД.
Контрольная точка (checkpoint) - операция, приводящая к тому, что все измененные данные (блоки данных в памяти) записываются на диск. Является ключевой операцией при необходимости быстрого восстановления базы данных после сбоя.
Схема (schema) - коллекция объектов БД.
Конкурирование (concurrency) - способность программы выполнять несколько функций одновременно. Применительно к Oracle - это возможность одновременного доступа к данным для множества пользователей.
DDL (Data Definition Language) - язык описания данных. Команды этого языка предназначены для создания, изменения и удаления объектов базы данных. В системе Oracle команды DDL связаны с администрированием баз данных, т. е. перед и после выполнения каждой DDL-команды система обязательно фиксирует все текущие транзакции (чтобы избежать потерь информации).
DML (Data Manipulation Language) - язык манипулирования данными. Команды этого языка позволяют строить запросы и оперировать данными существующих объектов схемы. В отличие от DDL фиксирование транзакций после каждой команды в этом языке не производится.
Существуют следующие команды DML:
-
DELETE;
-
INSERT;
-
SELEC;
-
UPDATE;
-
EXPLAIN PLAN;
-
LOCK TABLE.
Динамические таблицы характеристик (dynamic performance tables) - таблицы, которые автоматически создаются при запуске экземпляра Oracle и используются для хранения характеристик этого экземпляра. Они включают в себя информацию о соединениях, вводе-выводе, первоначальные значения параметров среды и др.
Процедура - набор SQL или PL/SQL-команд, выполняющих определенную задачу. Процедура может иметь входные параметры, но не имеет выходных.
Функция - совокупность SQL или PL/SQL-команд, реализующих определенную задачу. В отличие от процедуры функция возвращает какое-либо значение переменной. Создание функций позволяет уменьшить число инструкций, передаваемых по сети.
Программный блок - относительно СУРБД Oracle программа, используемая для описания пакета, хранимой процедуры или последовательности процедур.
Запрос – транзакция, которая т
олько для чтения. Генерируется с помощью команды SELECT. В отличие от обычной транзакции при запросе данные не изменяются.
Приведем компоненты СУБД Oracle, характерные для различных ее модификаций:
OLTP (On-line Transaction Processing) - система оперативной обработки транзакций. Эти системы обеспечивают работу большого числа пользователей, работающих с многопользовательскими базами данных, т.е. быстрые ответы на запросы всех клиентов.
DSS (Decision Support System) - система поддержки принятия решений, которые используются в процессах интеллектуального анализа данных. Эти системы выполняют множество запросов, связанных с обработкой больших объемов информации, хранящейся в разных таблицах и разных базах данных.
Хранилище данных (Data Warehouse) - крупномасштабная система, хранящая результаты работы систем OLTP и DSS, т.е. хранящая и обрабатывающая информацию, занимающую многие сотни гигабайт памяти.
Информационная лавка (Data Mart) - уменьшенная версия хранилища данных (Data Warehouse), как правило, ориентированная на решение специализированных задач. Обеспечивает хранение и обработку информации, требующей менее сотни гигабайт памяти.
Видео-сервер - сервер, предназначенный для обработки видеоинформации. Имеет широкую полосу пропускания для поддержания большого количества видео-потоков. Должен справляться с большой нагрузкой ввода-вывода, так как при считывании с устройств загружаются сразу большие блоки данных.
Веб-сервер - сервер, предназначенный для работы с статическими и динамическими веб-страницами, которые могут быть как очень простыми, так и комплексными, генерируемыми из баз данных. Веб-сервер Oracle, как правило, используется для коммерческих веб-приложений, позволяющих покупателям просматривать каталоги, содержащие изображения товаров и даже видео-иллюстрации. Обычно он поддерживает значительное количество пользователей и имеет большой объем данных. Его производительность зависит от объема оперативной памяти.
OLAP (On-line Analytical Processing) - система аналитической обработки информации в реальном масштабе времени. Как правило, ее пользователями являются финансовые аналитики или маркетинговый персонал, работающий с данными на глобальном уровне.
5.2. Типы пользователей
Типы пользователей Oracle и их обязанности зависят от конфигурации системы и конкретной организации ее корпоративной базы данных. Например, в крупных системах обязанности администратора базы данных могут распределяться среди нескольких специалистов. В то же время в небольших системах один человек может одновременно выполнять функции нескольких типов пользователей.
Можно выделить следующие основные типы пользователей, характерные для всех систем управления базами данных:
-
администратор базы данных;
-
администратор по защите данных;
-
разработчик приложения;
-
администратор приложения;
-
пользователь базы данных;
-
администратор сети.
Администратор базы данных (DataBase Administrator - DBA) - специалист, управляющий работой базы данных. Обычно обязанности DBA подразделяют на основные и дополнительные.
Основные обязанности DBA следующие:
-
Установка нового программного обеспечения. Установка новых версий Oracle, приложений и другого программного обеспечения, относящегося к администрированию СУБД. Предусматривает также обязательное тестирование устанавливаемых программ перед введением их в рабочую среду.
-
Конфигурирование программного и аппаратного обеспечения. В большинстве случаев доступ к настройке программного и аппаратного обеспечения имеет только системный администратор, поэтому DBA должен производить установку программ, конфигурирование программного и аппаратного обеспечения только совместно с системным администратором.
-
Обеспечение безопасности. Является одной из основных обязанностей DBA. Управление безопасностью и администрирование включают в себя: добавление и удаление пользователей, управление квотами, аудит и разрешение проблем безопасности.
-
Настройка производительности. Даже хорошо настроенная система нуждается в постоянной проверке производительности и периодической ее перенастройке. Иногда для этого достаточно изменить параметры системы или индексы, а может быть, перестроить структуру таблиц.
-
Резервное копирование и восстановление системы. Одна из главных обязанностей DBA - постоянно сохранять данные в системе. Чтобы делать это эффективно, необходимо разработать процедуру резервного копирования и стратегию восстановления данных. Очень важно периодически тестировать отработанную схему резервного копирования и восстановления данных.
-
Процедура постоянного (планового) обслуживания. Обслуживание СУБД лучше всего производить рано утром либо по выходным дням, чтобы не нарушать работу пользователей. Обслуживание включает в себя: архивирование, тестирование и настройку системы. Администратор должен составить календарь планового обслуживания СУБД и довести его до сведения клиентов.
-
Локализация неисправностей и восстановление системы поел сбоя. Поскольку сбой системы, приводит к возможности, потер доступа пользователей к своим данным, DBA обязан как можно быстрее восстановить работу системы, т.е. он должен уметь предусмотреть сбой и заранее иметь план восстановления системы после сбоя.
Дополнительные обязанности DBA сводятся, как правило, к оказанию помощи отдельным клиентам и могут включать в себя следующие задачи администрирования:
-
Анализ данных. Проводится для того, чтобы дать отдельным разработчикам или пользователям рекомендации по повышению производительности или эффективности хранения данных.
-
Предварительная разработка БД. Поскольку DBA знает систему «изнутри», он может на предварительной стадии разработки структуры БД указать команде разработчиков на потенциальные проблемы и помочь в увеличении производительности программ.
-
Оказание консультаций разработчикам по хранимым SQL-процедурам. DBA довольно часто привлекается к разрешению проблем SQL-кода и разработке (написанию) хранимых процедур, т.е. он должен быть готов стать консультантом для разработчиков и пользователей.
-
Разработка производственных стандартов и соглашений по именам. Это одна из основных организационных проблем управления. Поскольку в разработке и развертывании приложений могут принимать участие несколько различных групп, DBA должен принимать активное участие в решении проблемы их соответствия производственным стандартам и соглашениям по именам.
-
Документирование среды. DBA должен документировать каждый аспект среды СУБД, включая конфигурирование оборудования, обновление и изменение программного обеспечения, вопросы, связанные с изменением системы и ее параметров, и уметь полностью восстановить ее по документации в случае необходимости.
-
Планирование нагрузки системы и необходимого объема памяти. Неотъемлемой частью работы DBA является определение необходимости приобретения дополнительных серверов, дополнительной дисковой и оперативной памяти в целях удовлетворения возрастающих потребностей пользователей. Прогнозируя ожидаемую потребность аппаратных средств, администратор обеспечивает надежность работы информационной системы предприятия.
5.3. Физическая архитектура хранения данных
СУРБД Oracle, предназначенная для одновременного доступа к большим объемам (терабайтам) хранимой информации, складывается из двух составляющих: базы данных (информации) и экземпляра (конкретной реализации системы).
База данных.
Состоит из физических файлов, хранящихся в системе, и логических файлов (например, схемы БД). Физические файлы хранятся на диске, а логические файлы являются компонентами физического уровня.
Итак, базы данных Oracle состоят из двух уровней:
-
физического;
-
логического.
Физический уровень БД включает в себя три категории файлов:
-
файлы данных;
-
файлы журналов операций;
-
управляющие файлы.
Файлы данных хранят информацию, имеющуюся в БД. Причем в БД может храниться и один файл данных и сотни. Информация из одной таблицы может быть распределена по нескольким файлам данных, а также несколько таблиц могут делить между собой пространство одного файла данных. При этом распределение таблиц по нескольким файлам данных может значительно увеличить производительность системы. Количество файлов данных ограничивается параметром tnax data files.
Файлы журналов операций (redo log files) содержат информацию, необходимую для процесса восстановления в случае сбоя системы, и все изменения, которые произошли в базе данных. С помощью журнала операций восстанавливают те изменения, которые были произведены, но не зафиксированы перед сбоем системы, поэтому файлы журналов операций должны быть очень хорошо защищены от аппаратных сбоев (как на программном, так и на аппаратном уровне). Если информация журнала операций будет утеряна, восстановить систему будет практически невозможно.
Управляющие файлы содержат информацию, необходимую для запуска экземпляра Oracle (в том числе расположение файлов данных и файлов журналов операций), и они также должны быть хорошо защищены.
Логический уровень БД составляют следующие элементы:
-
табличные пространства;
-
схемы БД.
Табличные пространства - это одна или несколько логических частей, на которые подразделяется база данных и которые используются для логической группировки данных между собой. Например, можно определить одно табличное пространство для бухгалтерских данных, а другое - для складских. Сегментирование групп по табличным пространствам упрощает администрирование этих групп. Каждое табличное пространство может состоять из одного или многих файлов данных. Используя несколько файлов данных для одного табличного пространства, можно распределить их по разным дискам, увеличив тем самым скорость ввода-вывода и соответственно производительность системы.
Схемы БД - специальные логические структуры, с помощью которых в СУРБД Oracle происходит контроль над дисковым пространством.
Эти структуры состоят:
-
блоков данных;
-
экстентов;
-
сегментов.
Блок данных - это наименьшая единица хранения данных в БД Oracle. Блоки данных, содержащие заголовочную информацию о себе и данные, физически хранятся на диске и
в большинстве систем занимают 2 Кбайт (2 048 байт), но для увеличения эффективности работы системы этот размер можно изменить.
Экстенты состоят из блоков данных и являются строительными блоками сегментов. Используются они для минимизации неиспользуемого (пустого) пространства хранилища. По мере увеличения количества данных в табличных пространствах экстенты используются для хранения тех данных, которые могут разрастаться. Таким образом, несколько табличных пространств могут делить между собой пространство хранилища без предварительного определения их разделов.
При создании табличного пространства можно указать минимальное число экстент, что позволит контролировать все пространство хранилища БД.
Сегменты в свою очередь, состоят из совокупностей экстентов, содержащих определенный вид данных.
БД Oracle использует четыре типа сегментов:
-
сегмент данных, хранящий пользовательские данные;
-
индексный сегмент, содержащий индексы;
-
сегмент отката, хранящий информацию отката, используемую при возврате к предыдущему состоянию БД;
-
временные (промежуточный) сегменты, создаваемые в случае если для выполнения SQL-выражения необходимо дополнительное рабочее пространство и уничтожаемый сразу после выполнения SQL-команд. Промежуточные сегменты используются также в различных операциях с БД, например при сортировке.
Экземпляр - представляет собой конкретный способ доступа к данным и состоит из разделяемой памяти и процессов.
Разделяемая память (shared memory) используется для кэширования данных и индексов, а также для хранения программного кода.
Разделяемая память подразделяется на несколько частей (или структур памяти),
основными из которых являются:
-
системная глобальная область (System Global Area);
-
программная глобальная область (Program Global Area).
Системная глобальная область (SGA) - это область разделяемой памяти, которая используется для хранения данных и управляющей информации одного конкретного экземпляра Oracle. SGA размещается в памяти. При запуске экземпляра Oracle и освобождает память при останове. Каждый запущенный экземпляр Oracle имеет свою собственную память SGA.
SGA включает в себя следующие компоненты, создаваемые в памяти при запуске экземпляра:
-
кэш буфер БД;
-
буфер журнала изменений;
-
разделяемый пул.
Кэш буфер БД хранит последние открытые блоки данных. Эти блоки могут содержать данные, которые изменились, но еще не были записаны на диск (грязные блоки), и данные, которые не изменялись либо были записаны на диск
после изменения (чистые блоки). Так как кэш буферов БД хранит блоки данных на основе алгоритма последних используемых блоков, то наиболее активно используемые блоки постоянно остаются в памяти (снижая дисковый ввод-вывод и увеличивая производительность системы).
Буфер журнала изменений хранит данные об изменениях БД, записываясь в файл журнала изменений, используемого для восстановления экземпляра СУБД Oracle в случае сбоя системы, настолько быстро и эффективно, насколько это возможно.
Разделяемый пул хранит такие структуры разделяемой памяти, как разделяемые SQL-области в библиотечном кэше и внутренняя информация словаря данных. Состоит из библиотечного кэша и кэша словаря данных.
Библиотечный кэш используется для хранения разделяемых SQL-выражений. Здесь для каждого уникального SQL-выражения строятся дерево разбора строк и план исполнения, которые кэшируются (т.е. сохраняются в библиотечном кэше). Если несколько приложений отправляют одинаковые SQL-выражения, то для ускорения работы используется разделяемая SQL-область (так как при использовании уже разобранных строк и готового плана исполнения происходит экономия времени).
Кэш словаря данных содержит набор таблиц и представлений, используемых в качестве ссылок к БД Oracle. Здесь хранится информация о логической и физической структуре БД.
Словарь данных содержит следующую информацию:
-
пользовательскую информацию (например, пользовательские привилегии);
-
ограничения целостности, определенные для таблиц БД;
-
имена и типы данных всех столбцов таблиц БД;
-
об объеме памяти, определенном и используемом объектами схемы данных.
Для обеспечения высокой производительности необходимо устанавливать достаточный объем памяти под кэш словаря данных.
Программная глобальная область (PGA) - это область памяти, в которой хранятся данные и управляющая информация о серверных процессах Oracle. Размер и содержание PGA определяют опции, задаваемые при инсталляции Oracle.
Эта область включает в себя следующие компоненты:
-
пространство стека - память, хранящая переменные сеансов, массивы сеансов и т.д.;
-
информация сеанса (только если Oracle работает не в мультинитиевом режиме);
-
приватная SQL-область - часть PGA, где хранятся связанные переменные, и буферы реального времени.
Процесс - это механизм выполнения программного кода, который может быть незаметным для пользователя. Кроме того, несколько процессов могут работать одновременно. В разных операционных системах и на разных платформах этот механизм может называться по-разному (процесс, нить, домен и т.д.).
В СУРБД Oracle используются два вида процессов:
-
пользовательские процессы;
-
процессы Oracle, также называемые фоновыми, или теневыми.
В некоторых операционных системах (например, Windows NT) процессы действительно являются нитями, но, чтобы не путаться в понятиях, будем называть их просто процессами.
Пользовательские (клиентские) процессы - это пользовательские соединения с СУРБД. Пользовательский процесс управляет вводом и взаимодействует с серверными процессами в Oracle через ее программный интерфейс. Он также используется для выдачи информации пользователю и при необходимости представляет ее в более удобной форме.
Процессы Oracle выполняют функции пользовательских процессов и
могут быть разбиты на:
-
серверные (выполняющие функции для активных процессов);
-
фоновые (выполняющие функции СУРБД в целом).
Серверные (теневые) процессы взаимодействуют с процессами пользовательскими и Oracle, исполняя пользовательские запросы. Например, если пользовательский процесс запрашивает часть данных, которых ещё нет в SGA, то теневой процесс несет ответственность за считывание блоков данных из БД в SGA. При этом между пользовательским и теневым процессами возникает связь типа «один к одному», хотя один теневой процесс может одновременно взаимодействовать с несколькими пользовательскими (конфигурация мультинитевого сервера), экономя системные ресурсы.
Фоновые процессы используются для выполнения разнообразных задач СУРБД Oracle - от взаимодействия с экземпляром Oracle до записи грязных блоков на диск.
Представим некоторые из фоновых процессов Oracle:
DBWR (DataBase Writer) - ответственен за запись грязных блоков из блоковых буферов БД на диск. Когда транзакция изменяет информацию в блоке данных, этот блок данных не обязан быть немедленно записан на диск. Следовательно, DBWR может записывать данные на диск более эффективно, чем выполнять запись всех изменений по отдельности, т. е. обычно он записывает их тогда, когда они нужны для считывания. Записываются также те данные, которые были недавно использованы.
Для систем с асинхронным вводом-выводом достаточно одного процесса DBWR. Для остальных систем можно значительно увеличить производительность, создав несколько процессов DBWR, таких как LGWR, СКРТ, PMON, SMON, RECO, ARCH, LСКN.
LGWR (Log Writer) - записывает данные из журнального буфера в журнал изменений.
СКРТ (Check Point) - дает сигнал процессам DBWR о необходимости выполнения контрольной точки и обновления всех файлов данных и управляющих файлов. СКРТ - это необязательный процесс. Если процесс СКРТ не запущен, его работу принимает на себя процесс LGWR.
Контрольная точка - это событие, при котором все измененные буферы БД записываются на диск.
PMON (Process Monitor) - используется для поддержания остальных процессов и перезапуска после сбоя, а также очищает неиспользуемые области буферов и освобождает те ресурсы, которые могут быть еще заняты. Ответственен за перезапуск всех зависших процессов и диспетчеров.
SMON (System Monitor) - выполняет восстановление экземпляра при его запуске, что включает очистку временных сегментов и восстановление незаконченных транзакций, а также дефрагментирует БД.
RECO (Recovery) - очищает незаконченные транзакции в распределенной БД. Выполняет фиксацию или откат спорных транзакций.
ARCH (Archive) - копирует файлы журнала изменений при их заполнении. Активен только в том случае, если СУРБД работает в режиме ARCH VELOG. При работе системы в других режимах возможны ситуации, в которых не удастся восстановить ее после сбоя.
LCKN (Parallel Server Lock) - использует при работе сервера в параллельном режиме до 10 процессов (от 0 до 9), которые выполняют функции межэкземплярной блокировки.
5.4. Транзакции
Транзакция - это одна или более SQL-команд, завершаемых фиксацией (committing) или откатом (roll backing).
Под фиксацией (committing) понимается принятие и сохранение всех изменений.
Откат (roll backing) - это процедура отмены последних изменений, т.е. возврат к предыдущему состоянию БД.
Чтобы понять, как работает система Oracle, рассмотрим по шагам пример работы простой транзакции.
Итак, транзакция выполняется следующим образом:
1. Приложение обрабатывает пользовательский ввод и создает соединение с сервером посредством SQL.Net.
-
Сервер принимает запрос на соединение и создает серверный процесс.
-
Пользователь выполняет SQL-команду или совокупность команд. (В нашем примере будем считать, что пользователь изменяет данные в строке таблицы.)
-
Серверный процесс просматривает, есть ли в разделяемом пуле SQL-область с идентичными SQL-командами. Если он находит аналогичную разделяемую SQL-область, то серверный процесс проверяет права пользователя на доступ к данным. Предположим, что права имеются, тогда серверный процесс выполняет команды, используя разделяемую SQL-область. Однако если разделяемая SQL-область не найдена, выделяется память под новую область, а затем происходит разбор и выполнение SQL-команд.
-
Серверный процесс ищет данные в SGA (если они там есть) или считывает их из файла данных в SGA.
-
Серверный процесс изменяет данные в SGA. (Запомните, что серверный процесс может только считывать данные из файла данных.) Позже процесс DBWR запишет измененные блоки данных в постоянное хранилище (на жесткий диск, магнитную ленту и т.д.).
-
Пользователь выполняет команду COMMIT (Фиксация) или ROLLBACK (Откат). Первая завершает транзакцию, а вторая отменяет изменения. Если транзакция зафиксирована, процесс LGWR немедленно записывает ее в файл журнала изменений.
-
Если транзакция успешно завершена, клиентскому процессу передается код завершения. Если произошел какой-либо сбой, возвращается сообщение об ошибке.
Примечание. Транзакция не считается зафиксированной до тех пор, пока не завершена запись в файл журнала изменений (redo log file). Этот механизм способствует тому, что в случае сбоя зафиксированная, транзакция может быть восстановлена.
5.5. Обеспечение целостности данных
При работе с СУРБД Oracle необходимо решать задачу обеспечения целостности данных (восстановления базы данных после сбоев, перехвата ошибок и т.д.),
для чего используются следующие функции:
-
создание контрольных точек;
-
журнализация и архивирование.
Создание контрольных точек (check pointing). Как уже говорилось, сигнал к созданию контрольной точки поступает либо от процесса DBWR, либо от процесса LGWR. Но что, же такое контрольная точка и для чего она необходима?
Так как все изменения блоков данных происходят в блоковых буферах, то изменения данных в памяти не обязательно отражаются в этих блоках на диске. Процесс кэширования происходит по алгоритму последнего использованного блока, поэтому буфер, подверженный постоянным изменениям, помечается как последний использованный и процесс DBWR не записывает его на диск. Контрольная точка служит для обеспечения записи этих буферов на диск. Все грязные буферы должны сохраняться на диске в обязательном порядке.
Контрольная точка может работать в двух режимах:
-
нормальной контрольной точки;
-
быстрой контрольной точки.
В режиме
нормальной контрольной точки грязные буферы записываются последовательно процессом DBWR. Эта контрольная точка выполняется гораздо дольше, чем быстрая, но затрагивает меньше системных ресурсов.
В режиме быстрой контрольной точки процесс DBWR записывает одновременно несколько буферов. Эта контрольная точка выполняется очень быстро и более эффективна при вводе-выводе, однако она значительно снижает производительность системы.
Частое выполнение контрольных точек способствует увеличению времени, необходимого на восстановление системы в случае сбоя.
Контрольная точка автоматически выполняется при смене журнала изменений.
Журнализация и архивирование. Журнал изменений (redo log) записывает все изменения БД Oracle. Целью его создания является возможность экстренного восстановления БД в случаях сбоев системы и потери файлов данных. Восстановив файлы данных из ранее сделанных резервных копий, файлы журнала изменений (включая архивные файлы журнала) могут повторить все последние транзакции и таким образом файлы данных будут полностью восстановлены.
Когда файл журнала изменений оказывается полностью заполненным, происходит смена журнала и процесс LGWR заводит новый файл. Во время смены журнала процесс ARCH записывает заполненный файл в архив файлов журнализации. В тот момент, когда архивирование только закончилось, файл журнала изменений помечается как доступный. Очень важно, чтобы архивные файлы журнала изменений надежно хранились, так как они могут понадобиться для восстановления системы.
5.6. Создание триггеров и хранимых процедур
Для создания триггеров, хранимых процедур и просто скриптов (в Oracle их принято называть безымянными блоками)
в системе Oracle разработан свой язык, получивший название PL/SQL (Program Language SQL).
Для каждой таблицы можно создать до 12 триггеров.
Вот шаблон триггера:
CREATE TRIGGER [name] (событие вызова триггера);
... (необязательное ограничение триггера);
BEGIN (действие триггера);
END;
При определении триггера можно указать, сколько раз он должен выполняться: для каждой изменяемой строки (row trigger) либо однократно для всего выполняемого выражения независимо от того, сколько строк будет изменено (statement trigger).
ROW TRIGGER - часто используемый вид триггера. Выполняется для каждой строки по одному разу. Например, если SQL-выражение UPDATE обновляет множество строк в таблице, то триггер вызывается для каждой строки, которая изменяется выражением UPDATE.
Если выражение не влияет ни на одну строку, триггер вызываться не будет.
STATEMENT TRIGGER - триггер, вызываемый независимо от числа измененных строк в таблице (и даже если не изменялась ни одна строка). Например, если выражение DELETE удаляет из таблицы несколько строк, триггер уровня этого выражения вызывается только один раз независимо от того, сколько строк удаляется из таблицы.
При определении триггера необходимо указать момент выполнения (trigger timing) тела триггера: до (BEFORE) или после (AFTER) выражения, что применимо как к триггерам выражений, так и к строчным триггерам.
Система Oracle поддерживает еще один вид триггера - INSTEAD-OF (вместо). Эти триггеры доступны только в редакции Oracle.
Они могут использоваться в многотабличных и объектных представлениях.
В отличие от других триггеров они применяются вместо выполнения DML-выражений, т.е. представление можно модифицировать, как обычную таблицу, с помощью выражений INSERT, UPDATE и DELETE, или для соответствующего изменения запустить триггер INSTEAD-OF.
Триггеры INSTEAD-OF активизируются для каждой изменяемой строки.
Контрольные вопросы
-
Что такое триггер?
-
Что такое транзакция?
-
Назовите последовательность выполнения транзакции.
-
Какие категории файлов включает в себя физический уровень БД?
-
В каком табличном пространстве хранится словарь данных?
-
Чем различаются сегмент, экстент и блок данных?
-
Какие основные элементы составляют экземпляр Oracle?
-
Для каких целей используется разделяемая память в СУБД Oracle?
-
Каково назначение следующих функций Oracle:
-
создание контрольных точек;
-
журнализация;
-
архивирование.
-
Для каких задач разработан язык PL/SQL?