Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв БД 2013-06-02.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
26.54 Mб
Скачать

4.3.6.12. Транзакции и блокировки

Транзакция - это логическая единица обработки базы данных, пере­во­дящая базу данных из одного его целостного состояния в другое.

Требования ACID к транзакциям:

  1. Атомарность (Atomicity) ‑ будут зафиксированы либо все изме­не­ния, выполненные в транзакции, либо восстановлено исходное состояние базы данных на начало выполнения транзакции.

  2. Согласованность (Consistency) ‑ контроль правил и ограничений целостности базы данных. При их нарушении производится откат на начало транзакции.

  3. Изолированность (Isolation) ‑ изменения, выполняемые одной транз­акцией, не должны зависеть от изменений, выполняемых в другой транзакции.

  4. Устойчивость (Durability) ‑ физическая фиксация всех необхо­ди­­мых изменений в базе данных при успешном завершении транзакции.

Тран­зак­ция может состоять из группы операторов SQL, которая начинается с команды Begin Tran [<имя транзакции>] (начать тран­закцию) и закан­чи­вается оператором Commit Tran [<имя тран­зак­ции>] (завершить транзакцию: зафиксировать в базе все изме­не­ния, произ­ве­ден­ные после начала тран­зак­ции). При ава­рий­ном завершении транзакции (например, отклю­чи­ли элек­тро­питание) база останется в рабочем сос­тоянии на момент начала тран­закции. Если внутри транзакции указать оператор Rollback Tran [<имя транзакции или точки сохранения>], то все изменения отменяются, и база восста­нав­ли­ва­ется на момент начала тран­­закции (откат назад) или точки сохранения. Точка сохранения (аналог поименованной транзакции) задается в виде Save Transaction [<имя точ­ки>]. Все транзакции сох­раняются в журнале тран­зак­ции, который ис­поль­­зу­ется для вос­ста­нов­ле­ния базы данных из архивной копии.

Изоляция транзакций от других пользователей определяется опе­ра­­то­ром Set Transaction Isolation <метод изоляции>. Существуют сле­ду­ющие методы (уровни) изоляции: Read Commited/UnCommited (поз­во­ляет выполнять/игнорировать блокировку другим пользователям одной и той же сроки или страницы), Repeatable Read (монопольно блокирует строки), Serializable (аналогичен Repeatable Read, но предотвращает чтение уже не существующих записей).

Взаимные блокировки различных процессов иногда могут пол­ностью заблокировать работу всей ба­зы данных. Просмотреть инфор­ма­цию о блокировках можно хранимой про­це­ду­рой sp_lock или Enterpise Manager (выбор идентификатора нужного процес­са из группы Current Activity папки Management). Удаление про­цесса, вызвавшего блокировку, возможно командой Kill Process из кон­текст­ного меню для этого процесса или командой Kill <имя процесса>.

4.3.6.13. Системные переменные, функции и хранимые процедуры

@@Error - код последней системной ошибки (0 - ошибок нет).

@@Cursor_Row - число строк, связанных с курсором после его открытия.

@@Rowcount - число строк, на которые повлиял последний запрос.

@@Fetch_Status - состояние последнего выполненного оператора Fetch.

Avg(x),Sum(x), Min(x),Count(*) - среднее, сумма, минимум, максимум, число значений по столбцам X по всей таблице или по группе строк.

Ascii(n), Char(c) ‑ символ с кодом N, код символа C соответственно.

Col_Length(s,t) ‑ длина столбца S таблицы T.

Coalesce(x1, ...) ‑ возвращает первое выражение, отличное от Null.

Cast(x As t) ‑ возвращает преобразованное к типу T значение X.­

Convert(t [(l)],x[,f]) ‑ возвращает преобразованное к типу T (с длиной L) значение X. Пара­метр F задает формат даты: 4 (дд.мм.гг), 104 (дд.мм.гггг), 8 (чч:мм:cc).

Charindex(s1,s2) ‑ возвращает начальную позицию строки S1 в S2.

Lower(s)/Upper(s) ­­­‑ преобразование букв стро­ки S в строчные/заглавные.

Ltrim/Rtrim/ - строка S без левых/правых пробелов.

Rand(n) - случайное число от 0 до N (1).

Round(n,t) ‑ округление числа N с точностью до T знаков.

Replicate(s,n), Len(s) ‑ строка S повторяется N раз, длина строки S.

Reverse(s) ‑ возвращает строку символов из строки S в обратном порядке.

Space(n) ‑ возвращает строку из пробелов в количестве N.

Str(x[,l[,d]]) - число X преобразуется в строку длиной L и дробной частью длиной D.

Stuff(s1,n,l,s2) ‑ строка S2 заменяет подстроку длиной L, начиная с символа под номером N, в строке S1.

Substring(s,n,l) ‑ возвращается подстрока строки S длиной L, начиная с символа под номером N (отсчет символов начинается с единицы).

Isnull(x,y) ‑ возвращает значение Y, если X=Null.

Getdate() ‑ текущая и время.

Day(d), Month(d), Year(d) ‑ возвращает номер дня, месяца и года даты D.

DataLength(x) ‑ длина выражения X.

DateAdd(p,n,d) - увеличение даты D на N периодов типа P: yy (год), q (квар­­тал), m (месяц), d (день), wk (неделя), hh (час), mi (минута), s (се­кун­да), ms (миллисекунда).

Datediff(p,d1,d2) - число периодов типа P между датами D1 и D2 (D1<D2).

Datename/Datepart (p, d) ‑ часть (P) даты D в виде строки/числа.

Object_id(‘имя объекта’) ‑ идентификационный номер объекта базы.

Host_name/Hоst_id()‑ имя/идентификационный номер компьютера­‑сервера

User - имя текущего пользователя базы данных.

Обычные (sp) и расширенные хранимые (xp) процедуры

sp_help <имя таблицы> - вывод структуры таблицы.

sp_depends <имя таблицы> - вывод объектов, зависимых от указан­ной таблицы.

sp_fkeys - вывод связей между таблицами через первичный и внешний ключи: @pktable_name=‘<имя таблицы с первичным ключом>’,

[, @fktable_name=‘< имя таблицы с внешним ключом>’]

xp_cmdshell ‘<командная строка>’ ‑ выполнение командной строки

Пример. xp_cmdshell ‘dir d:\’ - вывод оглавления.

xp_sendmail ‑ отправка сообщения по электронной почте.

Пример отправки информации о сотрудниках.

xp_sendmail @reciients='Plehev@usue.ru', --почтовый адрес

@query='Select * From Сотрудники', --запрос

@subject='SQL Server report', --форма представления

@message='Список сотрудников предприятия', --текст сообщения

@attach_result='True', @width=400 --прикрепление результата запроса