699
.pdfSELECT ABS(100) XI, ABS(-100) Х2, ABS(-100.2) Х3
FROM DUAL
Функция CEIL возвращает наименьшее целое, большее или равное переданному в качестве параметра числу n. Например:
SELECT CEIL(100) X1, CEIL(-IOO) Х2, CEIL(100.2) Х3, CEIL(-100.2) Х4 FROM DUAL
Функция FLOOR возвращает наибольшее целое, меньшее или равное переданному в качестве параметра числу n. Например:
SELECT FL00R(100.22) X1, FL00R(- 100.22) Х2, FL00R(100.99) ХЗ, FL00R(100.01) Х4 FROM DUAL
Функция TRUNC возвращает число n, усеченное до m знаков после десятичной точки. Параметр m может не указываться – в этом случае n усекается до целого.
SELECT TRUNC(100.25678) X1, TRUNC(- 100.25678) Х2, TRUNC(100.99) ХЗ, TRUNC(100.25678, 2) Х4 FROM DUAL
Ознакомиться со всеми сотнями функций можно в руководствах программиста SQL, например в [23].
2.6.SQL-операторы определения данных
(Data Definition Language, DDL)
SQL-DDL (Data Definition Language) – язык определе-
ния структур и ограничений целостности баз данных. Сюда относятся команды создания и удаления баз данных; создания, изменения и удаления таблиц; управления пользователями и т.д.
101
Язык определения данных используется для создания и изменения структуры базы данных и ее составных частей – таблиц, индексов, представлений (виртуальных таблиц), а также триггеров и сохраненных процедур.
Операторы определения данных (Data Definition Language, DDL):
–CREATE создает объект БД (саму базу, таблицу, представление, пользователя и т.д.),
–ALTER изменяет объект,
–DROP удаляет объект.
Основными командами являются [23]: CREATE DATABASE (создать базу данных) CREATE TABLE (создать таблицу)
CREATE VIEW (создать виртуальную таблицу) CREATE INDEX (создать индекс)
CREATE TRIGGER (создать триггер)
CREATE PROCEDURE (создатьсохраненнуюпроцедуру) ALTER DATABASE (модифицировать базу данных) ALTER TABLE (модифицировать таблицу)
ALTER VIEW (модифицировать виртуальную таблицу) ALTER INDEX (модифицировать индекс)
ALTER TRIGGER (модифицировать триггер)
ALTER PROCEDURE (модифицировать сохраненную процедуру)
DROP DATABASE (удалить базу данных) DROP TABLE (удалить таблицу)
DROP VIEW (удалить виртуальную таблицу) DROP INDEX (удалить индекс)
DROP TRIGGER (удалить триггер)
DROP PROCEDURE (удалить сохраненную процедуру)
102
Язык управления данными используется для управления правами доступа к данным и выполнением процедур в многопользовательской среде. Более точно его можно назвать «язык управления доступом». Он состоит из двух основных команд [23]:
GRANT (дать права)
REVOKE (забрать права)
2.7. Средства определения схемы. Схема пользователя базы данных
Средства определения схемы БД в стандарте SQL/89 относятся к наиболее слабым и допускающим различную интерпретацию частям стандарта.
Всоответствии с правилами SQL/89 каждая таблица данной БД имеет простое и квалифицированное (уточненное) имена. В качестве квалификатора имени выступает «идентификатор полномочий» таблицы, который обычно в реализациях совпадает с именем некоторого пользователя. Квалифицированное имя таблицы имеет вид:
<идентификатор полномочий>. <простое
имя>
Воператоре определения схемы содержится иденти-
фикатор полномочий и список элементов схемы, каждый из которых может быть определением таблицы, определением представления (view) или определением привилегий. Каждое из этих определений представляется отдельным оператором SQL/89, но все они, как уже говорилось, должны быть встроены в оператор определения схемы.
В различных СУБД процедура создания баз данных обычно закрепляется только за администратором баз данных. В однопользовательских системах принимаемая по умолчанию база данных может быть сформирована непосредственно в процессе установки и настройки самой
103
СУБД. Стандарт SQL не определяет, как должны создаваться базы данных, поэтому в каждом из диалектов языка SQL обычно используется свой подход. В соответствии со стандартом SQL таблицы и другие объекты базы данных существуют в некоторой среде. Помимо этого каждая среда состоит из одного или более каталогов, а каждый каталог – из набора схем. Схема представляет собой поименованную коллекцию объектов базы данных, некоторым образом связанных друг с другом (все объекты в базе данных должны быть описаны в той или иной схеме). Объектами схемы могут быть таблицы, представления, домены, утверждения, сопоставления, толкования и наборы символов. Все они имеют одного и того же владельца и множество общих значений, принимаемых по умолчанию.
Стандарт SQL оставляет за разработчиками СУБД право выбора конкретного механизма создания и уничтожения каталогов, однако механизм создания и удаления схем регламентируется посредством операторов CREATE SCHEMA и DROP SCHEMA. В стандарте также указано, что в рамках оператора создания схемы должна существовать возможность определения диапазона привилегий, доступных пользователям создаваемой схемы. Однако конкретные способы определения подобных привилегий в разных СУБД различаются.
В настоящее время операторы CREATE SCHEMA и DROP SCHEMA реализованы в очень немногих СУБД. В других реализациях, например в СУБД MS SQL Server, используется оператор CREATE DATABASE [29].
Схема пользователя базы данных Oracle. CREATE USER
Схема пользователя – логическая совокупность объектов БД, например таблиц, принадлежащих определенному владельцу.
104
Каждая база Oracle с момента своего создания содержит две схемы (следует отметить, что термины «учетная запись», «схема» и «пользователь» обозначают в Oracle одно и то же) – SYS и SYSTEM. Схема SYS содержит все системные объекты – внутренние таблицы базы данных, пакеты, процедуры. Кроме того, пользователь SYS является владельцем словаря данных. Словарь данных Oracle – это совокупность таблиц и представлений, позволяющих получить любую информацию о структуре базы данных, ее настройках и состоянии при помощи стандартных SQLзапросов. Учетная запись SYS является также учетной записью администратора базы данных с неограниченными полномочиями. Учетная запись SYSTEM предоставляет доступ ко всем объектам базы и наделена ролью DBA. При работе с учетными записями SYS и SYSTEM необходимо соблюдать ряд правил:
1.Разработка в базе данных не должна вестись от имени пользователей SYS и SYSTEM.
2.Нельзя удалять или изменять системные объекты, размещенные в этих схемах, – подобные действия могут привести к непредсказуемым последствиям.
3.У учетных записей SYS и SYSTEM должны быть заданы сложные, устойчивые к подбору пароли длиной не менее 6–8 символов. В случае необходимости можно вообще запретить регистрацию пользователей под учетными записями SYS и SYSTEM.
Роли в Oracle – это именованные группы привилегий. После формирования базы данных в ней создается несколько стандартных ролей:
1.Роль CONNECT – содержит только одну привилегию CREATE SESSION, позволяющую создавать соединение с базой.
2.Роль DBA – полный набор привилегий, необходимых администратору базы.
105
3.Роль RESOURCE – базовый набор привилегий, необходимых разработчику.
4.Роль DELETE_CATALOG_ROLE – привилегии для удаления информации из таблицы аудита.
5.Роль SELECT_CATALOG_ROLE – привилегия для чтения информации из таблиц аудита.
6.Роль EXP_FULL_DATABASE – необходима пользователю, из-под учетной записи которого будет производиться полный экспорт базы.
7.Роль IMP_FULL_DATABASE – необходима пользователю, из-под учетной записи которого будет производиться полный импорт базы [28].
Для создания схемы пользователя БД, используемой для доступа к базе данных и работы с ней, предназначена команда CREATE USER.
Для схемы пользователя (CREATE USER) при ее создании могут быть указаны следующие свойства:
– имя области данных в базе данных, используемой по умолчанию при работе данного пользователя с базой данных;
– имя области данных в базе данных, используемой для хранения временных данных при работе данного пользователя с базой данных;
– размеры области данных, выделенной для работы с базой данных данному пользователю;
– профили пользователя, определяющие ограничения на использование ресурсов базы данных.
Условия, необходимые для использования команды
(CREATE USER):
• Пользователь, создающий другого пользователя, должен иметь системную привилегию CREATE USER.
• Для указания имени области данных, используемой для хранения временных данных или используемой по умолчанию, необходимо, чтобы уровень в СУБД создаю-
106
щего пользователя был старше уровня создания области данных.
• Для назначения создаваемой схеме некоторого профиля пользователя необходимо, чтобы уровень в СУБД создающего пользователя был старше уровня создания данного профиля пользователя.
USER – является именем пользователя (USER), который будет создан.
IDENTIFIED – определяет способ доступа к Oracle:
–BY password – доступ определяется по вводимому паролю (password); пароль должен соответствовать правилам именования объектов в СУБД;
–EXTERNALLY – доступ определяется именем операционной системы устанавливаемого соединения.
DEFAULT TABLESPACE – устанавливает имя области данных, в которой по умолчанию будут создаваться объекты пользователя. Если имя области данных не указано, то объекты пользователя по умолчанию создаются в области данных SYSTEM.
TEMPORARY TABLESPACE – устанавливает имя об-
ласти данных для временных сегментов пользователя. Если имя области данных не указано, то временные сегменты создаются в области данных SYSTEM.
QUOTA – позволяет пользователю использовать область (области) данных, а также указать (необязательно) размер используемого пространства в байтах, килобайтах (К) или мегабайтах (М). Возможно указание различного значения QUOTА для нескольких областей данных. Ключевое слово UNLIMITED используется при предоставлении неограниченного права на использование областей данных.
PROFILE – определяет профиль пользователя, устанавливающий ограничения на использование ресурсов базы данных. По умолчанию пользователю назначается профиль
DEFAULT.
107
Чтобы пользователь мог выполнять некоторые операции по работе с базой данных, раздел привилегий пользователя должен содержать записи, которые разрешают ему выполнение соответствующих операций. В данном разделе размещаются также записи об операциях, определяемых ролями, установленными для данного пользователя. При создании пользователя этот раздел является пустым, поэтому после создания пользователя необходимо предоставить ему привилегию на соединение с базой данных.
Oracle CREATE USER Пример 1 CREATE USER st IDENTIFIED BY st DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp
QUOTA 150K ON users QUOTA UNLIMITED ON temp;
Созданный пользователь обладает следующими характеристиками:
–имя – st;
–пароль – st;
–область данных – users;
–размер области данных – 150 килобайт;
–область временных данных – temp;
–размер области временных данных – неограниченное использование.
2.8. Метаданные в Oracle
Словарь метаданных содержит информацию об интересующих объектах и структурах. В табл. 1 перечислены многие из представлений и указано их назначение. Табли-
цы USER_SOURCE и USER_TRIGGERS полезны, когда требуется узнать, исходные тексты каких процедур и триггеров хранятся в настоящий момент в базе данных [3].
108
|
Таблица 1 |
|
Метаданные в СУБД Oracle [3] |
||
|
|
|
Имя таблицы |
Содержимое |
|
DICT |
Метаданные, описывающие сло- |
|
варь данных |
||
|
||
|
Список таблиц, представлений, |
|
USER_CATALOG |
последовательностей и других |
|
структур, принадлежащих пользо- |
||
|
||
|
вателю |
|
USER_TABLES |
Структуры таблиц пользователя |
|
|
Потомок таблицы USER TABLES. |
|
USER_TAB_COLUMNS |
Содержит данные о столбцах таб- |
|
|
лиц. Синонимом является COLS |
|
USER_VIEW |
Пользовательские представления |
|
USER_ CONSTRAINTS |
Пользовательские ограничения |
|
|
|
|
|
Потомок таблицы |
|
USER_CONS_COLUMNS |
USER_CONSTRAINTS. Содержит |
|
столбцы, на которые наложены |
||
|
||
|
ограничения |
|
|
Метаданные, описывающие триг- |
|
|
геры. Есть смысл запрашивать |
|
|
столбцы Trigger Name, Trigger |
|
USER_TRIGGERS |
Type и Trigger Event. Предупреж- |
|
|
дение: Trigger Body в действитель- |
|
|
ности не содержит исходного кода |
|
|
триггера |
|
|
Исходные тексты. Например, для |
|
|
получения текста процедуры |
|
USER_SOURCE |
MYTRIGGER: SELECT Text |
|
|
FROM USER_SOURCE WHERE |
|
|
Name = 'MYTRIGGER' AND |
|
|
Type = 'PROCEDURE' |
CTX> COLUMN object_name FORMAT A30 CTX> COLUMN object_type FORMAT A30 CTX> COLUMN segment_name FORMAT A30 CTX> COLUMN segment_type FORMAT A30
109
|
CTX> SELECT object_name, object_type |
||||||
FROM user_objects ORDER BY 2, 1; |
|
|
|
||||
|
CTX> |
SELECT |
segment_name, |
||||
segment_type |
FROM |
user_segments |
ORDER |
BY |
|||
2, |
1; |
|
|
|
|
|
|
|
Результат: |
|
|
|
|
|
|
|
OBJECT_NAME OBJECT_TYPE |
|
|
------ |
|||
|
------------------------------ |
||||||
|
--------------DOCS_VC2DOC_IDX INDEX |
|
|||||
|
DR$DOCS_VC2DOC_IDX$X INDEX |
|
|
|
|||
|
SYS_IOT_TOP_51619 INDEX |
|
|
|
|
||
|
SYS_IOT_TOP_51624 INDEX |
|
|
|
|
||
|
SYS_LOB0000051616C00006$$ LOB |
|
|
||||
|
SYS_LOB0000051621C00002$$ LOB |
|
|
||||
|
DOCS TABLE |
|
|
|
|
|
|
|
DR$DOCS_VC2DOC_IDX$I TABLE |
|
|
|
|||
|
DR$DOCS_VC2DOC_IDX$K TABLE |
|
|
|
|||
|
DR$DOCS_VC2DOC_IDX$N TABLE |
|
|
|
|||
|
DR$DOCS_VC2DOC_IDX$R TABLE |
|
|
|
|||
|
CTX> |
SELECT |
segment_name, |
||||
segment_type |
FROM |
user_segments |
ORDER |
BY |
|||
2, |
1; |
|
|
|
|
|
|
|
Результат: |
|
|
|
|
|
|
|
SEGMENT_NAME SEGMENT_TYPE |
|
------ |
||||
|
------------------------------ |
--------------
DR$DOCS_VC2DOC_IDX$X INDEX SYS_IOT_TOP_51619 INDEX SYS_IOT_TOP_51624 INDEX SYS_IL0000051616C00006$$ LOBINDEX SYS_IL0000051621C00002$$ LOBINDEX SYS_LOB0000051616C00006$$ LOBSEGMENT SYS_LOB0000051621C00002$$ LOBSEGMENT DOCS TABLE
110