Тригери DDL

Тригером називається програмний код, який виконується в результаті деякої дії Тригери DML запускаються на виконання в результаті виконання інструкцій DML – INSERT, UPDATE і DELETE виконуються в результаті інструкцій CREATE, ALTER і DROP Тригери DML відповідають на зміни даних, а тригери DDL – на зміни схеми Триггерам DDL буде присвячена окрема глава в цьому розділі ми всього лише торкнемося теми та наведемо кілька прикладів

зявилися у версії SQL Server 2005 і призначені для ауді-Новинка та змін на рівні схеми

2005

можуть відповідати на зміни рівня або схеми бази даних, або сервера Так як тригери можуть реагувати на безліч типів подій і команд, команди, що викликали тригер, передаються йому у форматі XML за допомогою функції Event Data ()

Додаткова Краще дізнатися про триггерах DML і областях їх застосування ви зможете в главі 23

інформація

Створення і зміна тригерів DDL

створюються і змінюються з використанням синтаксису, аналогічного триггерам DML Область застосування тригера задається в реченні ON або параметром ALL SERVER, або DATABASE (саме DATABASE, а не імя бази даних)

CREATE | ALTER TRIGGER TriggerName ON ALL SERVER | DATABASE {WITH параметр}

FOR | AFTER тіп_собитія or группа_собитій, N AS

програмний код

Аргументами можуть виступати ключові слова encryption і execute as – вони обидва довели свою затребуваність у триггерах аудиту системного рівня Існують десятки подій і їх груп – по одному для кожного типу операції DDL, яка може бути виконана на сервері або в базі даних Кілька найбільш цікавих подій перераховані в цьому розділі, з рештою ви можете ознайомитися в утиліті Books Online

рівня сервера можуть відповідати на наступні події

■ Alter Authorization Server (зміни до сервері авторизації)

■ Create | Alter | Drop Database (створення, зміна та видалення бази даних)

