Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как заблокировать запись / 6 сообщений из 6, страница 1 из 1
12.04.2001, 10:26
    #32004216
Димон
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заблокировать запись
Подскажите как можно вручную заблокировать запись или таблицу в MSSQLSERVER 7. Пример один пользователь начинает редактировать запись в таблице, остальным эта запись должна быть доступна только для чтения. Есть ли встроенаая процедура делающая это?
...
Рейтинг: 0 / 0
12.04.2001, 11:19
    #32004218
Олег Яговкин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заблокировать запись
В нескольких словах:
SQLSerer автоматически блокирует строки, страницы, таблицы при начале проведения транзакции
(INSERT,UPDATE,DELETE). Т.е. пока не закончится транзакция начатая одним пользователем, не
начнется другая. Другие транзакции сервер ставит в очередь.Объяснять это долго,поэтому лучше почитать про коллективный доступ к данным, захваты и блокировки.
...
Рейтинг: 0 / 0
12.04.2001, 15:38
    #32004232
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заблокировать запись
Идея антиизящная для клиент-серверной архитектуры по своей природе. Длительные блокировки чего-либо для SQL-сервера в принципе противопоказаны - поскольку они будут вносить серъезные помехи работе множества пользователей. Именно поэтому у сервера не предусмотрено никаких средств интерактивного взаимодействия с пользователем, кроме выдачи информационных сообщений (без обратной связи!). Если все будет работать так как ты хочешь, неизбежно возникнет ситуация, когда тупой юзер откроет форму только чтобы посмотреть на данные, а в это время его вызовет руководство, а отттуда он напрямую побежит в буфет, а потом вообще уедет в местную командировку. Все это время други пользователи будут сидеть и ждать у моря погоды. Блокироваться данные должны только на время шевеления ими - чтобы два пользователя не могли одновременно запустить схожую модификацию данных. А смотреть - пусть смотрят хоть толпой.
...
Рейтинг: 0 / 0
12.04.2001, 17:52
    #32004257
Павел
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заблокировать запись
Вот вот! Серъезная, однако, тема! При распределении логики между клиентом и сервером клиентская часть работает, по сути с потенциально неактуальными данными! Вариант - вынос всей логики на сервер. Но и тут те же грабли - отсутсвие элементарного уведомления клиента о тои, что когда-то запрошенные им данные устарели. А ведь в IB эту проблему можно решить. Существует механизм поддержки обратной связи посредством генерирования событий для клиентов. Хотя многого другого в IB нет. А как хотелось бв поиметь подобный механизм в MS!
...
Рейтинг: 0 / 0
12.04.2001, 20:00
    #32004272
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заблокировать запись
Вообще-то для решения проблем работы с неактуальными данными существует специальный тип TimeStamp. Конечно, придется повозиться над триггерами, внутри которых должен определяться факт актуальности/неактуальности данных, над которыми производятся операции с откатом выдачей ругательства, если данные уже неактуальны.
Есть и другие приемы, которые можно реализовать собственными методами с использованием вспомогательных "таблиц актуальности". Если пересечения между пользователями происходят достаточно редко, то вполне достаточно выявить факт возникновения неактуальности данных в момент попытки их сохранения, сообщить об этом пользователю и предложить обновить данные на клиенте.
Я, например, использую собственные приемы. Многострочный документ (накладная), может находиться в двух состояниях - "черновик" и "беловик". Пока она находится в состоянии "черновик", она доступна для изменения только одному пользователю - тому, кто ее в это состояние перевел (или создал). В таком состояниии накладная может находиться очень длительное время и на протяжении множества сеансов. Когда на ней ставят метку "беловик", запускаются проводки по регистрам, журнализация и т.д. После этого уже любой пользователь может просматривать ее. И если захочет подправить, снова изменит ее статус на "черновик" - это приведет к уничтожению всех оборотов по регистрам и журнализации уничтожения накладной данным пользователем. А черновик накладной станет доступен только тому, кто эту накладную модифицирует. Когда он откорректирует содержимое накладной, он снова устанвит статус "беловик", накладная снова запустит проводки по регистрам, зажурнализируется ее очередная модификация и она снова станет доступна всем пользователям. При этом остается возможность просмотра истории модификации накладной.
Короче, тут широкое поле для творчества и фантазии.
...
Рейтинг: 0 / 0
13.04.2001, 02:12
    #32004278
dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заблокировать запись
Собсно этот вопрос обсуждался и раньше.
Чтоб не повторяться:
http://www.sql.ru/cgi-bin/UltraBoard/UltraBoard.pl?Action=ShowPost&Board=mssql&Post=409&Idle=365&Sort=0&Order=Descend&Page=0
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как заблокировать запись / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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