Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / блокировка таблиц / 22 сообщений из 22, страница 1 из 1
29.04.2008, 10:27
    #35284958
блокировка таблиц
добрый день.

DB2/iSeries

делаю запрос:
Код: plaintext
1.
2.
 select * from test;
commit;

или
Код: plaintext
1.
2.
3.
4.
5.
6.
lid =  1 ;
set st = 'select * from test where id = ?';
 PREPARE ins1 FROM st ;
  EXECUTE ins1 USING lid;
commit;


при этом если вызвать более 2-х раз подряд, то таблица test блокируется.

как этого избежать?
...
Рейтинг: 0 / 0
30.04.2008, 07:01
    #35287468
Serg0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
блокировка таблиц
А зачем вам понадобился commit в данном случае?
Судя по обилию ";" это RPG Free format + embeded SQL под i5OS 5.4, и commit просто оператор SQL, а не команда на выполнение? в таком случае он там абсолютно лишний...
и еще - лучше всегда использовать модификаторы - commit WORK , select * from table for read only

Интересно было бы попытаться повторить ваш результат, но у меня так и не получилось...
...
Рейтинг: 0 / 0
30.04.2008, 08:11
    #35287505
блокировка таблиц
Serg0А зачем вам понадобился commit в данном случае?
Судя по обилию ";" это RPG Free format + embeded SQL под i5OS 5.4, и commit просто оператор SQL, а не команда на выполнение? в таком случае он там абсолютно лишний...
и еще - лучше всегда использовать модификаторы - commit WORK , select * from table for read only

Интересно было бы попытаться повторить ваш результат, но у меня так и не получилось...

может это регулируется какими то настройками на аэске?
...
Рейтинг: 0 / 0
30.04.2008, 08:41
    #35287547
блокировка таблиц
Serg0А зачем вам понадобился commit в данном случае?
Судя по обилию ";" это RPG Free format + embeded SQL под i5OS 5.4, и commit просто оператор SQL, а не команда на выполнение? в таком случае он там абсолютно лишний...
и еще - лучше всегда использовать модификаторы - commit WORK , select * from table for read only

Интересно было бы попытаться повторить ваш результат, но у меня так и не получилось...

может это регулируется какими то настройками на аэске?
...
Рейтинг: 0 / 0
30.04.2008, 09:47
    #35287685
Serg0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
блокировка таблиц
Насонов Алексейможет это регулируется какими то настройками на аэске?

Разговор ни о чем...
не должен простой селект (на простенькой, как я понимаю таблице) так себя вести, какие-бы настройки где ни делались. а если это не просто селект, а часть распределенной транзакции, например, то где подробности?

из STRSQL результат тот же? а через ODBC?

что говорит WRKOBJLCK?
...
Рейтинг: 0 / 0
30.04.2008, 14:29
    #35288721
golsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
блокировка таблиц
C каким уровнем изоляции работаете? Возможно он слишком высокий.
...
Рейтинг: 0 / 0
30.04.2008, 14:53
    #35288818
блокировка таблиц
Serg0 Насонов Алексейможет это регулируется какими то настройками на аэске?

Разговор ни о чем...
не должен простой селект (на простенькой, как я понимаю таблице) так себя вести, какие-бы настройки где ни делались. а если это не просто селект, а часть распределенной транзакции, например, то где подробности?

из STRSQL результат тот же? а через ODBC?

что говорит WRKOBJLCK?


через STRSQL - не блоктрует, через ODBC, JDBC блокирует.
...
Рейтинг: 0 / 0
30.04.2008, 16:34
    #35289238
Serg0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
блокировка таблиц
Насонов Алексейчерез STRSQL - не блоктрует, через ODBC, JDBC блокирует.

ну вот вам и ответ - значит параметр COMMIT при запуске STRSQL не блокирует чтение, а в ваших ODBC коннекциях и/или при компиляции сорца - если это все-таки хранимка (о чем вы молчите как партизан на допросе) - все с точностью до наоборот. и никакие настройки на сервере тут не при чем.
если трудно(не возможно) определить дефолтовый уровень изоляции - укажите его явно в isolation-clause selecta'а :
select * from ... with nc, например.
...
Рейтинг: 0 / 0
30.04.2008, 16:36
    #35289248
Serg0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
блокировка таблиц
Насонов Алексейчерез STRSQL - не блоктрует, через ODBC, JDBC блокирует.

