powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Table LOCK FOR INSERT
12 сообщений из 12, страница 1 из 1
Table LOCK FOR INSERT
    #32024428
none
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сделать локирование таблицы только для INSERT операций? Ну, то есть чтобы INSERT от разных пользоватеелей выстраивались в очередь (таблица на инсерт-операции становиться однопользовательской). Напрашиваеться LOCK TABLE IN EXCLUSIVE MODE, но, думаю, не есть Гуд локирование всей таблицы для удаления и апдейта только ради инсертов.
...
Рейтинг: 0 / 0
Table LOCK FOR INSERT
    #32024452
nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а за чем?
все равно остальные увидят, вставленные данные только после commit'а.
...
Рейтинг: 0 / 0
Table LOCK FOR INSERT
    #32024502
none
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот именно что после коммита.
Будем это считать не корректно заданным вопросом, тогда задам пространнее:
Как сделать, чтобы от различных пользователей дынные не дублировались. Вычистка таблицы после инсертов не устраивает. Поэтому удобно проверку сделать на инсерт-триггере (если уже такая запись есть например в 5 последних записях - выхожу из триггера исключением). Но тогда и инсерты должны работать строго последовательно, но ни как не параллельно, иначе алгоритм не работает.
...
Рейтинг: 0 / 0
Table LOCK FOR INSERT
    #32024521
user1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не проще создать уникальный индекс на нужные поля и делать commit поскорее?
...
Рейтинг: 0 / 0
Table LOCK FOR INSERT
    #32024541
nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лучший метод в таких ситуациях, по-моему, это изменить алгоритм работы так, чтобы подобных ситуаций небыло.
А как метод решения можно предложить следующее:
пытаешься заблокировать таблицу целиком, если успешно, разблокируешь и вставляешь данные,
иначе кто-то уже вставляет.
...
Рейтинг: 0 / 0
Table LOCK FOR INSERT
    #32024666
none
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to nick:
Полная ерунда,
"пытаешься заблокировать таблицу целиком, если успешно, разблокируешь и вставляешь данные,
иначе кто-то уже вставляет" - ясно, что это ничего ничего не даст.
Ну чтож, LOCK TABLE, так LOCK TABLE.
...
Рейтинг: 0 / 0
Table LOCK FOR INSERT
    #32024670
nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это даст возможность другому изменять данные,
а если ты заблокируешь, то ничего кроме просмотра данных другим делать будет нельзя.
...
Рейтинг: 0 / 0
Table LOCK FOR INSERT
    #32024682
none
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так задача то в том, чтобы исключить возможность вставки дублированных записей. Ваше предложение это проблему не рашает. Вот и все. Если не верите, специально открою какой-нибудь фотошоп и нарисую для вас тайм-диаграмму с локами, коммитами, инсертами и прочее.
...
Рейтинг: 0 / 0
Table LOCK FOR INSERT
    #32024693
nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я это и сам могу нарисовать
просто вопрос стоял про insert, я и исходил что блокировка нужна только для insert
"не есть Гуд локирование всей таблицы для удаления и апдейта только ради _инсертов_."
...
Рейтинг: 0 / 0
Table LOCK FOR INSERT
    #32024739
alvako
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 none
Если проблема в исключении возможности вставки дублированных записей - то почему она не может быть решена, введением необходимых ограничений на уникальность?
...
Рейтинг: 0 / 0
Table LOCK FOR INSERT
    #32024817
none
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому, что создать уникальный индекс на несколько полей - самое простое решение. Но мы не ищем легких путей! А что за собой повлечет такая мера, никово не заботит? Например размер этого индекса. Пусть мне нужно прослеживать уникальность в таблице с ID NUMBER(10) и например с 5 полями VARCHAR2(4000) и остальной чепухой. Прикидываете размер индекса при 1 тысячи записей, 5, 10, 100? А время UPDATE такого индекса? Нет, не согласен с таким решением. Ладно, вопрос снимаю. Спасибо.
...
Рейтинг: 0 / 0
Table LOCK FOR INSERT
    #32024851
alvako
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так бы сказал, что извратится хочешь.
Тебе действительно нужно проверять уникальность по ВСЕМ полям в таблице с ID NUMBER(10) и например с 5 полями VARCHAR2(4000)? ID, например, и так уникальный по определению (да и индекс на нём и так будет свой). А может просто кривая структура БД?
С проверкой на инсерт-триггере таблицы у вас так-же будут проблемы - вы нарвётесь на ORA-04091. Придётся делать контроль уникальности на стороне клиента - а это тоже потенциальный геморрой.
Судя по вашему количеству записей "1 тысячи записей, 5, 10, 100" это не крутая OLTP-система где можно было-бы беспокоится о времени UPDATE (тем более что в вашем случае и при UPDATE тоже нужна будет проверка уникальности). Да и размер индекса на это количество записей - копейки. Удивительно, что вас это заботит.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Table LOCK FOR INSERT
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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