Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методическое пособие 341

.pdf
Скачиваний:
3
Добавлен:
30.04.2022
Размер:
932.4 Кб
Скачать

Установка уровня изоляции в Microsoft Query Analyzer выполняется командой:

SET TRANSACTION ISOLATION LEVEL уровень_изоляции уровень_изоляции может принимать значения: READ UNCOMMITTED / READ COMMITTED / REPEATABLE READ / SERIALIZABLE

Команду, выполняющую изменение уровня изоляции, следует разместить первой в скрипте.

В процессе выполнения задания в каждом из окон следует выделять только строчки, присутствующие на данном шаге, и нажимать на кнопку «выполнить». В процессе работы после нажатия на эту кнопку выполнение дальнейших команд может быть заблокировано (становится активна только кнопка «остановить текущую операцию»). В этом случае результат выполнения зависит от параллельной транзакции, и может быть вычислен только при её завершении

(COMMIT/ROLLBACK).

Инструментальные средства DB2

Для выполнения сценариев проверки изолированности следует запустить два сеанса интерактивного SQL. Можно запустить в два сеанса DB2 Command Center, однако, Command Center - приложение довольно ресурсоемкое, и его выполнение в двух экземплярах на компьютере недостаточной мощности может оказаться затруднительным, поэтому мы предлагаем во втором сеансе запустить DB2 Command Line Processor.

Command Line Processor - приложение для интерактивного выполнения операторов SQL из командной строки.

По умолчанию в средах интерактивного SQL DB2 режим AUTOCOMMIT включен. Чтобы его отключить следует ввести команду:

UPDATE COMMAND OPTIONS USING c OFF

9

Установка уровня изоляции в DB2 выполняется командой:

CHANGE ISOLATION TO уровень_изоляции

уровень_изоляции может принимать значения: UR / CS / RS / RR

Изменение уровня изоляции может выполняться только при отсутствии соединения с базой данных. Соединение с базой данных выполняется командой:

CONNECT TO имя базы разрыв соединения - оператором

CONNECT RESET

Инструментальные средства Oracle

По умолчанию в среде SQL*Plus режим AUTOCOMMIT выключен.

Установка уровня изоляции в Oracle выполняется командой:

ALTER SESSION SET ISOLATION_LEVEL =

уровень_изоляции

уровень_изоляции может принимать значения READ COMMITTED / SERIALIZABLE

Контрольные вопросы

1.В чем различия имени входа (логина) и пользователя?

2.Рассказать о ролях уровня сервера.

3.Рассказать о ролях уровня базы данных.

4.Можно ли создать свою роль уровня сервера?

5.Для чего нужны роли?

6.Что такое схема?

10

7.Рассказать о роли уровня базы данных public.

8.Рассказать про директивы GRANT, DENY и

REVOKE.

9.Как разрешить пользователю предоставлять разрешение другим пользователям?

10.Как добавить нового пользователя в текущую

базу данных?

11.Как создать новый логин?

Дополнительные вопросы

1.Исправить ошибки в обязательной части.

2.Сменить владельца базы данных.

3.Сменить пароль для имени входа.

4.Сменить базу данных по умолчанию для имени

входа.

5.Определить роль с заданными правами.

11

Лабораторная работа № 7 Создание и использование триггеров

Цель работы

Освоение способов создания триггеров в среде Microsoft

SQL Server.

Темы для предварительной проработки

Функции триггеров.

Синтаксис создания триггеров

Использование триггеров в целях аудита

Подготовка к работе

Подготовить план создания триггера для контроля ограничений целостности, заданных в Вашем варианте индивидуального задания. Использовать диалекты как Oracle, так и DB2.

Сформулировать 2-4 запроса на добавление / изменение / удаление данных в таблицу, для которой будет назначен триггер. Составить SQL-скрипты для выполнения этих запросов.

Выполнение работы

Запустить Microsoft Enterprise Manager и

Microsoft Query Analyzer, соединиться с локальной базой данных.

В среде Microsoft Enterprise Manager создать триггер контроля ограничений целостности. В среде Microsoft Query Analyzer выполнить скрипты, подготовленные для проверки триггера и сохранить протокол их выполнения.

Вывести содержимое таблиц, показывающее действие триггеров.

Закончить работу с Microsoft SQL Server.

12

Содержание отчета

Протокол работы в среде Microsoft Query

Analyzer.

Краткие выводы о навыках, приобретенных в ходе выполнения работы.

Теор етические сведения

Триггеры - средство, обеспечивающее автоматическое выполнение некоторых действий при каждой модификации таблицы.

Триггер характеризуется следующими классификационными признаками, которые должны быть заданы при его создании:

условие активизации - действие над таблицей, которое вызывает запуск триггера - такими действиями являются операции INSERT, DELETE, UPDATE;

время активизации - выполнение триггера до или после выполнения операции над таблицей; область действия - выполнение триггера либо один раз

для каждого оператора модификации таблицы, либо для каждой строки, изменяемой / удаляемой / вставляемой в таблицу.

