Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
ther
Member

Откуда:
Сообщений: 839
в общем поделитесь опытом как собственно вы решаете проблему когда один документ открыт более чем одним усером и оба в разное время жмаканули "сохранить"
13 фев 12, 16:32    [12082816]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
не допускаем "усеров" к системем :)
13 фев 12, 16:35    [12082848]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
ther,

кто последний, тот и прав!
13 фев 12, 16:35    [12082851]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
а если говорить о пользователях - так все зависит от потребнойстей... как вариант - одновременно на редавктирование не давать документ нескольким пользователям, редактировать может только один, а второй только читать.
13 фев 12, 16:36    [12082859]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
ther
Member

Откуда:
Сообщений: 839
iap
нее..такой метод не катит))так же как и флаги в таблице что док редактируется
SanyL
в этом вся и проблема..как понять что усер сейчас открыл док?

у меня есть небольшая мысля(но надо пробовать)...при открытии дока создавать временную таблицу куда пихать данные документа...и при сохранении в триггере проверять одинаковы ли данные в базе и временной...и если хоть что то отличается..рубить сейв
13 фев 12, 16:40    [12082892]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
iap
ther,

кто последний, тот и прав!
Предлагаю назвать сей справедливый принцип "Сюрпляс" (чтоб никто не догадался).

Но приходилось сталкиваться с ERP, вся логика которых сосредоточена на клиенте,
в которых клиент сначала смотрит в специальную таблицу, достаёт оттуда информацию о том,
кто работает с этим документом в данный момент, после чего передаёт эту информацию пользователю.
Если же такой записи нет, то формирует её и открывает документ для пользователя.
В конце, после завершения работы с документом, запись из "таблицы занятости" удаляется.

Такое поведение не обязательно для других клиентов. Поэтому возможны сюрпризы.
13 фев 12, 16:42    [12082911]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
ther
iap
нее..такой метод не катит))так же как и флаги в таблице что док редактируется
SanyL
в этом вся и проблема..как понять что усер сейчас открыл док?

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


ну так при открытии ставить флаг-метку что документ редактируется темто... это вроде элементарно :)
13 фев 12, 16:42    [12082916]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
ther
Member

Откуда:
Сообщений: 839
iap
такой метод как и метод флагов приведет к краху если программа завершена аварийно..так как не наступит
автор
В конце, после завершения работы с документом, запись из "таблицы занятости" удаляется.
13 фев 12, 16:44    [12082929]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
ther
iap
такой метод как и метод флагов приведет к краху если программа завершена аварийно..так как не наступит
автор
В конце, после завершения работы с документом, запись из "таблицы занятости" удаляется.
Ну, J.D.Edwards Enterprise One работает как-то десятки лет в таком стиле!
C 70-х годов, если не ошибаюсь.
Хотя Г. редкостное
13 фев 12, 16:47    [12082973]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5124
ther,
вот адский ад... "усеры" или "усёры"?
а вообще поле timestamp, при открытии документа помнить его, а при попытке сохранения сравнивать... если расходятся то выдавать пользователю, например, сообщение о том, что документ был изменён
13 фев 12, 17:08    [12083139]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
ther
iap
такой метод как и метод флагов приведет к краху если программа завершена аварийно..так как не наступит
автор
В конце, после завершения работы с документом, запись из "таблицы занятости" удаляется.


зависит от реализации...
13 фев 12, 17:10    [12083154]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
Дедушка
ther,
вот адский ад... "усеры" или "усёры"?
а вообще поле timestamp, при открытии документа помнить его, а при попытке сохранения сравнивать... если расходятся то выдавать пользователю, например, сообщение о том, что документ был изменён


timestamp - не лучший вариант, чтобы его использовать для такой задачи... всетаки влечет за собой накладные расходы...
13 фев 12, 17:12    [12083168]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
ther
iap
такой метод как и метод флагов приведет к краху если программа завершена аварийно..так как не наступит
автор
В конце, после завершения работы с документом, запись из "таблицы занятости" удаляется.

А ты в запись добавь поле в которое клиент должен раз в XXX минут текущую серверную дату писать. Как только надо тагумент открыть, не просто ищешь в "таблицы занятости" запись про этот тагумент, а смотришь чтоб не просрочена была, и если просрочена то удаляешь её.
13 фев 12, 17:15    [12083208]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
ther
Member

Откуда:
Сообщений: 839
Дедушка
о! а это идея...минус в том что придется левое поле добавлять..но это идея...спасибо
SanyL
так как я сейчас рассматриваю варианты (и не в коем случае не придираюсь) но растолкуйте плиз какая реализация должна быть что бы учитывать еще и аварийное завершение программы которая не успела выставить флаг что док свободен? Проверять коннект? а если усер реконнектился и уже не открывал тот док? флаг стоит усер в базе..все довольны..но док заблокирован
13 фев 12, 17:17    [12083236]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5124
SanyL,
ну это скажем так.. общая идея
13 фев 12, 17:20    [12083263]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
ther
Member

