- •Конспект лекций не официальный, возможны ошибки! Еремеев н.Б.
- •Распределенная база данных
- •Пример транзакции
- •Пример рбд
- •Прямые и косвенные соединения
- •Объекты: схемы и именования в рбд
- •Удаленные и распределенные предложения
- •Прозрачность в системе рбд
- •Архитектура рбд Oracle
- •Прозрачность в рбд. Прозрачность местоположения.
- •Прозрачность транзакций.
- •Прозрачность дублирования.
- •Разрешение имен в рбд
- •Снимки.
- •Двухфазный commit.
- •Фаза подготовки.
- •Фаза подтверждения
- •Создание точки подтверждения.
- •Проектирование распределенных приложений.
- •Уникальность имен.
- •Последовательности в распределенных транзакциях.
- •Обработка ошибок в удаленных процедурах.
- •Разрешение проблем распределенных транзакций
- •Снимки. Управление ими.
- •Спецификация определяющего запроса снимка (as ...).
- •Порядок создания снимков и их журналов:
- •Альтернативы снимкам.
- •Дублирование таблиц с помощью триггеров:
- •Создание триггера
- •Управление снимками
- •Создание снимков
- •Установление параметров памяти для снимков.
- •Конфигурирование автоматических обновлений
- •Ручное обновление снимков.
- •Связь между декларативными ограничениями и снимками.
- •Управление журналами снимков.
- •Внутренняя реализация журнала снимка.
- •Удаление журнала снимков.
- •Управление распределенными бд администратором.
- •Принципы простроения глобального имени бд:
- •Безопасность бд.
- •Характеристики и квоты различных табличных пространств.
- •Ресурсные лимиты и профили пользователей.
- •Лицензирование.
- •Привилегии и роли.
- •Защита таблиц.
- •Защита обзоров:
- •Усиление защиты таблиц через обзоры:
- •Защита процедур.
- •Табличные пространства и файлы данных Файлы данных
- •Табличное пространство
- •Объекты табличного пространства
- •Блок данных
- •Экстенты
- •Сегменты
- •Копирование и восстановление баз данных
- •Рекомендации по копированию баз данных.
- •Стратегии копирования Стратегии копирования в режиме no archive log
- •Стратегии копирования в режиме archive log
- •Процедуры копирования.
- •Процедура полного копирования базы данных
- •Восстановление
- •Опции предложений Audit и NoAudit.
- •Дополнительные опции по аудиту предложений:
- •Включение аудита
- •Выключение аудита.
- •Контролирование роста и размера аудиторского журнала.
- •Защита аудиторского журнала
- •Аудит с помощью триггеров
- •Поддержка национальных языков.
- •Лингвистическая сортировка.
- •Перекрытие стандартных умолчаний.
- •Форматы чисел и дат.
- •Объекты в Oracle.
- •Атрибуты
- •Сравнение объектов
- •Синтаксис объявления типов
- •Объявление и инициализация объектов
- •Вызов методов
- •Хранение объектов в бд
- •Использование оператора select
- •Вставка объектов
- •Обновление объектов
- •Удаление объектов
Хранение объектов в бд
Объекты можно хранить в БД. Для этого нужно создать таблицу, где в качестве типов полей можно указывать объекты. Ограничение: таблицы с объектами нельзя использовать в РБД и для удаленных БД.
Пример создания базы данных, содержащей объект:
CREATE TABLE numbers (rn Rational, … );
CREATE TABLE rat_nums OF Rational; - таблица будет содержать строки объектов, каждая колонка в строке связана с атрибутом объекта. С каждой строкой будет связан специальное поле, которое является ссылкой на объект и является уникальным для каждого сохраненного в таблице объекта.
INSERT INTO numbers(rn) VALUES (Rational (3,62)); - вставка объекта в таблицу.
Использование оператора select
Пример
SELECT n.rn.num INTO my_num FROM number n …;
rn – имя поля, num – имя атрибута, my_num – переменная, в которую помещается значение атрибута, number – имя таблицы, n – переменная типа данного объекта (создается автоматически). Сначала объект помещается в некоторую область памяти (n), которая связана с содержимым таблицы number.
Пример
CREATE TYPE Person AS OBJECT (
first_name varchar2(15),
last_name varchar2(15),
birthday DATE,
home_address Address,
phone_number varchar2(15));
/
CREATE TABLE Persons OF Person; - на базе объекта Person создаем таблицу
…
BEGIN
INSERT INTO employees
SELECT * FROM persons p WHERE p.last_name LIKE '%smith'
…
Пример использование оператора VALUE
INSERT INTO employess
SELECT VALUE (p) FROM persons p WHERE p.last_name LIKE '%smith' ;
Пример использование оператора VALUE
DECLARE
p1:person;
p2:person;
BEGIN
SELECT VALUE(p) INTO p1 from person p WHERE p.last_name='Kroll';
p2:=p1;
END;
Использование оператора REF
Оператор REF возвращает ссылки на объекты. Его использование подобно оператору VALUE.
Пример
Таблица person_ers будет содержать ссылки на объекты таблицы persons.
INSERT person_refs
SELECT REF(p) FROM persons p WHERE p.last_name LIKE '%smith';
Пример
DECLARE
p_ref REF PERSON;
my_last_name varchar2(15);
BEGIN
SELECT REF(p) INTO p_ref FROM persons p
WHERE p.last_name=my_last_name; - выбрали указатель на объект,
следующий за last_name=my_last_name
UPDATE person p SET p=Person('Jill','Anders','11-Nov-67',…) WHERE REF(p)=p_ref;
…
END;
Для того чтобы проверить существует объект или нет, нужно использовать специальную конструкцию IS DANGING.
Пример
BEGIN
…
UPDATE department SET manager=NULL WHERE manager IS DANGING;
END;
Использование оператора DEREF
Оператор DEREF - обратный оператору REF:
DECLARE
p1 Person;
p_ref REF Person;
name varchar2(15);
BEGIN
SELECT DEREF (p_ref) INTO p1 FROM dual;
name:=p1.last_name;
END;
Оператор DEREF нельзя применять как процедурную запись: p1:=DEREF(p_ref).
Правильный синтаксис при использовании ссылок:
table_alias.object_column.ref_attribute
table_alias – имя Alias таблицы, object_column – столбец в таблице, ref_attribute – поле в таблице.
Операторы REF можно использовать при создании объектов, из которых будет состоять другая таблица.
Пример
CREATE TYPE address as object (
street varchar2(35),
city varchar2(15),
state char(2),
zip_code integer);
/
CREATE TYPE Person as object(
first_name varchar2(15),
last_name varchar2(15),
birthday date,
home_address ref address,
phone_number varchar2(15));
/
CREATE TABLE persons of Person;
Столбец home_address содержит указатель на объект типа address, сохраненный в некоторой другой таблице.
Пример использования таблицы persons:
DECLARE
addr1 Address; - переменные типа объект Address, хранятся в памяти
addr2 Address;
BEGIN
SELECT DEREF(home_address) INTO addr1 FROM persons p
WHERE p.last_name='Lucas';
…
END;
Пример:
DECLARE
my_street varchar2(25);
…
BEGIN
SELECT p.home_address.street INTO mystreet FROM persons p
WHERE p.last_name='Lucas'; - прямое обращение к атрибуту
END;
Операция DEREF применяется к указателю объекта. При использовании поля объекта, операция DEREF применяется неявно.
