Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа ’2 Блокировки DML табличные и строчные.html

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 24.11.2024

Лабораторная работа №2

Блокировки DML - табличные и строчные.

Цель работы: познакомиться с одной из главных функций СУБД ORACLE 10g – механизмом блокирования (высокий уровень одновременной обработки данных).

Программные средства: Система управления базами данных ORACLE 10g, интерактивная среда PL/SQL Developer. На начальном этапе достаточно блокнота, встроенного в операционную систему Windows и среды SQL*Plus.

2.1 Краткая теория

Сервер ORACLE  автоматически управляет блокированием. Механизм блокирования по умолчанию устанавливает блокировку на самом низком уровне  ограничений доступа, чтобы обеспечить целостность данных при предоставлении высокой степени конкурентного доступа, то есть возможность безопасного и одновременного доступа к одним и тем же данным для многих пользователей. Блокировки DML  применяются для блокирования таких объектов, как таблицы, строки таблиц.

Основное назначение блокировок DML: заблокировать объект на время выполнения над ним операции DML (INSERT или DELETE или UPDATE) до момента фиксации результата выполнения операции DML  - commit. При выполнении операции SELECT СУБД блокирование объектов не производит. Если происходит аварийное прерывание транзакции, процесс PIMON освобождает блокировки.

Режимы блокировки:

  •  Монопольная (exclusive) блокировка препятствует совместному использованию с другими транзакциями соответствующего ресурса (строка в таблице) до тех пор, пока она не будет освобождена.

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

ТРАНЗАКЦИЯ 1

ТРАНЗАКЦИЯ 2

SQL> UPDATE employee

     2  SET salapy=salary*1.1

     3  WHERE id= 24877;

1 row updated.

SQL> commit;

Commit complete.

SQL> UPDATE employee

     2  SET salapy=salary*1.1

     3  WHERE id= 24877;

Transaction 2 waits. Транзакция 2 ждет , пока не зафиксируется транзакция 1.

1 row updated.

  •  Разделяемые (share) блокировка: несколько транзакций моут получать разделяемые блокировки одного и того же уровня.
  •  

Например, для транзакций установлены разделяемые блокировки на уровне таблицы. Две транзакции изменяют различные строки одной и той же таблицы.

ТРАНЗАКЦИЯ 1

ТРАНЗАКЦИЯ 2

SQL> UPDATE employee

     2  SET salapy=salary*1.1

     3  WHERE id= 24877;

1 row updated.

SQL> UPDATE employee

     2  SET salapy=salary*1.1

     3  WHERE id= 24878;

1 row updated.

Блокировка на уровне таблицы носит тип ТМ, блокировка на уровне строки таблицы – тип ТХ

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

Пример 1.Блокировки операции INSERT.

1) Создать таблицу SALARY:      create table SALARY( USER_ID NUMBER,

                                                                                                   DATE_OF_CHANGE DATE,

                                                                                                   SALARY NUMBER(19,4));

2) Внести строку в таблицу:   insert into SALARY values (1,sysdate,1899.67);

3 ) Определение блокировок DML.

3.1) Определение SID - уникальный идентификатор, присваемый подключению пользователя на момент его работы с сервером, изменяющий сессии (SID – номер сессии).

В  окне  PL/SQL Developer, в котором производились изменения, выполнить следующий запрос

Select distinc sid from v$mystat;     или

select sid from v$session s where s.AUDSID = any (select userenv('sessionid') from dual);

3.2) Определение блокировок, поставленных ЭТОЙ сессией

 Select * from v$lock where sid = номер полученный на шаге 3.1

Краткая информация по таблице v$lock. SID номер блокирующей сессии,  TYPE тип блокировки, ID1 (интерпретация в зависимости от типа блокировки), ID2(интерпретация в зависимости от типа блокировки), LMODE режим блокирования ( перечень режимов в таблице 1), CTIME время в секундах в ожидании (удержании) блокировки.

Типы блокировки TX. Блокировка TX захватывается, когда транзакция делает первое изменение любого объекта  и удерживается до тех пор, пока транзакцией не сделан COMMIT или ROLLBACK. Параметры ID1 и ID2 генерируются из идентификаторов транзакции(фактически это ссылка на слот в сегменте отката(отмены)).

Типы блокировки TM. Блокировка типа TM ставится на объект в случае исполнения над ним DML команд .Параметр ID1 для блокировки типа TM - номер объекта в системе, на котором удерживается блокировка.

/*Получаем следующую картину (некоторые столбцы будут отличаться от полученного результата)*/.