Откуда:
Сообщений: 839
ZOOKABAKODER
пасиб это тоже идея....но она похожа на Дедушкинутолько с запросами к серваку
13 фев 12, 17:22    [12083276]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
Ruiner
Member

Откуда: СПб
Сообщений: 66
ther,

1. уровень изоляции repetable read. кто первый прочитал, тот и поменять сможет.
2. подсказка XLOCK. первый прочитал, остальные ждут. ну или отваливаются, если установить LOCK_TIMEOUT 0. можно отлавливать и писать пользователю об этом.
3. глобальная временная таблица с id документа в названии. если она уже существует, открываем док только для чтения. если первый пользователь неожиданно помер, то табличка тоже исчезнет.
4. change tracking + ф-ия CHANGETABLE (VERSION). http://msdn.microsoft.com/ru-ru/library/bb934145.aspx ну, про это уже написали, кажется. возможно, это лучший вариант.
13 фев 12, 17:31    [12083370]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Ruiner
3. глобальная временная таблица с id документа в названии. если она уже существует, открываем док только для чтения. если первый пользователь неожиданно помер, то табличка тоже исчезнет.
C чего бы?
Все должны помереть, а не только первый, - тогда и дропнется.
13 фев 12, 17:35    [12083410]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
Ruiner
Member

Откуда: СПб
Сообщений: 66
iap,

э... ну я всегда считал, что "Глобальные временные таблицы автоматически удаляются при завершении сеанса, создавшего таблицу, и прекращении обращения к ним всех прочих задач. Взаимосвязь между задачей и таблицей поддерживается только на время выполнения отдельной инструкции Transact-SQL. Это означает, что глобальная временная таблица удаляется после выполнения последней инструкции языка Transact-SQL, активно обращавшейся к ней во время завершения создавшего таблицу сеанса."
13 фев 12, 17:39    [12083451]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
Crimean
Member

Откуда:
Сообщений: 13147
"пессиместичные" блокировки (чтение с xlock и прочие "серверные" блокировки записи при открытии формы) - жесть вообще-то
а для "оптимистичных" как правило достаточно timestamp. и очень редко когда его нельзя прикрутить
13 фев 12, 17:50    [12083533]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
Glory
Member

Откуда:
Сообщений: 104751
ther
iap
нее..такой метод не катит))так же как и флаги в таблице что док редактируется

Вот не совсем понятно, а какая разница то первому пользователю ?
Все равно, после того, как он сохранил запись, кто-то другой может отредактировать ее
Какая разница, произойдет это через 0.1 секунды или через 10 минут ?
13 фев 12, 17:54    [12083556]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
ther
Member

Откуда:
Сообщений: 839
Glory
ther
iap
нее..такой метод не катит))так же как и флаги в таблице что док редактируется

Вот не совсем понятно, а какая разница то первому пользователю ?
Все равно, после того, как он сохранил запись, кто-то другой может отредактировать ее
Какая разница, произойдет это через 0.1 секунды или через 10 минут ?

разница в том что усер А и усер Б открыли документ..усер А поменял поля А и Б а усер Б - В и Г..сначала усер А сохранил а потом усер Б....при этом изменения усера А теряются..

в общем спасибо большое...основной принцип я понял...оказалось не все так сложно как я думал
13 фев 12, 20:13    [12084634]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
Crimean
Member

Откуда:
Сообщений: 13147
ther
разница в том что усер А и усер Б открыли документ..усер А поменял поля А и Б а усер Б - В и Г..сначала усер А сохранил а потом усер Б....при этом изменения усера А теряются..

в общем спасибо большое...основной принцип я понял...оказалось не все так сложно как я думал


фигня детектед. в данном случае для Б надо заблокировать изменения - он делал правки на основании состояния документа "до". а на основании документа "после А" он может сделать совсем другие изменения. так что возню с полями лучше мы оставим мерж реплике, а пользователь (за весьма редкими исключениями) должен смотреть на документ "в целом"
13 фев 12, 20:49    [12084759]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
ther
Member

Откуда:
Сообщений: 839
Crimean
это я и хочу сделать...заблокировать усеру Б изменять документ
13 фев 12, 20:56    [12084790]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте реализацию запрета на изменение записи которая открыта несколькими усерами  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
ther,

может быть, это поможет: sp_getapplock (Transact-SQL)?
13 фев 12, 21:19    [12084880]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить