Тригонометрические функции
Функции SIN(числовой_аргумент), С08(число-вой_аргумент), TAN(чucлoвoй_apгyмeнm) возвращают соответственно синус, косинус и тангенс параметра число-вой_аргумент. Параметр числовой_аргумент предполагается заданным в радианах.
Функции АSIN(числовой_аргумент) и АСОS(число вой_аргумент) возвращают соответственно арксинус и арккосинус параметра числовой_аргумент. Параметр числовой_аргу мент предполагается находящимся в диапазоне от -1 до 1. При вычислении функции с параметром числовой_аргу-мент вне указанного диапазона, выдается сообщение об ошибке. Функция АTAN(числовой_аргумент) возвращает арктангенс параметра числовой _аргумент.
Функции SINHчисловой_аргумент), СОSH(чнсло-вой_аргумент), TANH(чucлoвoй_apгyмeнm) возвращают соответственно гиперболический синус, гиперболический косинус и гиперболический тангенс параметра числовой_аргумент.
Примеры применения тригонометрических функций представлены в листинге 84.
Числовые функции, связанные с округлением
Функция ROUND(числовой_аргумент[, позиция]) округляет значение параметра числовой _аргумент с точностью, определяемой параметром позиция. Параметр позиция определяет число десятичных знаков после запятой. Если параметр позиция отрицательный, то аргумент округляется до целых чисел соответствующего масштаба (для значения параметра -1 до десятков, -2 до сотен и т.д.). Значение параметра позиция по умолчанию 0.
Функция TRANK(чucлoвoй_apг[, позиция]) усекает значение параметра числовой _аргумент с точностью, определяемой параметром позиция. Параметр позиция опрe
деляет число десятичных знаков после запятой. Если параметр позиция отрицательный, то аргумент округляется до целых чисел соответствующего масштаба (для значения параметра -1 до десятков, от -2 до сотен и т.д.). Значение параметра позиция по умолчанию 0.
Примеры применения функций ROUND и TRANC представлены в листинге 85.
Функция FLOOR(числовой_аргумент) возвращает наибольшее целое, меньшее или равное значению параметра числовой_аргумент.
Функция СЕIL(числовой_аргуметп) возвращает наименьшее целое, большее или равное значению параметра чи-словой__аргумент,
Примеры применения функций
FLOOR и CEIL представлены в листинге 86.4iACAo0e”ie. ф\/жк1дм1А/ с0<аэанн&1е со энако44 числа
Функция _ВВ(числовой_аргумент) возвращает абсолютное значение числа, заданного параметром числовой_аргу-мент.
Функция 8ТС'1Я(числовой_аргумент) возвращает -1, если параметр числовой _аргу'мент < 0, возвращает 0, если параметр ччсловой_аргумент = 0, и возвращает 1, если параметр числовой _аргумент > 0.
Числовое сринки1414/ с0_”эаннсте с /uogunflpHOtA <лр1лфлле.т1лкочл
Функция ЖЛ(числовой_аргумент, основание) возвращает остаток от деления параметра числовой_аргумент на значение, определяемое параметром основание. Использование отрицательных значений параметра основание не рекомендуется, поскольку результат не соответствует принятому определению модуля числа.
Пример применения функций
MOD представлен в листинге 87.OvjHKt_iAin/ <тер14риюм_1ле с дато/шд
Функция
SYSDATE возвращает дату и время, определяемые средствами операционной системы локального приложения.Функция
ROUMD( дата [,формат\) округляет значение параметра дата по шаблону, определяемому параметром формат. Если параметр формат опущен, то аргумент датаокругляется до дней (время в начале дня устанавливается в полночь).
Функция
TRANC( дата [,формат]) усекает значение параметра дата по шаблону, определяемому параметром формат. Если параметр формат опущен, то аргумент дата усекается до ближайшего дня (время в начале дня устанавливается в полночь).Некоторые значения параметра формат представлены в таблице 5.
Параметр формат |
Тип округления |
YYYY YEAR YY |
Преобразование до года. Округление в большую сторону происходит с 1 июля. |
MONTH MON MM |
Преобразование до месяца. Округление в большую сторону происходит с 16 числа. |
W |
Преобразование до того же дня недели, что первый день месяца. |
DDD DD J |
Преобразование до дня. |
DAY DY D |
Преобразование до начального дня недели. |
HH HH12 HH24 |
Преобразование до часа. |
MI |
Преобразование до минут. |
функция NEXT_DAY(дama,
название__дня) возвращает дату дня, который является первым днем, более поздним, чем текущая дата с названием, совпадающим с указанным параметром название_дня.функции ROUND, TRUNC, NEXT_DAY обычно используются для вычисления календарных интервалов, в частности, для приложений, связанных с учетом трудовой активности.
Примеры применения функций SYSDATE, ROUND, TRUNC представлены в листинге 88.
Функция преобразования типов данных
Функция ТО__CHAR(числовой_аргумент [,формат]) возвращает результат преобразования значения параметра числовой _аргумент типа
NUMBER в строку типа VARCHAR2. Если параметр формат опущен, числовой_аргумент преобразовывается в строку с длиной, достаточной для хранения всех значащих цифр. Некоторые значения параметра формат для преобразования числовых значений представлены в таблице 6.
Параметр формат |
Тип выводимого результата |
9 |
Выводится цифра. Лидирующий 0 заменяется пробелом. |
0 |
Выводится цифра. Лидирующий 0 выводится. |
ЕЕЕЕ |
Результат выводится в экспоненциальной нотации. |
G |
Выводится символ-разделитель (обычно запятая). |
Примеры применения функций
TO_CHAR представлены в листинге 89.Функция TO_DATE(символьный_аргумент [формат]) возвращает результат преобразования значения параметра символьный_аргумент символьного типа в тип
DATE. Если параметр формат опущен, символьный_аргумент должен соответствовать формату даты, принятой в системе по умолчанию. Наиболее употребительные значения параметра формат представлены выше в таблице 5. Обычно функцию TO_DATE используют для преобразования даты из используемого некоторым приложением формата в стандартный формат системы.Пример применения функции
TO_DATE представлен в листинге 90.
Функция ТО_NUMBER(символьный_аргумент) возвращает результат преобразования значения параметра символь-ный_аргумент символьного типа в аргумент типа
NUMBER. Параметр символъный_аргумент может представлять числа в любой допустимой Oracle нотации.Пример применения функции
TO_NUMBER представлен в листинге 91.Функция замены аргументов
функция NVL(аргумент_1, аргумент_2) возвращает аргумент_2, если аргумент_1 имеет неопределенное значение (NULL), в противном случае возвращается аргумент_1. Тип данных возвращаемого значения определяется типом данных параметра аргумент_1.
Проиллюстрируем применение функции NVL на таблице, сформированной предложениями:
Пусть приложение требует замены всех неопределенных числовых значений на 0, а неопределенных символьных значений на знак “*”.
Дополнительно к определениям, необходимым для процедуры, в определении функции должен быть указан тип данных единственного возвращаемого функцией значения. Возврат значения функции выполняется командой
PL/SQL RETURN. Оператор определения процедуры Oracle использует следующий синтаксис:Ключевое слово
OR REPLACE указывает на безусловное замещение старого текста процедуры. Если ключевое слово OR REPLACE не указано, и процедура определена, то замещения старого значения кода процедуры не происходит, и возвращается сообщение об ошибке.Обратите внимание, что при описании переменных процедуры не используется ключевое слово
DECLARE. Блок определения данных начинается сразу после ключевого слова AS (или IS, по выбору пользователя).Рассмотрим пример создания процедуры, которая заносит в таблицу значение определенной функции от числового параметра и текущую дату.
Пусть таблица сформирована предложением:
CREATE TABLE Tabl (Atl NUMBER, At2 DATE);
Протокол создания процедуры представлен в листинге 94.
Исполнение созданной процедуры
InsRec может быть выполнено оператором ЕХЕС языка PL/SQL. Последующая выборка из таблицы Tabl иллюстрирует изменения в базе данных, осуществленные вызовом процедуры InsRec.В большинстве реальных случаев первая попытка скомпилировать программу на
PL/SQL (процедуру, функцию, пакет или триггер) приводит к получению сообщения о наличии в программе ошибок. Чтобы уточнить выявленные в процессе синтаксического анализа ошибки, можно воспользоваться командой PL/SQL SHOW ERRORS. Эта команда показывает ошибки, обнаруженные в процессе выполнения CREATE PROCEDURE, CREATE FUNCTION, CREATE PACKAGE, CREATE PACKAGE BODY И CREATE TRIGGER. Если команда SHOW ERRORS используется без параметров, то возвращаются ошибки последней компилированной процедуры, функции, пакета, тела пакета или триггера.Рассмотрим пример обнаружения и исправления ошибки. В процедуре, представленной в листинге 94, добавим ошибочный оператор, изменяющий значение параметра вида
IN (напомним, что параметры вида IN не должны изменяться). Листинг 96 представляет протокол компиляции и вывод команды SHOW ERRORS.Конечно, выявление синтаксических ошибок — это первый, самый простой шаг в процессе отладки процедур и сЬункций. Обсуждение методов и средств отладки семантики программ и комплексной отладки выходит за рамки этой книги.
Напомним, что функции
PL/SQL отличаются от процедур тем, что возвращают в вызывающую среду значение параметра.Оператор определения функции
Oracle использует следующий синтаксис:Ключевое слово
OR REPLACE указывает на безусловное замещение старого текста функции. Если ключевое слово OR REPLACE не указано, и функция определена, то замещения старого значения кода функции не происходит, и возвращается сообщение об ошибке.Описание типа данных для возвращаемого функцией значения требуется обязательно.
При описании переменных функции также, как и при описании переменных процедуры, не используется ключевое слово
DECLARE. Блок определения данных начинается сразу после ключевого слова IS (или AS, по выбору пользователя).Рассмотрим пример создания функции, которая вычисляет сумму значений атрибутов таких, что дата попадает в заданный параметрами функции интервал. Пусть таблица сформирована предложением:
Если характер использования приложений изменился, то для освобождения ресурсов базы данных может потребоваться уничтожить процедуру или функцию. В собственной схеме пользователю не требуются дополнительные привилегии для уничтожения процедуры или функции. Для уничтожения процедуры или функции в схеме другого пользователя необходимо наличие привилегии
DROP ANY PROCEDURE.Для уничтожения процедуры
Oracle использует следующий синтаксис:Пакета
PL/SQLПроцедуры, функции и глобальные переменные, объединенные общим функциональным замыслом, часто оформляют в виде единого объекта базы данных — пакета. Прием оформления родственных программ в пакет хорошо известен из программистской практики. Особенностью пакетов
PL/SQL является раздельная компиляция и хранение интерфейсной и исполнительной частей пакета. Пакет как объект состоит из двух частей: спецификации пакета и тела пакета. В спецификации пакета хранится описание процедур, функций, глобальных переменных, констант и курсоров, которые доступны для внешних приложений. В теле пакета определяются все процедуры, функции и переменные, включая те, которые не были определены в спецификации пакета. Процедуры, функции и переменные, определенные в теле пакета, но не описанные в его спецификации, являются локальными. Внешние по отношению к пакету приложения не имеют права на использование локальных объектов пакета. Локальныеобъекты предназначены исключительно для использования только процедурами и функциями самого пакета.
Особенностью пакетов
PL/SQL является поддержка перегружаемых функций и процедур. Процедуры или функции могут иметь одинаковое имя, но различный по типу или ” количеству набор аргументов. В момент обращения к кон-кретной процедуре или функции по числу и типу передаваемых аргументов автоматически определяется требуемая про- цедура или функция, которая и исполняется. Поддержка пе- регружаемых процедур, в частности, используется в стандарт- ном пакете DBMS_OUTPUT для единой формы обращения к процедуре PUT_LINE для вывода данных различных типов.Напомним, что для создания пакета пользователь дол-жен иметь привилегию
CREATE PROCEDURE. Создание пакета в схеме другого пользователя требует наличия привилегии CREATE ANY PROCEDURE.Оператор определения интерфейсной части (спецификации) пакета
Oracle использует следующий синтаксис:CREATE [OR REPLACE] PACKAGE
[имя_схемы.}имя_пакета {IS | AS} cneцификация_naкema_Ha_PL/SQLКлючевое слово OR REPLACE указывает на безусловное замещение старого текста спецификации пакета. Если ключевое слово OR REPLACE не указано, и пакет определен в системе, то замещения старого значения спецификации пакета не происходит, и возвращается сообщение об ошибке.
Спецификация пакета начинается с описания констант и переменных. При описании переменных пакета ключевое слово DECLARE не используется. Рассмотрим пример создания спецификации пакета, которая состоит из описания константы, функции и процедуры.
Оператор определения исполнительной части (тела) пакета
Oracle использует следующий синтаксис:CREATE [OR REPLACE] PACKAGE BODY
[имя_схемы.]имя_пакета
{IS | AS}
спецификация _naкema_Ha_PL/S
QLКлючевое слово
OR REPLACE указывает на безусловное замещение старого текста тела пакета. Если ключевое слово OR REPLACE не указано, и пакет определен в системе, то замещения старого значения тела пакета не происходит, и возвращается сообщение об ошибке.Определение тела пакета начинается с описания кон- _ стант и переменных. Константы и переменные, описанные в | спецификации пакета, являются глобальными и в теле пакета 1 повторно не описываются. При описании констант и пе- ременных пакета ключевое слово
DECLARE не используется.Рассмотрим пример создания тела пакета, специфи- кация которого приведена в листинге 99. Пусть функция пакета
MULCONST выполняет умножение аргумента на константу пакета, а процедура AUDITMUL фиксирует факт обращения к функции MULCONST записью в таблицу значения счетчика обращений и текущей даты. Предполагается, чтотаблица
TabAUD с соответствующими типами данных атри-бутов к моменту создания тела пакета создана. Протокол соз-дания тела пакета приведен ниже.
Обратите внимание на то, что при описании функций и процедур пакета в отличие от описаний одиночных функ-ций и процедур оператор
CREATE не используется.Константа или переменная, описанная в спецификации пакета, может быть доступна из пользовательской программы (конечно, если процедуре или функции такой доступ разрешен). Чтобы обратиться к глобальной переменной или константе пакета, нужно указать в качестве префикса имя пакета. Ниже приведен пример, иллюстрирующий возможность доступа к глобальной константе пакета и невозможность доступа к частной переменной пакета. Сравните два примера из листинга 101.
Чтобы вызвать процедуру или функцию пакета, в вызове нужно указать в качестве префикса имя пакета.
В заключение раздела рассмотрим пример использования функции созданного пакета.
При использовании переменных пакета обратите внимание на то, что инициализация локальных переменных пакета происходит при запуске сервера
Oracle. В данном случае, после останова и повторного запуска сервера, счетчик обращений PACAA_COUNT будет установлен в нулевое состояние. Если по смыслу решаемой задачи требуется независимое от остановов сервера приращение счетчика, можно воспользоваться таким объектом, как последовательность.Для освобождения ресурсов сервера может потребоваться уничтожить пакет. В собственной схеме пользователю не требуются дополнительные привилегии для уничтожения пакета. Для уничтожения пакета в схеме другого пользователя необходима привилегия
DROP ANY PROCEDURE.Для уничтожения спецификации пакета и тела пакета
Oracle использует следующий синтаксис:DROP PACKAGE [BODY]
[имя_схемы.}имя_пакетаНеобязательное ключевое слово BODY указывает, что уничтожается только тело пакета. Если ключевое слово BODY опущено, то удаляется и спецификация, и тело пакета.
Параметр имя_пакета задает имя уничтожаемого пакета. Пример уничтожения пакета рассматривается в листинге 103.
Трмггеры базы данных
Триггер базы данных —
это процедура PL/SQL, которая автоматически запускается при возникновении определенных событий, связанных с выполнением операций вставки, удаления или модификации данных таблицы. Событие, управляющее запуском триггера, описывается в виде логических условий. Когда возникает событие, соответствующее условиям триггера, сервер Oracle автоматически запускает триггер, то есть интерпретирует код программы триггера, записанный на языке PL/SQL.Обычно триггеры используют для выполнения сложных проверок ограничений целостности, многоаспектных проверок выполнения правил разграничения доступа и т.п.
Триггер запускается при выполнении одной из трех операций изменения содержимого таблицы:
INSERT, DELETE или UPDATE. Триггер может запускаться и несколькими операторами, но хотя бы один оператор из тройки должен быть обязательно указан в условии запуска триггера. Если перечень операторов, запускающих триггер, включает оператор UPDATE, то для условий срабатывания могут быть указаны конкретные изменяемые столбцы.Код триггера может выполняться либо до, либо после тех операторов, которые инициировали запуск триггера. Например, если триггер запускается перед выполнением операции модификации данных для проверки полномочий пользователя на право выполнения операции, то, конечно, нужно использовать триггер с запуском до выполнения операции (с ключевым словом
BEFORE). Если триггер применяется для формирования данных для аудиторской записи, то разумно использовать триггер с запуском после выполнения операции (с ключевым словом AFTER).Код триггера может быть ассоциирован либо с операцией над таблицей в целом, либо с каждой строкой, над которой выполняется операция. В зависимости от этого триггеры подразделяют на операторные триггеры и строчные триггеры. Операторные триггеры обычно используют для проверки правил разграничения доступа, оперирующих таблицей в целом, а строчные триггеры часто используют для проверки ограничений целостности при вставке строк. Условие запуска строчного триггера может быть уточнено дополнительным логическим условием.
Чтобы создать триггер, необходимо иметь системные привилегии
CREATE TRIGGER. Для создания триггера в схеме, отличной от текущей схемы пользователя, требуются системные привилегии CREATE ANY TRIGGER.Оператор определения триггера
Oracle использует следующий синтаксис:Ключевое слово
OR REPLACE указывает на безусловное замещение старого текста триггера. Если ключевое слово OR REPLACE не указано, и триггер определен в системе, тозамещения старого значения триггера не происходит, и возвращается сообщение об ошибке.
Ключевые слова
BEFORE или AFTER указывают на выполнение кода триггера либо до, либо, соответственно, после операторов манипулирования данными, инициировавших запуск триггера.Ключевые слова
INSERT, DELETE или UPDATE определяют конкретный оператор, запускающий триггер. Для оператора UPDATE могут быть указаны столбцы, изменение которых запускает триггер. Если конкретные столбцы не указаны, то триггер запускает изменение любого столбца. Необязательное ключевое слово OR присоединяет дополнительный оператор, запускающий триггер.Ключевое слово
ON задает имя таблицы или представления, ассоциированного с триггером.Необязательное ключевое слово
ON EACH ROW определяет триггер как строчный.Необязательное ключевое слово
WHEN задает дополнительное логическое условие, сужающее область действия триггера.Прежде чем перейти к примеру построения триггера, приведем некоторые дополнительные сведения об обработке исключительных ситуаций в
Oracle. Для подключения к механизму обработки ошибок пользовательских точек входа применяется процедура RAISE_APPLICATION_ERROR. С ее помощью можно обработать до 1000 определяемых пользователем ошибок с номерами в диапазоне от -20000 до -20999. Вызов процедуры RAISE_APPLICATION_ERROR приводит к генерации исключительной ситуации и завершению выполнения вызвавшей процедуру программы (сравните с рассмотренным выше оператором PL/SQL RAISE). При этом в среду, вызвавшую программу, возвращается номер и текстовое сообщение о типе ошибки.Рассмотрим пример триггера, который выполняется, если значение вводимого атрибута “слишком уклоняется” от среднего значения для текущего состояния таблицы. В роли меры “слишком большого уклонения” выберем широко применяемое в инженерной практике правило “трех сигм”. Пусть таблица
Tabl сформирована предложениями:Протокол создания триггера представлен в листинге 104. При срабатывании триггера предусмотрена генерация стандартной обработки ошибки, которой присваивается номер 20002 с соответствующим диагностирующим сообщением. Обратите внимание на предопределенную переменную
:new.Atl, содержащую (по ее смыслу) вводимое значение атрибута Atl.Работу механизма триггера проиллюстрируем на примере. При вводе значения, достаточно близкого к среднему (в данном случае 4), триггер не запускается, и “ничего не происходит”. При вводе значения атрибута, равного 7, соответствующая статистика указывает на большое уклонение, происходит срабатывание триггера, и новая строка не включается. Представленная в листинге 105 операция выборки подтверждает ожидаемое изменение в таблице.
Следующий пример иллюстрирует возможность обработки исключительной ситуации средствами пользовательской программы. В данном случае создается триггер, который при превышении заданного порога уклонения вводимого значения атрибута выводит диагностическое сообщение. При этом данные в таблицу вводятся.
При вводе значения атрибута, равного 7, соответствующая статистика указывает на большое уклонение, происходит срабатывание триггера
TRIG_TB2. Выводится диагностическое сообщение, и вводится новая строка. Представленная в листинге 107 операция выборки подтверждает ожидаемое изменение в таблице.В отличие от процедур, функций и пакетов сервер
Oracle не хранит код триггера в виде скомпилированного блока PL/SQL. При первом запуске триггера его код считывается из словаря данных, компилируется, и скомпилированная версия сохраняется в области SGA. Поэтому для часто используемых триггеров целесообразно код, отвечающий за процедурную часть триггера, включать в хранимую процедуру, а в теле триггера оставлять только запись условий запуска и вызовы соответствующих процедур и функций.СРЕДСТВА
разграничения ДОСТУПА
Современный уровень развития распределенной обработки данных характеризуется размещением логически единой информационной базы в сетевой среде, объединяющей различные компьютеры, асинхронной многопользовательской обработкой и развитыми средствами разграничения доступа. При этом
реальная сложность организации управления доступом должна быть скрыта от пользователя. Логическое пространство баз данных должно выглядеть для пользователя единым, то есть как если бы вся база располагалась на его локальном компьютере.Высокая степень безопасности данных должна быть обеспечена без уменьшения функциональности СУБД и практически без усложнения работы пользователя в системе. Механизм обеспечения безопасности данных должен обладать гибкостью и удобством администрирования системы.
Одной из неотъемлемых функции любого сервера базы данных промышленного уровня является обеспечение защиты информации, управляемой СУБД. Для обеспечения защиты в
Oracle используется система избирательного управления доступом. Это означает, что администратор баз данных создает пользователей базы данных и управляет их полномочиями на выполнение конкретных операций с конкретными объектами. Ниже описываются различные средства разграничения доступа, реализованные в Oracle.Задача распознавания пользователей и разграничения доступа между различными пользователями системы решается как на уровне средств операционной системы, так и на уровне средств СУБД. Стандартным подходом, характерным для обоих уровней, является поддержка деятельности администраторов данных, которые создают (регистрируют) пользователей в системе и управляют назначением привилегий. С другой стороны, всякая система должна поддерживать естественный порядок, при котором пользователь, создающий некоторый объект, имеет право на управление доступом к этому объекту. Обычное решение состоит в реализации концепции привилегии или права доступа. Привилегия — это некоторый поддерживаемый системой признак, который определяет, может ли конкретный пользователь выполнить конкретную операцию. Имеется несколько типов привилегий, соответствующих нескольким типам операций.
В языке
SQL — базовом языке промышленных СУБД — привилегии определяются и отменяются двумя командами:GRANT
(предоставить привилегию) и REVOKE (отменить при-вилегию).Чтобы предоставить кому-либо доступ к базе данных
Oracle, администратор должен обеспечить глобальную доступность базы данных, создать в базе данных соответствую-щего пользователя (определив его точку входа или имя) и предоставить пользователю определенные полномочия по доступу к объектам базы. Обеспечение правомерности доступа пользователя реализуется средствами аутентификации системы, простейшим из которых является использование пароля, подтверждающего подлинность пользователя. Для выполнения любых операций с базой данных пользователь должен прежде всего ввести имя и подтвердить свою подлинность паролем. Обычно администратор выбирает осмысленные имена пользователей (например, объединяя имя и фамилию) и не несущие никакого смысла пароли. Такой выбор паролей повышает стойкость процедуры аутентификации.
В
Oracle реализована поддержка принципа “безопасности по умолчанию” (принципа “наименьших привилегий”). Его суть состоит в том, что пользователь может получить доступ к объекту базы данных (например, таблице или представлению) или выполнить определенные действия в системе (например, создать нового пользователя), только если это явно разрешено.Концепция обеспечения безопасности, принятая в
Oracle, предусматривает решение следующих задач:• контроль операций, производимых над объектами системы. Доступность базы данных
Верхний уровень защиты информации базы данных состоит в контроле принципиальной возможности доступа к данным. Прежде чем начнется работа с базой данных, администратор должен выполнить некоторые действия по инициализации сервера и подключению его к конкретной базе данных. Никакой пользователь не может использовать данные, пока обладающий соответствующими правами администратор не запустит сервер и не сделает базу данных доступной. В терминологии
Oracle администратор должен запустить экземпляр (instance) сервера базы данных. Экземпляр — это набор процессов операционной системы, ассоциированный с системой буферов, размещенных в оперативной памяти, которые совместно обеспечивают многопользовательский доступ к базе данных Oracle. В ходе запуска экземпляра базы данных Oracle открывает определенные файлы операционной системы, необходимые для того, чтобы сделать базу данных доступной.Для большинства Unix-систем запуск экземпляра может быть выполнен утилитой
sqldba. Приведем пример запуска экземпляра (oracle@sun-server$ — стандартная подсказка системы).Каждый раз, когда администратор запускает новый экземпляр
Oracle, для настройки конфигурации нового экземпляра считывается файл параметров инициализации. Запущенный экземпляр получает уникальный идентификатор — sid. После запуска администратором экземпляра базы данных и ее открытия пользователи могут присоединяться к базе данных, но при этом пользователь должен знать соответствующий идентификатор экземпляра. Обычно информация об идентификаторе экземпляра описывается в файле конфигурации SQL*Net, и пользователь использует ее косвенно через указание строки подсоединения.Завершая работу с базой данных, администратор раз-монтирует ее, отсоединяя от экземпляра, а затем останавливает экземпляр. В процессе останова сервера базы данных
Oracle завершает запущенные процессы и закрывает файлы операционной системы, в которых хранится информация базы данных.Для большинства Unix-систем останов экземпляра может быть выполнен утилитой
slqdba. Приведем пример останова экземпляра (oracle@ sun-server$ — стандартная подсказка системы).Естественно, что перечень администраторов
Oracle, имеющих право запускать экземпляры сервера баз данных, изменять состояние баз данных и их табличных областей, должен быть продуман, как и технология генерации и смены паролей.В открытой базе данных администратор может управлять доступностью информации, используя механизм табличных областей. Пользователи могут работать только с объектами
Oracle, которые размещены в доступной табличной области. Переводя табличную область в автономное состояние, администратор делает невозможным использование данных из табличной области для всех пользователей.Перевод табличной области в автономное состояние (то есть недоступное для пользователей) выполняется командой
ALTER TABLESPACE. Той же командой, естественно с другими параметрами, выполняется обратная операция, переводящая табличную область в состояние, когда пользователи могут обращаться к данным, размещенным в ней.Обычно перевод табличной области в автономное состояние используется для резервного копирования данных. В то же время, с позиций обеспечения безопасности данных, управление доступностью табличных областей
Oracle может оказаться полезным для решения задач разграничения доступа. Например, если таблицы некоторого приложения находятся в конкретной табличной области, то администратор может эффективно запретить работу приложения, переведя соответствующую табличную область в автономное состояние. Более конкретно. Пусть табличная область содержит данные, доступ к которым требуется достаточно редко, но данные важные (архивные данные). Администратор может эффективно запрещать доступ к этим данным, поддерживая соответствующую табличную область в автономном состоянии. При получении распоряжения о проведении обработки данных администратор переводит табличную область в оперативное состояние, и пользователи могут выполнять доступные им приложения по обработке данных из табличной области.Пример, приведенный в листинге 110, иллюстрирует перевод в автономное и оперативное состояние табличной области
APP_DATA. Предполагается, что команды управления табличной областью выполняются пользователем, обладающим необходимыми привилегиями. Попытка выполнить выборку данных из таблицы Tab 2, размещенной в табличной области APP_DATA, приводит к сообщению о невозможности выполнить операцию. После перевода табличной области в оперативный режим операция выборки выполняется.Каждый пользователь в среде
Oracle должен иметь специальный идентификатор: имя или точку входа. Создание нового идентификатора осуществляется уполномоченным пользователем или администратором выполнением предложения CREATE USER (подробно описанного выше).С позиций системы, источники, предъявившие идентификатор, неразличимы. Хотя пользователем может быть как реальный человек, сидящий за терминалом, так и прикладной процесс, для системы оба объекта тождественны. Вновь созданный пользователь не имеет никаких прав на выполнение операций с объектами системы. Например, при попытке получить доступ к системе по команде
CONNECT система отвергнет попытку доступа, выдав сообщение об отсутствие необходимых прав доступа у пользователя. Для успешной регистрации в системе администратор должен предоставить пользователю (минимальное) право на образование сеанса, выполнив предложение:GRANT CREATE SESSION TO
имяпользователя;Протокол взаимодействия с системой Oracle представлен в листинге 111.
Когда пользователь пытается подключиться к базе данных, сервер
Oracle обеспечивает выполнение стандартнойпроцедуры подтверждения подлинности или аутентификации. Обычно для подтверждения подлинности пользователь должен ввести пароль. В
Oracle поддерживается также вариант вынесения процедуры аутентификации на уровень операционной системы. В этом случае сервер определяет идентификатор пользователя из информации сеанса его работы с операционной системой и на основе этой информации разрешает или запрещает пользователю подключение.