- •Конспект лекций не официальный, возможны ошибки! Еремеев н.Б.
- •Распределенная база данных
- •Пример транзакции
- •Пример рбд
- •Прямые и косвенные соединения
- •Объекты: схемы и именования в рбд
- •Удаленные и распределенные предложения
- •Прозрачность в системе рбд
- •Архитектура рбд Oracle
- •Прозрачность в рбд. Прозрачность местоположения.
- •Прозрачность транзакций.
- •Прозрачность дублирования.
- •Разрешение имен в рбд
- •Снимки.
- •Двухфазный commit.
- •Фаза подготовки.
- •Фаза подтверждения
- •Создание точки подтверждения.
- •Проектирование распределенных приложений.
- •Уникальность имен.
- •Последовательности в распределенных транзакциях.
- •Обработка ошибок в удаленных процедурах.
- •Разрешение проблем распределенных транзакций
- •Снимки. Управление ими.
- •Спецификация определяющего запроса снимка (as ...).
- •Порядок создания снимков и их журналов:
- •Альтернативы снимкам.
- •Дублирование таблиц с помощью триггеров:
- •Создание триггера
- •Управление снимками
- •Создание снимков
- •Установление параметров памяти для снимков.
- •Конфигурирование автоматических обновлений
- •Ручное обновление снимков.
- •Связь между декларативными ограничениями и снимками.
- •Управление журналами снимков.
- •Внутренняя реализация журнала снимка.
- •Удаление журнала снимков.
- •Управление распределенными бд администратором.
- •Принципы простроения глобального имени бд:
- •Безопасность бд.
- •Характеристики и квоты различных табличных пространств.
- •Ресурсные лимиты и профили пользователей.
- •Лицензирование.
- •Привилегии и роли.
- •Защита таблиц.
- •Защита обзоров:
- •Усиление защиты таблиц через обзоры:
- •Защита процедур.
- •Табличные пространства и файлы данных Файлы данных
- •Табличное пространство
- •Объекты табличного пространства
- •Блок данных
- •Экстенты
- •Сегменты
- •Копирование и восстановление баз данных
- •Рекомендации по копированию баз данных.
- •Стратегии копирования Стратегии копирования в режиме no archive log
- •Стратегии копирования в режиме archive log
- •Процедуры копирования.
- •Процедура полного копирования базы данных
- •Восстановление
- •Опции предложений Audit и NoAudit.
- •Дополнительные опции по аудиту предложений:
- •Включение аудита
- •Выключение аудита.
- •Контролирование роста и размера аудиторского журнала.
- •Защита аудиторского журнала
- •Аудит с помощью триггеров
- •Поддержка национальных языков.
- •Лингвистическая сортировка.
- •Перекрытие стандартных умолчаний.
- •Форматы чисел и дат.
- •Объекты в Oracle.
- •Атрибуты
- •Сравнение объектов
- •Синтаксис объявления типов
- •Объявление и инициализация объектов
- •Вызов методов
- •Хранение объектов в бд
- •Использование оператора select
- •Вставка объектов
- •Обновление объектов
- •Удаление объектов
Объекты в Oracle.
Объект всегда содержит два характерных элемента: атрибуты объекта (фактически это данные) и методы (функции и процедуры).
Для создания объектов используется оператор CREATE TYPE.
Процесс создания объектов поход на процесс создания пакета.
Пример
Спецификация:
CREATE Complex AS OBJECT (rpart REAL,
ipart REAL,
MEMBER Function Plus(x Complex) Return Complex
……
);
где MEMBER – ключевое слово, определяющее каким образом будет осуществляться доступ к методу.
Тело объекта:
CREATE TYPE Body Complex AS
MEMBER Plus (x Complex) Return Complex IS
begin
RETURN Complex (rpart+x.rpart, ipart+x.ipart);
end Plus;
На этом создание и описание объекта закончено. Все методы и атрибуты описаны как public и видны "снаружи" объекта.
Атрибуты
В объекте можно определить до 1000 атрибутов, но нельзя внутри объекта объявлять типы, константы, курсоры.
В существующий объект нельзя добавить методы или атрибуты.
Для создания атрибутов можно использовать любое имя, уникальное внутри объекта (хотя имя может быть неуникальным для другого объекта). В качестве атрибута можно использовать любые типы Oracle, за исключением:
LONG, LONG RAW, NCHAR, NCLOB, NVARCHAR2, ROWID, UROWID.
нельзя использовать типы, специфичные для PL/SQL – binary_integer и его подтипы, boolean, PLS_integer, record, ref_cursor, аттрибуты %TYPE и %ROWTYPE.
нельзя использовать типы, определенные внутри PL/SQL пакетов.
В секции декларации атрибутов нельзя использовать операторы присваивания и операции default.
Методы
Методы – это подпрограммы, которые мы определяем в объекте.
Существует два основных типа методов:
методы member – эти методы можно вызывать, указав имя экземпляра объекта.
имя_экземпляра.plus(c1);
объявление static – в этом случае для вызова метода используется само название объекта: object_type.minus(c1);
Объявление метода в спецификации объекта должно полностью совпадать с описанием метода в теле объекта. Методы, объявленные как member, всегда имеют параметр Self. По умолчанию для процедур параметр Self является InOut. Для функций по умолчанию Self является In.
При попытке вызова метода member из нулевого экземпляра (т.е. для данного объекта не был вызван конструктор), метод не вызывается.
Методы можно делать перегружаемыми.
Сравнение объектов
Объекты можно сравнивать:
как равенство и неравенство, если вы не предпринимаете никаких специальных мер. Равенство будет в том случае, если равны все атрибуты объекта.
при специальных мерах: использование ключевых слов MAP и ORDER. Для объекта может быть определено только одно их этих двух ключевых слов. Эти ключевые слова должны предшествовать ключевому слову member и использоваться только с функциями.
Если вы используете ключевое слово MAP, то функция данного метода должна возвращать или char или real. Сравнение будет происходить по значению, которое возвращает функция. Сам оператор сравнения будет вызывать два метода (для каждой функции по одному).
При использовании ключевого слова ORDER метод или функция должны возвращать целое (integer) значение и это значение должно быть:
–1, если один объект (Self-объект) меньше другого объекта (передаваемого в функцию в качестве параметра);
1, если Self>объекта;
0, если объекты между собой равны.
Пример
CREATE TYPE body Rational AS
MAP member Function Convert Return real IS
begin
Return num/den;
end;
Переменные num и den – это атрибуты, которые были объявлены в типе объекта (имели тип integer). Сравниваться будет результат этой функции для двух объектов.
Пример
CREATE TYPE body Customer AS
ORDER member Function Match (c Customer) Return integer IS
begin
If id<c.id then Return –1;
ElsIf id>c.id then return 1;
Else return 0;
End If;
end;
end;
Конструктор в PL/SQL всегда нужно вызывать явно.
Пример
Declare
r Complex; - задекларировали объект
Begin
r:=Complex(30,40); - явно вызван конструктор
End;
