powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Блокировка на уровне изоляции CS
7 сообщений из 7, страница 1 из 1
Блокировка на уровне изоляции CS
    #36239360
Intser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

Хочу синхронизировать некоторые действия в базе, блокирование должно происходить при доступе к учетной записи.
Например есть таблица учеток
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE TB (
    ID            INT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH  1 , INCREMENT BY  1 , NO CACHE),
    NAME          VARCHAR( 16 ) NOT NULL,
    REGISTER_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    ACTIVE_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP
        CONSTRAINT ARY_DB_PK PRIMARY KEY ( ID ),
)

создаю процедуру с синхронизацией
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
CREATE PROCEDURE SESSION_START(IN id INT)
LANGUAGE SQL
SPECIFIC SESSION_START
BEGIN ATOMIC
    DECLARE nTS TIMESTAMP;
    DECLARE SQLSTATE            CHAR( 5 ) DEFAULT '00000';
    DECLARE SQLCODE             INT DEFAULT  0 ;

  
    DECLARE C CURSOR FOR
    	SELECT ACTIVE_DATE TB WHERE ID = id
    	FOR UPDATE OF ACTIVE_DATE
               OPTIMIZE FOR  1  ROW
               WITH CS;

    -- set wait timeout
    SET CURRENT LOCK TIMEOUT WAIT  20 ;
    
    OPEN C;
    -- блокирую доступ к ресурсу
    FETCH C INTO nTS;
    -- некоторые действия
   CLOSE C;
   ..
проблема в том, что
Код: plaintext
1.
2.
3.
call SESSION_START( 1 )
блокирует 
call SESSION_START( 2 )

В чем может быть проблема? - получается вся таблица блокирована.
...
Рейтинг: 0 / 0
Блокировка на уровне изоляции CS
    #36239367
Intser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
up
...
Рейтинг: 0 / 0
Блокировка на уровне изоляции CS
    #36239461
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.Intserполучается вся таблица блокирована.Вы это как определили?
По снэпшоту блокировок приложения?
...
Рейтинг: 0 / 0
Блокировка на уровне изоляции CS
    #36239802
Intser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем - ставлю задержку выполнения после фетча
например вот так
call sesion_start(1, 30);
в другой сессии
call session_start(1, 5)
5 и 30 - задержка в секундах
если нет блокировки - вторая процедура должна отработать быстрее первой, на практике получается явное окончание работы первой процедуры + 5 секунд и окончание работы второй. Или я что-то не так замеряю?
...
Рейтинг: 0 / 0
Блокировка на уровне изоляции CS
    #36239808
Intser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
id разные конечно - 1 и 2
...
Рейтинг: 0 / 0
Блокировка на уровне изоляции CS
    #36240162
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Intser,


Надо:
SELECT ACTIVE_DATE FROM TB WHERE ID = SESSION_START. id ...

а то у вас селект по условию id=id и будет выбирать все записи из таблицы, блокировать 1-ю и процедура вне зависимости от параметра не даст другим работать.
...
Рейтинг: 0 / 0
Блокировка на уровне изоляции CS
    #36241221
Intser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, проблема именно в этом. Смешно то, что в рабочем коде все работает - там параметры начинаются с p_* :)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Блокировка на уровне изоляции CS
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]