powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ODAC - как убрать row exclusive?
7 сообщений из 7, страница 1 из 1
ODAC - как убрать row exclusive?
    #39479716
AWSVladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Help.
Выскакивает блокировка row exclusive, как ее убрать?
Дано:
0. Используются компоненты ODAC настройки по умолчанию. OraQuery LockMode=lmNone
1. Таблица справочник клиентов, Clients
2. Таблица черновой обработки прайса PriceDitry(шапка) + PriceDitryL (позиции)
3. Чистовая таблица прайсов Price и PriceL соответственно.
4. Есть процедура WorkPrice в которой правила, обработка, наценка и перенос данных из таблиц PriceDitry в Price

Так вот, единственное упоминание таблицы Clients, в процедуре в самом начале в запросе:

select d.id,d.procent into L_CLIENT,L_PROCENT
from Clients d
join PriceDitry pw on pw.id=P_PID and pw.pid=d.id;

и далее длинная длинная обработка данных, минут 15-30.

Вопросы:
Почему при редактировании таблицы Clients происходит блокировка "row exclusive", если редактируешь совершенно другую запись?
Как указать, что бы читающие данные из одних строк, не блокировали пишущие другие строки?

PS:
1. Триггеров нет
2. Промежуточные коммиты не предлагать
...
Рейтинг: 0 / 0
ODAC - как убрать row exclusive?
    #39479778
AWSVladimir,

Как вы узнали что у вас именно row exclusive?
AWSVladimirПочему при редактировании таблицы Clients происходит блокировка ..., если редактируешь совершенно другую запись?

FK у редактируемых табилиц на блокируемую есть? Надо как-то обеспечивать, чтобы после коммита, вставленные и проверенные на момент вставки ссылки оставались достоверными? Для этого набрасывается блокировка.

ceсcия 1
Код: plsql
1.
2.
3.
4.
5.
6.
create table client(id number primary key, val number);
create table price(id number primary key, client_id number references client(id));

insert into client values (1, 1);
commit;
insert into price values (1, 1);


ceсcия 2
Код: plsql
1.
2.
3.
4.
5.
6.
SQL> select * from client for update nowait;
        ID        VAL
---------- ----------
         1          1
SQL> rollback;
Rollback complete


ok
Код: plsql
1.
2.
3.
SQL> delete from client;
delete from client
ORA-01013: user requested cancel of current operation


фиг
Код: plsql
1.
2.
SQL> update client set val = 2;
1 row updated


ok
Код: plsql
1.
2.
3.
SQL> update client set id = 2;
update client set id = 2
ORA-01013: user requested cancel of current operation


фиг
...
Рейтинг: 0 / 0
ODAC - как убрать row exclusive?
    #39479787
AWSVladimir

Вдогонку.
Есть предпложение, что update делается по rowid и в кляузе set упомянут PK таблицы, на которую ссылаются редактируемые записи в другой сессии.
...
Рейтинг: 0 / 0
ODAC - как убрать row exclusive?
    #39479976
AWSVladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
foreign key referencesКак вы узнали что у вас именно row exclusive?

В системе есть мониторинг блокировок, какой запрос, какого пользователя, кого заблокировал с какой блокировкой


foreign key referencesFK у редактируемых таблиц на блокируемую есть?

Аллилуя!!!!
Убрал FK и лочится перестало.
Супер!!!

Комментировать не буду поведение сервера который на читающий запрос:
select d.id,d.procent into L_CLIENT,L_PROCENT
from Clients d
join PriceDitry pw on pw.id=P_PID and pw.pid=d.id;
-- где Clients.id=15

блокирует апдейт другой записи:

update Clients set procent=p_proc where id = 22

только из-за FK на Clients

Пипец.

foreign key references -ОГРОМНОЕ еще раз СПАСИБО!!!
...
Рейтинг: 0 / 0
ODAC - как убрать row exclusive?
    #39480068
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AWSVladimirКомментировать не буду поведение сервера который на читающий запрос:
...
блокирует апдейт другой записи:

И правильно сделаете, поскольку осознания пока что не наблюдается.
Лучше вдумчиво разберите примерчики от сероникого коллеги.
Ну и в developers guide загляните.
...
Рейтинг: 0 / 0
ODAC - как убрать row exclusive?
    #39480169
AWSVladimirПипец.
Пипец не там. Пипец - тут:
AWSVladimirУбрал FK
Это сродни лечения головной боли гильотиной.
...
Рейтинг: 0 / 0
ODAC - как убрать row exclusive?
    #39482341
EDUARD_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AWSVladimirАллилуя!!!!
Убрал FK и лочится перестало.
Супер!!!

на это поле, на котором был FK - повесь индекс и будет тебе счастье.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ODAC - как убрать row exclusive?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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