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

Откуда: Рахів
Сообщений: 841
НеофитSQL
Учитывая количество подводных камней для multirow constraints, было бы намного лучше чтобы такие задачи решались профессионально.
Еще лучше - чтобы были встроены в БД производителем, или продавались как надстройка.
Ну так вроде уже говорили, что запрети изменения таблицы напрямую и сделай API с хранимками.
Проверки в хранимках и сериализация нужна только на время выполнения проверки.
Зачем еще какие-то надстройки? Дать возможность декларативно описывать multirow constraints слишком опасная граната в руках обезьян.
НеофитSQL
Даже если окажется что я худо-бедно и в основном на ощупь один раз правильно реализовал multirow constraint в триггере
Скорее всего окажется что это только кажется.
17 ноя 20, 21:12    [22234179]     Ответить | Цитировать Сообщить модератору
 Re: Реализация уникальности без ключей и индексов  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
Кобанчег,

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

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

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

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

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

Тут нужен глобальный сериализующий объект который соблюдает очередность. По одному такому локу на каждый id, и желательно используемый без лишних переключений контекста. Я использовал ITL, как это делает сам оракл.
17 ноя 20, 21:36    [22234192]     Ответить | Цитировать Сообщить модератору
 Re: Реализация уникальности без ключей и индексов  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
НеофитSQL,

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

SY.
17 ноя 20, 22:35    [22234231]     Ответить | Цитировать Сообщить модератору
 Re: Реализация уникальности без ключей и индексов  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
SY
НеофитSQL,

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

SY.


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

Если вы о моей попытке смастерить PK своими силами, то вряд ли поможет, ведь insert не блокирует в отсутствие встроенного unique constraint.
17 ноя 20, 23:00    [22234242]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5]      все
Все форумы / Oracle Ответить