ну вот вам и ответ - значит параметр COMMIT при запуске STRSQL не блокирует чтение, а в ваших ODBC коннекциях и/или при компиляции сорца - если это все-таки хранимка (о чем вы молчите как партизан на допросе) - все с точностью до наоборот. и никакие настройки на сервере тут не при чем.
если трудно(не возможно) определить дефолтовый уровень изоляции - укажите его явно в isolation-clause selecta'а :
select * from ... with nc, например.
...
Рейтинг: 0 / 0
30.04.2008, 21:06
    #35289617
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
блокировка таблиц
Я в AS/400 ничего не понимаю, но, надеюсь, даже там после COMMIT все блокировки исчезают, если только курсор не WITH HOLD. И если в программе не используется WITH HOLD, то, быть может, где-то в настройках клиента стоит "открывать все курсоры с опцией WITH HOLD"?

Да, нижний уровень изоляции позволит не создавать блокировки, так что и отпускать их не будет нужно, но это совершенно неспортивно.
...
Рейтинг: 0 / 0
04.05.2008, 12:59
    #35291976
serge.reva
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
блокировка таблиц
Насонов Алексейдобрый день.

DB2/iSeries

делаю запрос:
Код: plaintext
1.
2.
 select * from test;
commit;

или
Код: plaintext
1.
2.
3.
4.
5.
6.
lid =  1 ;
set st = 'select * from test where id = ?';
 PREPARE ins1 FROM st ;
  EXECUTE ins1 USING lid;
commit;


при этом если вызвать более 2-х раз подряд, то таблица test блокируется.

как этого избежать?

простите, но каков смысл этого запроса? отсутсвие ключа по id? может таки лучше построить правильный LF и использовать native rpg? да и быстрее будет..

Serge Reva
...
Рейтинг: 0 / 0
04.05.2008, 14:35
    #35292237
блокировка таблиц
Serg0 Насонов Алексейчерез STRSQL - не блоктрует, через ODBC, JDBC блокирует.

ну вот вам и ответ - значит параметр COMMIT при запуске STRSQL не блокирует чтение, а в ваших ODBC коннекциях и/или при компиляции сорца - если это все-таки хранимка (о чем вы молчите как партизан на допросе) - все с точностью до наоборот. и никакие настройки на сервере тут не при чем.
если трудно(не возможно) определить дефолтовый уровень изоляции - укажите его явно в isolation-clause selecta'а :
select * from ... with nc, например.


не имеет значения хранимка или явный select , все равно блокирует.

Код: plaintext
1.
select * from ... with nc

тоже не помогает.
...
Рейтинг: 0 / 0
04.05.2008, 15:50
    #35292447
Serg0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
блокировка таблиц
Тех данных, что вы дали, ну абсолютно недостаточно для анализа...
За всю свою 7-ми летнюю практику с АС/400 такого ни разу не встречал и повторить вашу ситуацию мне удалось только искусственно - c дефолтными настройками ODBC/JDBC и параметрами компиляции для SQLRPGLE все работает на ура.

Если такая ситуация только с этой таблицей: WRKOBJLCK - смотрите кто держит объект, анализируйте job log, смотрите call stack...
...
Рейтинг: 0 / 0
04.05.2008, 16:52
    #35292648
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
блокировка таблиц
Ну, вот такое
http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp?topic=/com.ibm.db2.luw.apdv.cli.doc/doc/r0008781.html
на AS/400 есть?
...
Рейтинг: 0 / 0
05.05.2008, 06:42
    #35293275
Serg0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
блокировка таблиц
Victor MetelitsaНу, вот такое
http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp?topic=/com.ibm.db2.luw.apdv.cli.doc/doc/r0008781.html
на AS/400 есть?

Именно такого параметра на клиенте я не знаю, но искусственно залочить можно - дурное дело не хитрое ;-)

Мне удалось придумать похожую ситуацию (правда на большом объеме данных) - оптимизатор работает ну очень по разному в консоли и через ODBC + STRSQL не работает со статическим курсором.
В результате, при запросе через ODBC с локальным курсором строится временный AccessPath и если объем данных достаточно велик, то можно нарваться на подобную ситуацию. В консоли при этом все будет ровно, поскольку курсор серверный и фетчится партиями...

Дальше рыть уже не интересно - слишком много неизвестного, начиная с "таблица test блокируется" + любовь автора к голым абстракциям
...
Рейтинг: 0 / 0
05.05.2008, 10:35
    #35293596
блокировка таблиц
Serg0 Victor MetelitsaНу, вот такое
http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp?topic=/com.ibm.db2.luw.apdv.cli.doc/doc/r0008781.html
на AS/400 есть?