■ Create [Alter | Drop Login (створення, зміна та видалення реєстраційного запису)

■ Create | Drop Endpoint (створення та видалення кінцевий точки)

■ Create | Alter | Drop Server Access (створення, зміна та видалення рівня доступу до сервера)

рівня бази даних відповідають на наступні події

■ Create | Alter | Drop Application Role (створення, зміна та видалення ролі додатка)

■ Grant | Deny | Revoke Database (надання, відгук і заборона доступу до бази даних)

■ Create | Drop Event Notification (створення та видалення повідомлення про подію)

■ Create | Alter | Drop Function (створення, зміна та видалення функції)

■ Create | Alter | Drop Index (створення, зміна та видалення індексу)

■ Create | Alter | Drop Procedure (створення, зміна та видалення процедури)

■ Create | Alter | Drop Role (створення, зміна та видалення ролі)

■ Create | Alter | Drop Schema (створення, зміна та видалення схеми)

■ Create | Alter | Drop Synonym (створення, зміна та видалення синоніма)

■ Create | Alter | Drop Table (створення, зміна та видалення таблиці)

■ Create | Alter | Drop Trigger (створення, зміна та видалення тригера)

■ Create | Alter | Drop User (створення, зміна та видалення користувача)

■ Create | Alter | Drop View (створення, зміна та видалення подання)

■ Create | Alter | Drop XML Schema Collection (створення, зміна та видалення колекції схем XML)

У утиліті Management Studio тригери рівня баз даних перераховані у вузлі Programmability вікна Object Explorer Тригери баз даних можуть бути запрограмовані, але не так легко змінені, як інші програмні обєкти, такі як збережені процедури Тригери рівня сервера перераховуються у вузлі Server Ob j ects вікна Object Explorer

Отримати список тригерів DDL рівня бази даних можна програмним шляхом, виконавши запит до подання каталогу systriggers або sysevents Список серверних тригерів можна отримати в уявленнях sysserver_triggers і sysserver_trigger_events

Для видалення тригера DDL використовується інструкція DROP TRIGGER:

DROP TRIGGER імя_тріггера

Функція EventData ()

можуть відповідати на безліч різних подій, і тому їм потрібен деякий метод отримання даних про ту подію, яка їх ініціювало Тригери DML мають логічні таблиці вставки і видалення тригери DDL мають функцію EventData () Ця функція повертає дані про подію у форматі XML Схема XML варіюється залежно від типу події Слід звернути увагу на те, що частини схеми XML чутливі до регістру символів

Використовуючи функцію EventData () для заповнення змінної XML, тригер може використовувати запити XQuery для дослідження значень

-Додаткова Більш докладно про XML і запитах XQuery ви дізнаєтеся в розділі 31

інформація

У наступному прикладі тригер DDL витягує інформацію про зміни в таблицях бази даних СНА2 і записує ці зміни в таблицю аудиту:

USE СНА2

CREATE TABLE SchemaAudit (

AuditDate DATETIME NOT NULL,

UserName VARCHAR(50) NOT NULL,

Object VARCHAR(50) NOT NULL,

DDLStatement VARCHAR(max) NOT NULL )

go

CREATE TRIGGER SchemaAudit ON DATABASE

FOR CREATE_TABLE, ALTER__TABLE, DROP_TABLE AS

DECLARE @EventData XML SET @EventData = EventData()

INSERT SchemaAudit (AuditDate, UserName, Object, DDLStatement)

SELECT

GetDate(),

©EventDatavalue(data(/EVENT_INSTANCE/UserName)[1] ,

‘SYSNAME),

@EventDatavalue(data(/EVENT_INSTANCE/ObjectName) [1] ,

‘VARCHAR(50) 1 ) ,

@EventDatavalue(1 data(/EVENT_INSTANCE/TSQLCommand/CommandText) [1] , •VARCHAR(max))

GO

CREATE TABLE Test (

PK INT NOT NULL )

GO

DROP TABLE Test GO

SELECT * FROM SchemaAudit

Буде отримано наступний результат:

AuditDate                      UserName Object DDLStatement

2006-03-07 13:07:24437 dbo            Test CREATE TABLE Test (PK INT NOT NULL)

2006-03-07 13:07:24450 dbo            Test DROP TABLE Test

Включення і відключення тригерів DDL

можуть бути включені і відключені І це добре, оскільки адміністратори баз даних повинні мати просту методику відключення тригерів DDL, які відкочують будь-які зміни у схемі Наступний програмний код відключає, а потім знову включає тригер SchemaAudit:

DISABLE TRIGGER SchemaAudit ON Fami ly

ENABLE TRIGGER SchemaAudit ON Family

Резюме

Логічна схема бази даних часто вимагає правок, щоб служити в якості фізичної схеми Практично неможливо, щоб фізична схема бази даних мала форму логічної і стала відразу працювати без застосування обмежень, ключів і типів даних Знаючи можливості визначення таблиць в SQL Server, ви можете реалізувати деякі функції проекту на рівні серверних обмежень, а не в коді Т-SQL тригера або збереженої процедури

Справжня глава представила вам програмний код створення фізичної схеми бази даних У наступних розділах ми продовжимо тему програмування При цьому перші кілька глав будуть присвячені мові Т-SQL в інших ми розглянемо платформу NET і інші технології програмування

Програмування на мові Transact-SQL

Стандартні інструкції мови маніпулювання даними DML призначені тільки для вилучення та зміни даних Ця мова позбавлений засобів розробки процедур і алгоритмів, а також команд настройки сервера та управління ім Як компенсацію будь-яка конкретна реалізація мови SQL доповнює його своїми розширеннями

Мова Transact-SQL, більше відомий як Т-SQL, є реалізацією стандарту SQL, доповненої набором розширень Microsoft Основним завданням мови Т-SQL є забезпечення програміста набором засобів проектування транзакційних баз даних

Мова Т-SQL часто асоціюють з збереженими процедурами, але насправді він представляє щось більше У додатках клієнт / сервер він може бути задіяний декількома способами

■ Т-SQL може використовуватися у виразах як частина команд DML INSERT, UPDATE і DELETE, породжених клієнтським процесом

■ Т-SQL може використовуватися в програмних блоках, що спрямовуються від клієнта до сервера

■ Функції Т-SQL можуть використовуватися як виразів в обмеженнях перевірки

■ Код Т-SQL може використовуватися в збережених цроце-дурах, функціях і тригерах сервера баз даних

Питання програмування в справжній книзі ми почали розглядати з глави 7, і почали з інструкцій DML, які лежать в самому серці мови Т-SQL У цьому розділі ми всього лише розглянемо програмні елементи, необхідні для створення серверних додатків Програмні засоби, що розглядаються у цій главі, є основою створення збережених процедур, призначених для користувача функцій і тригерів

Незважаючи на те що версія SQL Server 2005 внесла в систему елементи загальномовного середовища виконання CLR і платформи NET, мова Т-SQL залишився найкращим засобом доступу до бази даних

Джерело: Нільсен, Пол Microsoft SQL Server 2005 Біблія користувача : Пер з англ – М: ООО ІД Вільямс , 2008 – 1232 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*