Работающая сессия с номер 34 захватила две блокировки, первая типа TX - все изменения, проводимые текущей транзакцией в рамках сессии, вторая ТМ - все изменения, проводимые текущей транзакицией 34 сессии над объектом 52161.

3.3) Определение  имени объекта 52161 с помощью запроса

 select name from sys.obj$ o where o.obj# = 52161;

На экране выводится таблица SALARY.

Блокировка TM удерживается в режиме LMODE =3 (sub exclusive -  режим монопольной блокировки) – заблокированна эксклюзивно одна строка объекта, которая была добавлена в результате операции вставки.

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

Единственное исключение-  вставка в таблицу с уникальным ключевым атрибутом (PRIMARY KEY  NOT  NULL). В этом случае, если две транзакции пытаются внести в ключ одинаковые значения, вторая по времени прихода “зависнет”, так как будет ожидать окончания первой, чтобы понять может она внести значение или должна прерваться по ошибке по условию уникальности ключа.

Пример 2. Блокировки оператора UPDATE и назначение блокировки TX.

1) Внести в созданную в примере 1 таблицу SALARY строчку,

insert into SALARY values(1,sysdate,1989.90);    и выполнить операцию commit

commit;

2) Убедиnmся,  что PL/SQL Developer работает в режимеMulti Session” (пункт меню Tools вкладка Preferences).

3) Открыть  два окна типа SQL Window, так как режим работы Multi Session заключается в том, что каждое окно будет иметь свою собственную сессию, т.е. запросы могу исполняться из окон параллельно.

4) Для каждого из окон узнать идентификаторы сессий SID и запомнить их:

select distinct sid from v$mystat;

5) В окне 1 выполнить следующий оператор

update SALARY set SALARY = 0.0,DATE_OF_CHANGE = sysdate where user_id =1

   В окне 2  выполнить следующий оператор

update SALARY set SALARY = 1000000.0,DATE_OF_CHANGE = sysdate where user_id =1

6) Убедиться, что во втором окне исполнение зависает. Выяснить причины зависания.

7) Открыть еще одно окно SQL Window и запросить блокировки для “зависшей” сессии:

select * from v$lock where sid = записанно на шаге 3)

Как видно причина зависания сессии блокировка типа TX( для блокировки, которую мы ожидаем LMODE равен 0, так она не захвачена, а строка REQUEST содержит режим, в котором блокировка запрошена. Строка запрошена в эксклюзивном режиме, т.е. “зависшее” окно ожидает, когда некая транзакция зафиксирует или откатит свои изменения.

8) Выяснить, из какой сессии транзакция, с помощью следующего запроса

        select * from v$session s where s.SADDR in (

        select ses_addr from v$transaction where xidsqn = параметр ID2 транзакции типа TX  )

Параметр SID результата совпадает с SID первого окна, т.е. что и следовало ожидать: “зависщая” сессия обратилась к строке таблицы, измененной первой сессией и, соответственно, зависла, ожидая освобождения строки.

/*Назначение блокировки TX. Так как Oracle блокирует записи построчно, создание блокировки на каждую строку неэффективно с точки зрения ресурсов, очевидно, что вместо этого сессии синхронизируются, повисая на абстракции более высокого уровня.*/

При выполнении операций DML(UPDATE,DELETE, INSERT) над  строкой данных одной таблицы Oracle создает блокировку TM. TM блокирует таблицу на sub exclusive доступ.

При созданнии транзакции, что предшествует любой операции DML, выполняемой после создания сессии, операторов commit, rollback, опреаторов DDL , Oracle создает блокировку TX. Все сессии DML, операции которых затрагивают данные, удерживаемые транзакцией, могли запросить эту блокировку ( т.е. повиснуть на ожидании завершения транзакции ).

Пример 3. UPDATE и SELECT(Продолжение примера 2)

  1.  Имеются:

- Сессия, внесшая изменение – незафиксированная

update SALARY set SALARY = 0.0,DATE_OF_CHANGE = sysdate where user_id =1

- Сессия, пытающаяся внести изменения – зависшая

update SALARY set SALARY = 1000000.0,DATE_OF_CHANGE = sysdate where user_id =1

  1.  Проверить,  что произойдет, если начнется третья сессия, которая попытается выбрать данные из измененной, но незафиксированной строки.
  2.  Открыть новое окно SQL Window PL/SQL Developer 
  3.  Выполнить     select * from SALARY where user_id = 1,

Операция чтения не была заблокирована, и вернула данные, которые в данный момент являются последними зафиксированными даными для этой строки.