Именно такого параметра на клиенте я не знаю, но искусственно залочить можно - дурное дело не хитрое ;-)

Мне удалось придумать похожую ситуацию (правда на большом объеме данных) - оптимизатор работает ну очень по разному в консоли и через ODBC + STRSQL не работает со статическим курсором.
В результате, при запросе через ODBC с локальным курсором строится временный AccessPath и если объем данных достаточно велик, то можно нарваться на подобную ситуацию. В консоли при этом все будет ровно, поскольку курсор серверный и фетчится партиями...

Дальше рыть уже не интересно - слишком много неизвестного, начиная с "таблица test блокируется" + любовь автора к голым абстракциям


это не голые абстракции, я недавно перешел на DB2 (до этого 7 лет отработал на Oracle) и не знаю с какой стороны подходить и вообще выпервые сталкиваюсь, чтобы простая выборка блокировала таблицу. Мне говорит наш главный разработчик, что таблица блокирована.

если вы мне подскажете как пользоваться WRKOBJLCK , буду вам очень благодарен.
...
Рейтинг: 0 / 0
05.05.2008, 10:52
    #35293651
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
блокировка таблиц
Добрый день.

Это легко воспроизводится: создайте любую таблицу, вставьте в нее запись и через odbc, jdbc или даже из командного процессора db2 при подключении через db2 connect сделаете из нее одинаковый select 2 раза подряд.
Посмотрите из wrkobjlck на эту таблицу.
Блокировка на эту таблицу останется до конца сессии, что бы вы дальше не делали, с ключенным автокоммитом или нет.

Некто Kent Milligan, уважаемый человек, называл эти блокировки, как soft object locks.
Подробнее об этом здесь .
Мне эта блокировка мешала, насколько я помню, только тем, что нельзя при этом из другой сессии таблицу удалить.
Победить такое поведение не удалось, да и не надо было особо...
...
Рейтинг: 0 / 0
05.05.2008, 13:11
    #35294174
Serg0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
блокировка таблиц
WRKOBJLCK OBJ(TESTLIB/TEST) OBJTYPE(*FILE) - появится список локов и их тип, в списке можно будет провалиться в WRKJOB и посмотреть подробности по JOB.

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

To Mark Barinstein: а вот родной, для iSeries, Client Access 5.2-5.4 такого "феномена" не обнаруживает ни через ADO-ODBC ни через JDBC.
надо будет db2 connect поставить как-нибудь, попробовать из спортивного интереса.
...
Рейтинг: 0 / 0
05.05.2008, 14:19
    #35294410
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
блокировка таблиц
С родным jdbc type 4 драйвером (jt400.jar) тоже есть "феномен".
...
Рейтинг: 0 / 0
05.05.2008, 15:04
    #35294580
блокировка таблиц
Serg0WRKOBJLCK OBJ(TESTLIB/TEST) OBJTYPE(*FILE) - появится список локов и их тип, в списке можно будет провалиться в WRKJOB и посмотреть подробности по JOB.

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

To Mark Barinstein: а вот родной, для iSeries, Client Access 5.2-5.4 такого "феномена" не обнаруживает ни через ADO-ODBC ни через JDBC.
надо будет db2 connect поставить как-нибудь, попробовать из спортивного интереса.


у меня IBM iSeries Acces fro windows Version 5 release 4 Modification level 0.
...
Рейтинг: 0 / 0
05.05.2008, 16:00
    #35294785
Serg0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
блокировка таблиц
н-да... почему же я не могу повторить? это уже интересно. основные эксперименты я делал под Client Acces 5.2 & i5OS V5R2M0. Повторю для "комплекта" 5.4.

Насчет db2 connect - на DB2 ESE 8.2 (Win32) - делаю коннекцию к AS/400 5.2, пробую - никаких локов
...
Рейтинг: 0 / 0
06.05.2008, 07:56
    #35295835
Serg0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
блокировка таблиц
удалось повторить с CA 5.4 и direct connect от DB2 UDB 9, с клиентами более ранних версий такого не наблюдается.

Блокировка абсолютно не мешает - блокируется сам объект (PF), а не записи таблицы - их можно и удалять и обновлять. Так что, как уже и писал Mark Barinstein, это может помешать только если нужно удалять саму таблицу (удалить не получится и из той же сессии, что залочила PF, если не закрыть курсор).
и WRKOBJLCK тому подтвеждение.

ИМХО, это может гипотетически помешать только при работе с временными файлами, но их можно создавать в QTEMP (как это и принято)
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / блокировка таблиц / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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