Отправляет email-рассылки с помощью сервиса Sendsay

СУБД Oracle "с нуля"

  Все выпуски  

Восьмой выпуск.


Информационный Канал Subscribe.Ru

Выпуск 8.

        Доброе время суток!

        В этом выпуске:

                Для всех – 12 правил Кодда
                Разработчику – Введение в PL/SQL
                Администратору – Запуск и остановка экземпляра БД
                Вопросы-ответы – рубрика для сомневающихся

ДЛЯ ВСЕХ

        Необходимым условием работы с СУБД «Oracle» является знание реляционной
модели БД. Это наиболее популярная модель хранения данных. Техническая статья
«Реляционная модель данных для больших разделяемых банков данных» доктора Е.Ф.
Кодда, представленная в 1970г. является родоначальницей современной теории
реляционных БД. Доктор Кодд определил 13 правил реляционной модели (которые
называют 12 правилами Кодда).

12 правил Кодда.

0. Реляционная СУБД должна быть способна полностью управлять базой данных,
        используя связи между данными.
1. Информационное правило – Вся информация в реляционной БД (включая имена
        таблиц и столбцов) должна определяться строго как значения таблиц.
2. Гарантированный доступ – Любое значение БД должно быть гарантированно
        доступным через комбинацию имени таблицы, первичный ключ и имя столбца.
3. Поддержка нулевого значения – СУБД должна уметь работать с нулевыми
        (пустыми) значениями. Нулевое значение – это неизвестное, независимое,
        неприменимое значение, в отличие от значений по умолчанию и обычных
        значений.
4. Активный, оперативный реляционный каталог – Описание БД и его содержимое
        должны быть определены на логическом уровне через таблицы, к которым
        можно применять запросы, используя DML (язык манипулирования данными).
5. Исчерпывающее подмножество языка данных – По крайней мере, один из
        поддерживаемых языков должен иметь четко определенный синтаксис и быть
        самодостаточным. Он должен поддерживать определение данных и
        манипулирование ими, правила целостности, авторизацию и транзакции.
6. Правило обновления представлений – Все представления, теоретически
        обновляемые, могут быть обновлены через систему.
7. Вставка, обновление и удаление – СУБД поддерживает не только запрос данных,
        но и вставку, обновление и удаление.
8. Физическая независимость данных – Логика программ-приложений остается
        прежней при изменении физических методов доступа к данным и структур
        хранения.
9. Логическая независимость данных – Логика программ-приложений остается
        прежней, в пределах разумного, при изменении структур таблиц.
10. Независимость целостности – Язык БД должен быть способен определять
        ограничения целостности. Они должны быть доступны из оперативного
        каталога, и не должно быть способа их обойти.
11. Независимость распределения – Запросы программ-приложений логически не
        затрагиваются при первом и последующих распределениях данных.
12. Несмешиваемость (может, кто-то знает более удачный перевод термина
        «Nonsubversion»?) – невозможность обойти ограничения целостности,
        используя языки низкого уровня.

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

РАЗРАБОТЧИКУ.

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

Обзор PL/SQL.

        Хорошим способом познакомиться с PL/SQL будет рассмотрение простой
программы. Следующий пример сохраняет информацию о заказах на теннисные
ракетки. Во-первых, объявляем переменную qty_on_hand (тип данных – NUMBER)
для хранения числа имеющихся теннисных ракеток. Затем получаем это число из
таблицы inventory. Если ракетки имеются в наличии (их количество больше нуля),
то программа обновляет таблицу и вставляет запись о приобретении в таблицу
purchase_record. В противном случае, программа вставляет запись о том, что
товар закончился в таблицу purchase_record.


DECLARE
   qty_on_hand  NUMBER(5);
BEGIN
   SELECT quantity INTO qty_on_hand FROM inventory
      WHERE product = 'Ракетка теннисная'
      FOR UPDATE OF quantity;
   IF qty_on_hand > 0 THEN  -- check quantity
      UPDATE inventory SET quantity = quantity - 1
         WHERE product = 'Ракетка теннисная';
      INSERT INTO purchase_record
         VALUES ('Теннисная ракетка приобретена', SYSDATE);
   ELSE
      INSERT INTO purchase_record
         VALUES ('Теннисные ракетки закончились', SYSDATE);
   END IF;
   COMMIT;