СУБД Oracle никогда не блокирует операцию чтения!!!

UPDATE всегда блокирует обновляемую строку для операций DML и DDL из других транзакий.

Пример 4. Принудительное блокирование.

В случае, если необходимо заблокировать объект или часть объекта, вручную, т.е., не выполняя над ним DML или собираясь это сделать в будущем, можно использовать операторы:

Lock table и select for update.

  1.  Ввести команду     LOCK TABLE SALARY IN EXCLUSIVE MODE;
  2.  Выполнить в другой сессии ( в другом окне PL/SQL Developer ) следующий запрос на чтение:

SELECT *FROM SALARY;

  1.  Результат:

  1.  Ввести команду INSERT  как показано в окне:

Зависает на блокировке.

Оператор  select for update  позволяет заблокировать выбранный операцией SELECT результирующий набор в sub exclusive режиме, как при обычной операции UPDATE. Блокировка снимается любым оператором, разрывающим транзакцию: COMMIT, ROLLBACK, операторы DDL.

Таблица 1. Режимы блокировок.

Operation    

Lock Mode

LMODE

Description

Select       

NULL

1

null

Select for update    

SS

2

sub share

Insert        

SX

3

sub exclusive

Update     

SX

3

sub exclusive

Delete     

SX

3

sub exclusive

Lock For Update   

SS

2

sub share

Lock Share      

S

4

share

Lock Exclusive    

X

6

exclusive

Lock Row Share             

SS

2

sub share

Lock Row Exclusive         

SX

3

sub exclusive

Lock Share Row Exclusive   

SSX

5

share/sub exclusive

Alter table     

X

6

exclusive

Drop table         

X

6

exclusive

Create Index     

S

4

share

Drop Index    e

X

6

exclusive

Truncate table     

X

6

exclusive

Пояснения к таблице:

Exclusive: эксклюзивный доступ, предотвращает любой конкурентный доступ к объекту.

Shared: разделяемая,  разрешен доступ на чтение,  запрос  состояния,  запрещена модификация объекта.

Null: Не блокирует объект, устанавливается для получения уведомлений о изменении состояния блокируемого объекта.

Sub-Shared: Shared блокировка на часть объекта.

Sub-Exclusive: Exclusive блокировка на часть объекта.

Shared-Sub-Exclusive: Комбинация Shared and Sub-Exclusive. Эксклюзивный доступ к части объекта и разделяемый на весь объект.

2.3 Задание

  1.  Выполнить последовательность действий, предложенную в пункте 2.2
  2.  Создать свою таблицу. Внести несколько кортежей. Повторить пункт 2.2 для DML операции DELETE в примерах 1-3.
  3.  Представить отчет в электронном виде с выводами.

Литература

  1.  Томас Кайт «Эффективное проектирование приложений Oracle». Проектирование и создание высокопроизводительных приложений Oracle. Издательство ”Лори” Издательский дом “Питер”, 2004 г.
  2.  Oracle 9i. Настройка производительности базы данных. Руководство. 2-х томник.




1. Вектор17 21 Организационноэкономическая характеристика компании17 2
2. статья След статья В условиях переходной экономики характеризующейся неустойчивостью неопределенность
3. Communist politicl movement tht endorses violence nd dicttorship is clled fscism serious problem in internl ffirs during the Ming dynsty in Chin ws corruption nd txtion socil system tht se
4. этакая чаша Грааля для атлетов и бодибилдеров
5. Реферат- Олимпийские игры как проявление самопознания древних греков
6. О внесении изменений в Указ Президента Российской Федерации от 10 ноября 2007 г
7. Номер джерела викиду на карті схемі згідно з обгрунтуючим документом Проектна потужніс
8. Происхождение международного права
9. РЕФЕРАТ НА ТЕМУ- Вклад українських вчених в розвиток космонавтики Україна має півст
10. Культура
11. х начале 90х годов кардинальные геополические перемены не привели к исчезновению разногласий между союзник
12. Договори про передання результатів інтелектуальної діяльності
13. Налоговое законодательство и налоговое право
14. Стилистические ошибки в современных средствах массовой информации
15. 1Ваш пол- Мужской Женский
16. Жизнь и мнения Тристана Шенди и Сентиментальное путешествие поразили современников своей необычностью
17.  2010г. ВОПРОСЫ для итогового государственного междисциплинарного экзамена по специальност
18. Основи екології для студентів усіх спеціальностей
19. не так давно примерно эти слова произнес один из основоположников либеральных российских реформ
20. это работа над творческим развитием способностей у детей