Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Update  и блокировка таблицы 1Сv77 (число прочтений - 3464 )
Лунтик
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 11. Июля 2010
Update  и блокировка таблицы 1Сv77
28. Августа 2010 :: 08:52
Печать  
Подскажите, пожалуйста, как обезопасить выполнение Update на таблице 1cV77 (имеется ввиду, чтобы другие пользователи в момент выполнения команды не попадали).

1. Понимает ли 1с блокировки, выставленные VFPOLEDB, или 1с работает только с 1SDNLOCK и при обращении к записи (файлу), заблокированной Foxom сгенерится ошибка?

2. Достаточно ли запустить Команда.Выполнить("UPDATE ...") в цикле до безошибочного выполнения или надо выполнить какие-то дополнительные действия.

3. http://www.1cpp.ru/forum/YaBB.pl?num=1274542678/5#5
Индексы летят все или те, которые основаны на алфавитном упорядочивании. Например, регистры, тоже улетят?

Спасибо Нерешительный
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Update  и блокировка таблицы 1Сv77
Ответ #1 - 11. Мая 2011 :: 07:33
Печать  
Интересует механизм работы блокировок намерений.

Читаю в одной статье:

Монопольная блокировка намерений (обозначается IX). Монопольная блокировка намерений запрещает доступ к данным какого-либо вида (даже на чтение) и позволяет повысить эффективность работы при множественном обновлении данных. В отличие от простой монопольной блокировки она совместима сама с собой. Т.е. другая транзакция также может наложить монопольную блокировку намерений на те же ресурсы, что и первая транзакция.

Создал в базе 1С новый справочник (SC12).

В одном сеансе запустил:
begin tran
select * from sc12 (rowlock xlock holdlock)
where code='   10'

SQL показывает, что наложились монопольные блокировки ключа на редактируемые записи, а также блокировка IX на страницу и всю таблицу. Если исходить из того, что было написано выше, раз наложена монопольная блокировка намерений на всю таблицу, другому сеансу не даст ничего изменить.

Однако в другом сеансе спокойно выполняется:
update sc12 set sp14=sp14+50
where code = '   12'

Соответственно вопрос, в чем же тогда суть монопольной блокировки намерений на всю таблицу в данном случае?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Update  и блокировка таблицы 1Сv77
Ответ #2 - 11. Мая 2011 :: 07:52
Печать  
(neo) ты пишешь о блокировках sql.
В (0) речь идет о dbf базе
  
Наверх
 
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Update  и блокировка таблицы 1Сv77
Ответ #3 - 11. Мая 2011 :: 07:56
Печать  
Чтобы не открывать новую тему, написал сюда. Мой вопрос никак не связан с (0).
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Update  и блокировка таблицы 1Сv77
Ответ #4 - 11. Мая 2011 :: 08:00
Печать  
Neo писал(а) 11. Мая 2011 :: 07:56:
Чтобы не открывать новую тему, написал сюда. Мой вопрос никак не связан с (0).

ИХМО лучше заведи новую тему.

  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Update  и блокировка таблицы 1Сv77
Ответ #5 - 11. Мая 2011 :: 12:04
Печать  
Neo писал(а) 11. Мая 2011 :: 07:33:
SQL показывает, что наложились монопольные блокировки ключа на редактируемые записи, а также блокировка IX на страницу и всю таблицу. Если исходить из того, что было написано выше, раз наложена монопольная блокировка намерений на всю таблицу, другому сеансу не даст ничего изменить.

Цитата:
Намеренная монопольная блокировка (IX) совместима с блокировкой IX, поскольку IX означает намерение обновить не все строки, а только некоторые из них. Другим транзакциям разрешено чтение и обновление некоторых строк, если только это не строки, которые обновляются другими транзакциями.

© BOL

Neo писал(а) 11. Мая 2011 :: 07:33:
Соответственно вопрос, в чем же тогда суть монопольной блокировки намерений на всю таблицу в данном случае?

Она не совместима с некоторыми другими типами блокировок (S, U, X etc.).
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Neo
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 327
Зарегистрирован: 12. Ноября 2007
Re: Update  и блокировка таблицы 1Сv77
Ответ #6 - 12. Мая 2011 :: 13:06
Печать  
Цитата:
Она не совместима с некоторыми другими типами блокировок (S, U, X etc.).


Но при обновлении строки ведь накладывается U или X в любом случае. Поэтому получается, что IX на всю таблицу совместима с блокировкой обновления на отдельные строки..
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Update  и блокировка таблицы 1Сv77
Ответ #7 - 12. Мая 2011 :: 13:33
Печать  
Neo писал(а) 12. Мая 2011 :: 13:06:
Поэтому получается, что IX на всю таблицу совместима с блокировкой обновления на отдельные строки..

Это разные уровни иерархии блокировки. I (intent) означает лишь намерение что-то заблокировать на более низком уровне. Почитай уже BOL, там всё доступно написано.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать