powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Реализация уникальности без ключей и индексов
4 сообщений из 104, страница 5 из 5
Реализация уникальности без ключей и индексов
    #40019688
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Учитывая количество подводных камней для multirow constraints, было бы намного лучше чтобы такие задачи решались профессионально.
Еще лучше - чтобы были встроены в БД производителем, или продавались как надстройка.
Ну так вроде уже говорили, что запрети изменения таблицы напрямую и сделай API с хранимками.
Проверки в хранимках и сериализация нужна только на время выполнения проверки.
Зачем еще какие-то надстройки? Дать возможность декларативно описывать multirow constraints слишком опасная граната в руках обезьян.
НеофитSQL
Даже если окажется что я худо-бедно и в основном на ощупь один раз правильно реализовал multirow constraint в триггере
Скорее всего окажется что это только кажется.
...
Рейтинг: 0 / 0
Реализация уникальности без ключей и индексов
    #40019697
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кобанчег,

Хранимки или триггер - это я считаю вопрос обертки.
Для реализации insert главной проблемой оказалось научиться делать dirty reads.

Потому что PK это делает, а Оракл сессиям это запрещает.
Тогда и начинаются пляски с бубном как сделать row lock на строке, которой ещё нет в таблице.

Забудем про триггеры на минутку. Вот хранимка
InsertUniqueindex(id in integer) которая вставляет уникальный id в одну определенную таблицу, изначально пустую.

Надо чтобы первый вызов для id=1 прошел успешно, второй отказался (это легко, контекст одной сессии).

А теперь надо чтобы из всех других сессий вызовы с id=1 застряли пока первая сессия не совершит commit/rollback.
Вот где не хватает dirty read.

Тут нужен глобальный сериализующий объект который соблюдает очередность. По одному такому локу на каждый id, и желательно используемый без лишних переключений контекста. Я использовал ITL, как это делает сам оракл.
...
Рейтинг: 0 / 0
Реализация уникальности без ключей и индексов
    #40019717
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL,

В принципе все что нужно было бы это возможность указать NOWAIT в INSERT/UPDATE.

SY.
...
Рейтинг: 0 / 0
Реализация уникальности без ключей и индексов
    #40019721
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY
НеофитSQL,

В принципе все что нужно было бы это возможность указать NOWAIT в INSERT/UPDATE.

SY.


Если вы о реализации двуникального ключа, то да. Но это противоречит принципу запрета dirty reads, позволяя узнавать что постит другая сессия до commit.

Если вы о моей попытке смастерить PK своими силами, то вряд ли поможет, ведь insert не блокирует в отсутствие встроенного unique constraint.
...
Рейтинг: 0 / 0
4 сообщений из 104, страница 5 из 5
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Реализация уникальности без ключей и индексов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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