Таким образом, для каждой таблицы может быть создано до 12 типов триггеров. На самом деле, триггеров может быть и больше, так как может быть создано и несколько триггеров одного типа. В таком случае однотипные триггеры выполняются в порядке их создания.

При обеспечении в общем-то одинаковой функциональности, синтаксис и некоторые детали применения триггеров различаются в DB2, Oracle и MSSQL, поэтому мы рассматриваем их раздельно.

Триггеры: DB2

Триггер создается оператором языка SQL CREATE TRIGGER:

13

NO CASCADE BEFORE / AFTER - определяет время активизации триггера. NO CASCADE указывает, что если действие триггера включает в себя модификацию других таблиц, для которых в свою очередь определены триггеры, то эти вторичные триггеры не выполняются. (В текущей версии эта опция избыточна, так как в BEFORE-триггере не допускаются операторы модификации).

INSERT/ DELETE / UPDATE - условие активизации,

для UPDATE триггер может запускаться при обновлении только заданных столбцов.

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

REFERENCING - определяет коррелированные имена, по которым действие триггера может обращаться к столбцам

14

изменяемых строк (промежуточным переменным) и к изменяемой таблице:

OLD - имя, представляющее изменяемую строку до изменения ( по умолчанию - old);

NEW - имя, представляющее изменяемую строку до изменения ( по умолчанию - new);

OLD_TABLE - имя, представляющее изменяемую таблицу до изменения;

NEW_TABLE - имя, представляющее изменяемую таблицу до изменения.

Существует довольно большое число правил, регламентирующих применение коррелированных имен (см.

DB2 SQL Reference)

FOR EACH ROW / STATEMENT - область действия триггера.

MODE DB2SQL - обязательный параметр, не имеющий вариаций в текущих версиях.

WHEN - определяет условие, при котором выполняются последующие операторы. Условие здесь - такое же условие, какое употребляется во фразе WHERE запроса.

Действия триггера могут включать в себя следующие SQL-операторы:

для BEFORE-триггера: SELECT, SET, SIGNAL;

для AFTER-

триггера: SELECT, SET, SIGNAL, INSERT, DELETE, UP DATE.

Если в действиях триггера выполняются несколько операторов, то они берутся в операторные скобки BEGIN ATOMIC ... END и разделяются символом "точка с запятой".

Оператор SET применяется только в триггерах и устанавливает значения промежуточных переменных:

15

Выражение в операторе SET подчиняется правилам, описанным для скалярного выражения в синтаксисе запроса. Выражение не может содержать агрегатных функций, кроме тех случаев, когда они употребляются в скалярном подзапросе. В нем могут употребляться промежуточные переменные NEW и OLD.

Обратите внимание на то, что в составе выражения присваивания можно применять CASE-выражения - это создает возможность выполнять присваивание по некоторой логике.

Оператор SIGNAL применяется только в триггерах и вызывает аварийное завершение триггера и оператора, его вызвавшего:

Строковая константа 1 содержит значение, устанавливаемое в SQLSTATE. Ее размер должен быть 5 символов, в ней допускаются только цифры и большие латинские буквы. Обычно значения, формируемые программистом, начинаются с символа '7'.

Триггеры: Oracle

Триггер создается оператором языка SQL CREATE TRIGGER:

16

Отличия триггера Oracle от триггера DB2 (многие из них видны из самого синтаксиса оператора) состоят в следующем:

Оператор CREATE позволяет заменить триггер (в DB2 для этого нужно уничтожить триггер и создать его заново).

Триггер можно создавать и для представления (это связано прежде всего с более широкими возможностями изменения представлений в Oracle).

Введено новое условие активизации INSTEAD OF (триггер выполняется вместо оператора); оно применяется только для представлений и позволяет изменять базовые таблицы вместо неизменяемого представления.

Для триггера могут быть назначены несколько условий активизации (через операцию OR). В этом случае действие триггера может "узнать" по какому условию запущен триггер, проверяя значения предикатов INSERTING, DELETEING, UPDATING.

В условии фразы WHEN не допускаются запросы.

17

Собственно выполняемые действия триггера задаются в виде блока на языке PL/SQL.

Триггер, выполняемый после (AFTER) выполнения оператора, модифицирующего некоторую таблицу, не может содержать операторы выборки (SELECT) из этой таблицы.

Триггеры: MSSQL

Триггер создается оператором языка SQL CREATE TRIGGER (приведен его минимальный синтаксис):

CREATE TRIGGER имя_триггера

ON { таблица | вид }

{

{{ FOR | AFTER | INSTEAD OF } { [DELETE] [,] [INSERT]

[,][UPDATE] }

AS

[ { IF UPDATE ( столбец )

[ { AND | OR } UPDATE ( столбец ) ] [ ...n ]

]

оператор_SQL [ ...n ]

}

}

К особенностям триггера MSSQL относится: Триггер можно создавать и для представления.

Условие активизации BEFORE представлено условием активизации FOR.

Введено новое условие активизации INSTEAD OF (триггер выполняется вместо оператора).

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

UPDAT).

Проверить, подвергалось ли изменению значение конкретного столбца, можно с помощью предиката

UPDATE (столбец).

18