Гость
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / баг в informix или почему такое происходит??? / 13 сообщений из 13, страница 1 из 1
10.11.2011, 11:11
    #37519401
LudeV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг в informix или почему такое происходит???
Добрый день,

вчера заметил вот какую вещь,что в любой таблице с любым типом lock mode при изменении 1 строки,другой пользователь не может изменить другую строку.

Эксперимент:

user1:
CREATE TABLE t_acc( acc CHAR(18) ) LOCK MODE ROW;
insert into t_acc values ("1");
insert into t_acc values ("2");
begin work;
update t_acc set acc="11" where acc="1"

не коммитим и не откатываем

user2:
update t_acc set acc="22" where acc="2"

He gets the following error message:
244: Could not do a physical-order read to fetch next row.
107: ISAM error: record is locked.

Это наблюдается и на 11.50 и на 11.70,так что я думаю,что это баг всех версий informix.

Ведь если я создаю таблицу с lock mode row,то и блокироваться должна строка,а не так как в этом случае.

Селект на вторую строку проходит нормально.
Единственным выходом изменения данных является изменение строки по ее rowid, тогда все работает.



Ведь так не должно быть и это неправильно или я в чем-то глубоко заблуждаюсь?
...
Рейтинг: 0 / 0
10.11.2011, 11:16
    #37519410
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг в informix или почему такое происходит???
так было и будет во всех rdbms с блокировками, если нет индекса для where acc=.

create index t_accx1 on t_acc(acc);
...
Рейтинг: 0 / 0
10.11.2011, 11:20
    #37519413
LudeV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг в informix или почему такое происходит???
Журавлев Денис,

а почему с индексом начинает работать?

потому что в таком случае поиск идет по индексу,а индекс использует(содержит) rowid строк,правильно?
...
Рейтинг: 0 / 0
10.11.2011, 11:26
    #37519435
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг в informix или почему такое происходит???
LudeV, потому что без индекса СУБД перебирает все строки, одна из которых заблокирована другим пользователем.
...
Рейтинг: 0 / 0
10.11.2011, 11:30
    #37519444
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг в informix или почему такое происходит???
потому что без индекса субд может найти строки where acc="2" только просканировав таблицу
и вот на select * from t_acc where acc="2" (на самом деле не делается селект, там все уровнем ниже происходит), чтобы поставить блокировку и вылезает Could not do a physical-order read to fetch next row.
потому что пытаемся прочитать заблокированную строку, которая еще с acc=1
...
Рейтинг: 0 / 0
10.11.2011, 11:40
    #37519461
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг в informix или почему такое происходит???
кстати в 11-х во второй сессии и set the IsolationLevel to ReadCommited поможет. Только лучше так не делать если нет понимания.
...
Рейтинг: 0 / 0
10.11.2011, 12:16
    #37519581
LudeV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг в informix или почему такое происходит???
спасибо всем,понял

а при read commited мы будем видеть только то,что уже закоммитилось, я понимаю это так.

потому что если поставить dirty read,то мы сможем видеть все строки,даже те,которые сейчас меняются,поскольку о изменяемых строках данные будем брать из сегментов отката(физ журнала),так?
...
Рейтинг: 0 / 0
10.11.2011, 12:22
    #37519614
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг в informix или почему такое происходит???
LudeVспасибо всем,понял

а при read commited мы будем видеть только то,что уже закоммитилось, я понимаю это так.

потому что если поставить dirty read,то мы сможем видеть все строки,даже те,которые сейчас меняются,поскольку о изменяемых строках данные будем брать из сегментов отката(физ журнала),так?вы все понимаете неправильно, чтобы понимать правильно надо читать документацию, а не гадать.
...
Рейтинг: 0 / 0
10.11.2011, 12:56
    #37519736
LudeV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг в informix или почему такое происходит???
Журавлев Денис,

понял. будем читать

эту тему давайте закроем
...
Рейтинг: 0 / 0
10.11.2011, 13:19
    #37519808
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг в informix или почему такое происходит???
LudeVвчера заметил вот какую вещь,что в любой таблице с любым типом lock mode при изменении строки,другой пользователь не может изменить другую строку.
...
Это наблюдается и на .50 и на .70,так что я думаю,что это баг всех версий informix.
...
Ведь так не должно быть и это неправильно или я в чем-то глубоко заблуждаюсь?
Очень похвально ваше желание разобраться в тонкостях, в попытках провести практические опыты, в стремлении освоить новый продукт и новое направление.
Но, не спешите делать скоропалительные выводы (насчет багов, особенно в таких фундаментальных вещах).
У вас пока нет, точнее мало, базовых знаний и от этого еще будут возникать проблемы с пониманием более сложных понятий.
Чтобы сэкономить себе кучу времени на "разборки" и исправление ошибок в будущем, лучше сейчас потратить время на чтение пары книжек по Информиксу, чтобы разобраться с основными понятиями. Поверьте моему опыту тренера, это даст вам огромное удовольствие от новых открытий и понимания многих "сложных" вещей, которые довольно банальны.
Список доступной литературы на русском есть в FAQ, но лучше, и полезней, просто читать документацию, она очень хорошо и подробно написана.
Удачи.
...
Рейтинг: 0 / 0
10.11.2011, 22:06
    #37520896
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг в informix или почему такое происходит???
LudeV...
потому что если поставить dirty read,то мы сможем видеть все строки,даже те,которые сейчас меняются,поскольку о изменяемых строках данные будем брать из сегментов отката(физ журнала),так?

Это неверно. При dirty read сессия читает данные, в т.ч. которые меняют другие сессии, не принимая во внимание что некоторые из них могут быть еще не подверждены (т.е. commit или rollback для них не выполнен), потому этот уровень изоляции так называется.
В информиксе нет сегментов отката, физический журнал это другое.
...
Рейтинг: 0 / 0
11.11.2011, 16:41
    #37522596
olleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг в informix или почему такое происходит???
Я вдруг вспомнил, что можно управлять ожиданием снятия блокировки:
http://www.sql.ru/forum/actualthread.aspx?tid=687748&pg=1&mid=7541026
...
Рейтинг: 0 / 0
11.11.2011, 18:01
    #37522818
LudeV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
баг в informix или почему такое происходит???
olleg,

это используем.

просто был непонятен базовый механизм почему не инсертит
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / баг в informix или почему такое происходит??? / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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