END;

В процедурах PL/SQL можно использовать команды SQL для манипулирования данными.
Более того, Вы можете объявлять ограничения и переменные, определять процедуры
и функции, и перехватывать ошибки времени выполнения. Таким образом, PL/SQ
объединяет в себе силу DML SQL с возможностями процедурных языков.

        Основные единицы (процедуры, функции, безымянные блоки), составляющие
PL/SQL-программу, называются блоками, которые могут содержать любое число
вложенных блоков. Обычно каждый из блоков отвечает за свою задачу, решает
какую-то одну проблему. Т.е. PL/SQL использует принцип «разделяй-и-властвуй»
для решения задачи пошаговой детализации.

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

[DECLARE
        -- декларативная часть]
BEGIN
        -- исполняемая часть
[EXCEPTION
        -- обработчики]
END;

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

АДМИНИСТРАТОРУ

Запуск и остановка экземпляра

        Существует несколько способов запуска экземпляра БД. Для этого можно
использовать SQL*Plus, Recovery Manager или Oracle Enterprise Manager. Для
того, чтобы Вы набили руку в работе с SQL*Plus, рассмотрим именно этот способ.
Кстати, SQL*Plus устанавливается в двух вариантах: утилита командной строки и
графический инструмент (похож на стандартный блокнот Windows). Я предлага
действовать в командной строке.
        Для начала работы с SQL*Plus запустите любое консольное окно:
командную строку либо файловый менеджер (FAR, NC, VC и др.). Наберите:
SQLPLUS /NOLOG, для того чтобы запустить SQL*Plus без принудительного
подключения к серверу. Затем надо подсоединиться к базе с ролью SYSDBA:

CONNECT имя/пароль AS SYSDBA

        Теперь мы подключились к Oracle и готовы к тому, чтобы запустить
экземпляр Вашей БД. Процесс запуска экземпляра очень прост, достаточно
дать команду:

STARTUP

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

STARTUP NOMOUNT

У внимательного читателя может возникнуть вопросы: «Откуда Oracle знает,
какой именно экземпляр надо запустить? Какие параметры применяются при этой
операции?». Дело в том, что существуют инициализационные файлы, которые
используются в следующем порядке:

        1. spfile$ORACLE_SID.ora
        2. spfile.ora
        3. init$ORACLE_SID.ora

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

Остановка экземпляра выполняется из того же консольного окна, где запущен
SQL*Plus. Эта процедура выполняется в нескольких вариантах:

SHUTDOWN NORMAL – Запрещаются новые пользовательские подключения. Сервер
        ожидает, пока все подключенные пользователи отключатся. Когда никто
        уже не подключен, экземпляр останавливается.

SHUTDOWN IMMEDIATE – Немедленная остановка экземпляра. В этом варианте
        остановки сервер запрещает новые подключения и транзакции. Все
        незафиксированные в данный момент транзакции откатываются. Экземпляр
        останавливается сразу, не ожидая, пока пользователи отключатся.

SHUTDOWN TRANSACTIONAL – Это более щадящий вариант остановки экземпляра по
        сравнению с предыдущим. Разница в том, что сервер перед остановкой
        выполняет до конца все начатые транзакции. Клиенты, закончившие свои
        транзакции, сразу отключаются от сервера.

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

        Для выхода из SQL*Plus надо набрать команду EXIT.

        Если есть возможность, советую потренироваться с запуском и остановкой
экземпляра БД.

ВОПРОСЫ-ОТВЕТЫ

Вопрос: Зачем мне надо знать теорию реляционной модели БД для
        использования SQL?
Ответ: SQL был разработан для обслуживания реляционных БД. Без минимального
        понимания теории реляционной модели Вы не сможете эффективно
        использовать SQL (за исключением самых тривиальных случаев).

Вопрос: Где взять подробную документацию по Oracle?
Ответ: Самым лучшим источником информации я считаю оригинальную документацию
        (которая, к сожалению, только на английском). Скачать или почитать ее
        Вы можете здесь:
        http://otn.oracle.com/docs/content.html

На этом я заканчиваю восьмой выпуск.
Всегда Ваш, Lemon.
lemon@donmetal.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное