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

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

  Все выпуски  

Выпуск 9.


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

Выпуск 9.

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

СОВЕТ: Не рекомендую экспериментировать с работающей на предприятии базой.
Лучше установите на своем личном компьютере Oracle-сервер специально в учебных
целях.

ORACLE BOOTSTRAP INSTANCE by Lemon

        Перед формированием любой базы данных должен быть создан экземпляр
инициализации Oracle (Oracle bootstrap instance). Для ОС Windows – это сервис,
для других платформ – это может быть демоном или процессом. При создании
экземпляра автоматически создается сервис OracleServiceSID (где SID –
системный идентификатор). Этот сервис экземпляра используется для
инициализации более традиционного экземпляра Oracle. Поскольку сервер Oracle
является сервисом (под ОС Windows), Вы не сможете подключиться к Oracle или
создать БД пока не будет запущен сервис экземпляра инициализации Oracle.
Этот сервис создается с помощью утилиты Instance Manager.

Создание экземпляра с помощью Oracle Database Configuration Assistant.

        При запуске мастера Oracle Database Configuration Assistant из
соответствующей программной группы (Database Administration), появится
заставка с информацией о версии программы и надписью Loading... Она будет на
экране до тех пор, пока мастер не загрузится полностью. Первая экранная форма
предложит вам выбрать одну из трех функций (создать БД, изменить конфигурацию
БД и удалить БД). Для примера, давайте создадим БД. Далее по шагам рассмотрим
этот процесс.

        1. Вам будет предложено создать либо типичную БД (typical) либо с
        более глубокими настройками (custom). Типичная БД – это стандартная
        начальная база данных, режим custom позволяет изменить такие
        параметры как имена экземпляра и файлов данных. В этом примере мы
        создадим типичную БД.

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

        3. Далее мастер Вас попросит указать глобальное имя БД (Global
        Database Name) и SID (системный идентификатор – см. выпуск 7).
        Придумайте имя, логически соответствующее назначению БД.

        4. Жмем кнопку Finish. Далее процесс создания БД пойдет автоматически,
        показывая при этом те действия, которые будут выполняться.

        5. Поздравляю Вас! Вы создали экземпляр инициализации Oracle и БД.

Создание экземпляра с командной строки.

        При создании экземпляра с командной строки используются те же утилиты,
что и в мастере с графическим интерфейсом. Только теперь придется указывать
еще и командные аргументы. Instance Manager в сущности является просто
программой ORADIM.EXE. Чтобы узнать о параметрах утилиты, можно указать
ключ </?> или <-?>, что одно и то же.
        Для создания экземпляра инициализации Oracle введите следующий
синтаксис:

ORADIM -NEW -SID SID -INTPWD password [-MAXUSERS number] [-STARTMODE AUTO or
MANUAL] [-PFILE pfile_name]

        Значения SID и password являются обязательными, а MAXUSERS,
STARTMODE, и PFILE могут быть опущены, так как имеют значения по умолчанию.
Вот пример создания экземпляра, названного mark:

ORADIM -NEW -SID mark -INTPWD oracle

        Этим мы создадим экземпляр mark и PFILE по умолчанию initMARK.ora
(PFILE – это файл настроек для запуска экземпляра). Запуск этого экземпляра
должен быть произведен вручную.

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

        Экземпляр может быть запущен и остановлен с помощью все той же
утилиты ORADIM.EXE. Для этого должны быть использованы следующие аргументы:

ORADIM -STARTUP -SID SID -PFILE pfile_name [-USRPWD password] -STARTTYPE
SRVC или INST

ORADIM -SHUTDOWN -SID SID -PFILE pfile_name [-USRPWD password] -SHUTTYPE
SRVC или INST -SHUTMODE a,i,n

        Здесь режимы остановки соответствуют буквам: a=abort,
        i=immediate и n=normal.

Изменение экземпляра инициализации Oracle.

        Изменить параметры экземпляра можно с помощью тех же программных
средств: Oracle Database Configuration Assistant и ORADIM.EXE. В первом
случае надо просто выбрать пункт «Изменение конфигурации БД», а во втором
применить флаг –EDIT:

ORADIM -EDIT -SID SID -INTPWD password [-MAXUSERS number] [-STARTMODE AUTO
or MANUAL] [-PFILE pfile_name]

Удаление экземпляра.

        Удаление экземпляра – самая простая операция. Эту процедуру можно
опять же произвести с помощью Oracle Database Configuration Assistant либо
ORADIM.EXE. В последнем случае используйте следующий синтаксис:

ORADIM -DELETE -SID SID

или

ORADIM -DELETE -SRVC service

Вот собственно и все, что необходимо знать об oracle bootstrap instance.

БАЗОВЫЕ ОБЪЕКТЫ by GrayRat

        Здравствуйте. В прошлом выпуске рассылки я рассказал, как установить
СУБД Oracle и настроить клиента для работы с ним. Этот раздел будет посвящен
работе с Oracle при помощи такой утилиты как SQL*Plus, а также созданию при
помощи данной утилиты базовых объектов СУБД Oracle.
        Сначала я хотел бы остановиться на том, что же представляет собой
SQL*Plus (кстати, то, как я пишу название - не моя личная прихоть, подобным
образом данная утилита называется и во всех официальных руководствах Oracle).
Думаю некоторые из Вас начинали работать еще на 80286 (а может даже и
на 8086 :), а может и сейчас работаете /:( ), или имеют некоторый опыт
работы под OS Linux, а может Вас по каким то причинам не устраивает
программирование под этими тормозными IDE (Interface Development Environment
- среда разработки); как бы то ни было, в любом из вышеприведенных случаев
Вам приходилось иметь дело с командной строкой.
        Так вот, SQL*Plus - та же командная строка, только под Oracle.
Данное приложение и является тем самым минимумом, который необходим Вам для
того, чтобы начать свое знакомство с возможностями Oracle.
        По-моему глубокому заблуждению основными достоинствами(+) SQL*Plus
являются:

        1) Минимальные требования к аппаратным и программным ресурсам.
        Собственно говоря, кроме SQL*Plus на машине должен быть установлен
        еще только Net8 (не вдаваясь сейчас в подробности, скажу, что это
        набор драйверов для связи с Oracle).

        2) Максимум функциональных возможностей: после соединения с Oracle
        посредством SQL*Plus, Вы можете делать все что захотите. Начиная от
        простой выборки данных из таблиц и заканчивая выполнением каких либо
        административных функций. Главное при этом, чтобы у пользователя
        СУБД Oracle, под которым Вы законнектились, хватало прав на
        выполняемые действия.

ЗАМЕЧАНИЕ: Если прав недостаточно, то в случае выполнения каких либо
административных функций или операторов определения данных (например,
CREATE TABLE, который мы рассмотрим ниже), Oracle выдаст Вам об этом
соответствующее сообщение. В случае же выполнения операций языка
манипулирования данными (например, оператора SELECT, который мы также
рассмотрим ниже), Oracle может и не сказать, что у Вас недостаточно прав,
а просто сообщит, что объекта, над которым Вы хотите провести операцию, не
существует (это на заметку будущим DBA).

        3) Простота настройки: что нам нужно для работы с SQL*Plus, так это:
                а) сконфигурированный Net8 Connection;
                б) имя пользователя и пароль для соединения с базой данных.
        Правда, чтобы быть объективным, хочу сказать, что большинству
        продуктов Oracle требуется ровно то же самое, только иногда
        приходится немного поискать - где именно это нужно указывать, в
        SQL*Plus Вы же задаете данные параметры при входе.

        4) Четвертым достоинством, равно как и недостатком, является
        отсутствие какого то бы ни было интерфейса. Все приходится делать
        руками (это же командная строка). Но здесь уже "каждый выбирает для
        себя..."

        А теперь о том, как присоединится: из меню "Пуск-..." в группе
программ Oracle выбираем SQL*Plus. После начальной загрузки появляется
окошко с тремя полями:

        - имя пользователя;
        - пароль;
        - "псевдоним" соединения.

        "Имя пользователя" и "пароль" - это то, что напишет вам на бумажке
DBA (DataBase Administrator - администратор базы данных). Если вы сами DBA и
еще не знаете, как создавать пользователей в базе данных, то попробуйте
такие вот сочетания имени/пароля:

        - scott/tiger (прав данного пользователя вполне хватает для учебных
        целей);
        - system/manager (это пароль и имя пользователя с правами DBA;
        коннектиться под ним, чтобы создать пару таблиц не советую, по
        умолчанию данные таблицу будут создаваться в табличном пространстве
        SYSTEM - до этого мы еще с Вами дойдем, а пока запомните, что это
        нехорошо);
        - есть еще такой пользователь как sys/change_on_install - это БОГ
        базы данных; под ним работать не советую вообще либо только в
        исключительных случаях.

СОВЕТ: Не забудьте для двух последних пользователей после инсталляции
сменить пароль (да и в официальной документации тоже так советуют).

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

        SQL*Plus: Release 8.1.6.0.0 - Production on Пнд Сен 9 11:26:27 2002
        (c) Copyright 1999 Oracle Corporation.  All rights reserved.
        Присоединен к:
        Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
        With the Partitioning option
        JServer Release 8.1.6.0.0 - Production
        SQL>

СОВЕТ: Иногда соединиться с использованием "псевдонима" не удается. В этом
случае попробуете указать GDN (Global Database Name).

ЗАМЕЧАНИЕ: Автор считает необходимым также отметить следующий момент: версии
SQL*Plus: Release 8.1.6.0.0, Oracle8i Enterprise Edition Release 8.1.6.0.0 и
JServer Release 8.1.6.0.0 должны совпадать. Если они не совпадают, то это,
конечно, не будет означать, что Ваш сервер тут же перестанет работать,
однако это может стать потенциальным источником проблем.

        Настало время перейти к самому интересному: создание объектов базы
данных. Сегодня мы с Вами попробуем создать таблицу (table), представление
(view), получающее данные из этой таблицы и последовательность (sequence).

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

Пример 1:

        CREATE TABLE dclass (
        classid VARCHAR2(2),
        classname VARCHAR2(255) NOT NULL);

        Набираем пример, нажимаем на Enter и... Oracle должен выдать
что-нибудь вроде: "Table created". Этот пример создания таблицы - самый
простой.
        Для более тонкой настройки и оптимизации работы корпорация Oracle
предусмотрела указание ряда дополнительных параметров. Но, в приведенном
выше примере, СУБД сама определит их за Вас. Это такие параметры как:
TABLESPACE (определяет табличное пространство размещения объекта, если не
указано - то табличное пространство по умолчанию для данного пользователя),
STORAGE (предложение, определяющее параметры хранения для данной таблицы
базы данных).
        Итак, таблица создана. Однако, как мы отметили выше, таблица -
основа для хранения данных. А для того, чтобы что-то в чем-то хранить,
нужно это сначала туда поместить.
        Для добавления данных в таблицу в языке SQL используется предложение
INSERT. На практике, вышеприведенная таблица использовалась для хранения
классов товаров по ОКП (Общероссийский Классификатор Продукции). Мы будем
в ней хранить практически то же самое - группы товаров, а также их коды
(а вообще-то каждый может хранить ту информацию, которую захочет).

Пример 2:

        INSERT INTO dclass VALUES ('00', 'Прочие товары');
        INSERT INTO dclass VALUES ('00', 'Бумага писчая формата А4');
        INSERT INTO dclass VALUES ('00', 'Клей канцелярский');

        Остальное, если хотите, придумайте сами. Общий принцип, я думаю, Вы
уже поняли.

        Удалить только что созданную нами таблицу можно следующей командой:
        DROP TABLE dclass;

        Перед разработчиками клиентов баз данных (так называемого front-end)
очень часто встает вопрос: "Как ограничить пользователю приложения доступ к
данным, к которым он в силу своего служебного положения или других
обстоятельств доступа иметь не должен?". Очень часто это решается в
реализации самого клиента. На уровне же базы данных такая проблема может быть
решена с использованием видов (view).
        Представление (view) - это выборка одной или нескольких строк из
одной или нескольких таблиц. Представление по своей сути представляет собой
структуру, которая ссылается на данные, фактически хранящиеся в таблицах.
С точки зрения проектирования, представление представляет собой хранимый SQL
запрос (с логикой соединения и фильтрации), из которого можно выбирать
данные, так если бы это была просто таблица.
        Кроме вышеуказанной проблемы разграничения доступа представление
может быть использовано также для достижения следующих целей:

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

        Теперь перейдем к практике. Попробуем создать простейший вид,
который бы выбирал все данные из ранее созданной таблицы.

Пример 3:

        CREATE VIEW vdclass (
        classid, classname) AS
        SELECT dclass.classid, dclass.classname
        FROM dclass;

        На эту команду Oracle скажет что-нибудь типа "View created".
        Данный вид выбирает все данные из таблицы dclass, если же Вас, к
примеру, интересуют только названия классов товаров, необходимо модифицировать
предложение SELECT, убрав из него наименование поля кода класса товара.
        Удалить наш вид можно введя команду:

        DROP VIEW vdclass;

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

ЗАМЕЧАНИЕ: Читатель может быть отметил, что в создании вида при построении
выборки автор использовал запись вида: имя_таблицы.имя_столбца. Это так
называемая уточненная форма записи. Она позволяет однозначно идентифицировать
таблицу, из которой мы выбираем столбец. Если, например, в выборке участвуют
две таблицы с одинаковыми названиями столбцов (это может быть, в частности,
при построении отношений master-detail (главный-подчиненный)).
В вышеприведенном примере такая форма записи не обязательна, однако если
база данных достаточно сложна, она может потребоваться.
        Существует также так называемая уточненная форма записи имени
объекта. Она позволяет однозначно идентифицировать объект в любой базе
данных Oracle (если мы, например, проектируем распределенную базу данных).
        Последним объектом базы данных, который мы сегодня рассмотрим, будет
последовательность (sequence). Очень часто перед разработчиками баз данных
встает следующая задача:

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

        Для решения данной задачи корпорация Oracle предлагает использовать
такой объект базы данных как последовательность (sequence). Рассмотрим на
примере создание объекта последовательности.

Пример 4:

        CREATE SEQUENCE seq_dclass
        INCREMENT BY 1
        START WITH 1
        MAXVALUE 99
        NOCYCLE;

        На эту команду Oracle должен сказать "Sequence created". Рассмотрим
также, как можно использовать последовательность при заполнении таблицы
данными.

Пример 5:

        INSERT INTO dclass VALUES (seq_dclass.nextval, 'Ручка шариковая');

        Метод seq_dclass.nextval генерирует следующее значение
последовательности и подставляет его на место вставляемых данных. Кроме того,
каждая последовательность имеет также метод currval, позволяющий получить
текущее значение последовательности.

        Удалить созданную последовательность можно командой:
        DROP SEQENCE seq_dclass;

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

ЗАМЕЧАНИЕ: Если автор не ошибается, то в предложениях SELECT нельзя
использовать условие вида:
        ... any_column = any_seqence.currval ...
Связано это, кажется, с тем, что any_seqence.currval не является реальным
значением (как, например, числа 3, 7 или строка 'qqq'), а лишь ссылкой на
это значение.

        В заключение небольшой блок справочной.

        Синтаксис создания реляционной(!) таблицы:
        CREATE TABLE таблица (<реляционные_свойства>);
        Где реляционные свойства (читай описание параметров столбца таблицы)
можно записать в следующем виде:
        имя_столбца тип_данных [DEFAULT выражение] [ограничения_столбца]

        Синтаксис создания вида:
        CREATE VIEW представление (<столбцы_представления>) AS
        SELECT <столбцы_данных>
        FROM источники_данных;

        Синтаксис создания последовательности:
        CREATE SEQUENCE название_последовательности
        INCREMENT BY интервал_приращения
        START WITH начальное_значение
        MAXVALUE конечное значение
        [CYCLE] или [NOCYCLE] (циклическая или нециклическая);

        Хочу отметить, что здесь дан лишь очень упрощенный синтаксис
создания объектов базы данных. Описание полного синтаксиса создания таблицы,
к примеру, занимает 10 листов текста (формат 84х106/16).

        Использованные источники:
        1) Грин Джо и др. Oracle 8/8i Server. Энциклопедия пользователя:
Пер. с англ./Джо Грин и др. - К.: Издательство "ДиаСофт", 2000. - 576с.
ISBN 966-7393-44-5

На этом GrayRat и Lemon прощаются с Вами.
Пишите:
grayrat@rseu.ru
lemon@donmetal.ru


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

В избранное