|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
всем привет..столкнулся с такой проблемой..есть процедура в теле которой идет проверка(назовем ее Т1) на возможность вставки строки в таблицу...коммит на стороне клиента. Клиент обращается к бд проходит Т1 и делает вставку..зависает..сотрудник обновляет страницу ..генерируется новая сессия которая вызывает ту же процедуру проходит T1 и делает коммит..в это же время прилетает коммит от первой сессии и возникает дубль. На таблицу не могу поставить констрейн, и не могу в тригере before insert поставить проверку т.к. в некотоырх кейсах эти дубли должны быть. Архитектура реализована через одно место..проблема еще в том, что коммит с первой сессии может и не прилететь. Есть ли способ мало й кровью победить багу средствами Oracle? Навскидку приходит вариант в T1 установить read uncommited...или через мьютекс на всю процедуры вставки ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 09:26 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
Один из способов решения недокоммиченного insert. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 09:39 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
dmdmdmОдин из способов решенияНедоdbms_lock ничем не лучше констрейнта. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 10:02 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
спасибо, но чет сдается мне лучше поставить read uncommited на Т1. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 11:17 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
cobalt_frogлучше поставить read uncommited на Т1.Ну поставь. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 11:21 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
cobalt_frogлучше поставить read uncommited на Т1 а почему не можете констрейнт, по религиозным соображениям? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 12:20 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
-2-cobalt_frogлучше поставить read uncommited на Т1.Ну поставь. Лучше посадить. Хотя авторВо деревня! Кто ж его посадит! Он же памятник! (с) Regards Maxim ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 12:54 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
проблема только в том, что read uncommitted в оракле не установить))) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 13:23 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
cobalt_frogпроблема только в том, что read uncommitted в оракле не установитьread uncommited это read commited + autocommit. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 13:57 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
cobalt_frogпроцедура в теле которой идет проверка(назовем ее Т1) на возможность вставки строки в таблицу... Клиент обращается к бд проходит Т1 и делает вставку.. Изначально нерабочий подход, о чем написано в множестве книжек, статей и просто на заборах. cobalt_frogНа таблицу не могу поставить констрейн, и не могу в тригере before insert поставить проверку т.к. в некотоырх кейсах эти дубли должны быть. В триггером эта задача также не решается, поскольку правила acid для триггера никто не отменял. Conatraint - единственный корректный способ решения указанной задачи. Менее корректный, но тоже рабочий - lock table in exclusive mode перед вызовом T1 Кроме того, можно изменить определение первичного/уникального ключа, добавив в него второй компонент, который позволит делать дубли когда надо и не делать когда не надо. cobalt_frogАрхитектура реализована через одно место.. Ну так измените архитектуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 14:53 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
cobalt_frogАрхитектура реализована через одно место..Ассенизаторы говорят, что деньги не пахнут, и гордо называются золотарями. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2019, 16:14 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
andrey_anonymous, ну так изменяю и переписываю..нужен был патч временный чтобы багу поправить. Сделал через через автономку. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2019, 09:29 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
andrey_anonymouscobalt_frogпроцедура в теле которой идет проверка(назовем ее Т1) на возможность вставки строки в таблицу... Клиент обращается к бд проходит Т1 и делает вставку.. Изначально нерабочий подход, о чем написано в множестве книжек, статей и просто на заборах. cobalt_frogНа таблицу не могу поставить констрейн, и не могу в тригере before insert поставить проверку т.к. в некотоырх кейсах эти дубли должны быть. В триггером эта задача также не решается, поскольку правила acid для триггера никто не отменял. Conatraint - единственный корректный способ решения указанной задачи. Менее корректный, но тоже рабочий - lock table in exclusive mode перед вызовом T1 Кроме того, можно изменить определение первичного/уникального ключа, добавив в него второй компонент, который позволит делать дубли когда надо и не делать когда не надо. cobalt_frogАрхитектура реализована через одно место.. Ну так измените архитектуру. спасибо за развернутый ответ. 1. Когда я говорил про триггер я и имел ввиду добавление в него второй компоненты..можно подробнее что из acid он нарушает? 2. С базой работает много клиентов...сессии бывает что не закоммичены ...lock table in exclusive mode будет же ждать долго, разве это не приведет к проблемам? 3. Констрейнт с доп компонентой мне кажется лучшим решением..тут вы правы. Код: plsql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2019, 10:53 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
cobalt_frog Код: plsql 1.
а попроще не могли что ли код написать??? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2019, 11:51 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
alex-ls, например? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2019, 13:04 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
cobalt_frog1. Когда я говорил про триггер я и имел ввиду добавление в него второй компоненты..можно подробнее что из acid он нарушает? Для обеспечения уникальности записи посредством чтения таблицы необходимо (но недостаточно) "видеть" незафиксированные изменения конкурирующих транзакций. Триггер, как и любой другой pl/sql код, этого не может в силу ACID, потому задача триггером не решается. cobalt_frog2. С базой работает много клиентов...сессии бывает что не закоммичены ...lock table in exclusive mode будет же ждать долго, разве это не приведет к проблемам? Вы сами принимаете решения относительно своей системы в конкретных условиях. cobalt_frog3. Констрейнт с доп компонентой мне кажется лучшим решением..тут вы правы. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2019, 13:09 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
andrey_anonymouscobalt_frog1. Когда я говорил про триггер я и имел ввиду добавление в него второй компоненты..можно подробнее что из acid он нарушает? Для обеспечения уникальности записи посредством чтения таблицы необходимо (но недостаточно) "видеть" незафиксированные изменения конкурирующих транзакций. Триггер, как и любой другой pl/sql код, этого не может в силу ACID, потому задача триггером не решается. cobalt_frog2. С базой работает много клиентов...сессии бывает что не закоммичены ...lock table in exclusive mode будет же ждать долго, разве это не приведет к проблемам? Вы сами принимаете решения относительно своей системы в конкретных условиях. cobalt_frog3. Констрейнт с доп компонентой мне кажется лучшим решением..тут вы правы. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
спс. тут приходит на sub_id накидывать доп логику..сиквенс и т.д. вариант предложенный мной не проще? тупо вставил необходимые поля и если разрешаешь дупликаты просто вставляешь 1 в поле...или вы там видите какую то проблему.? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2019, 13:19 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
cobalt_frogвариант предложенный мной не проще? Ваш вариант какой-то говнокод, который потом никто не разберет ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2019, 13:51 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
alex-lscobalt_frogвариант предложенный мной не проще? Ваш вариант какой-то говнокод, который потом никто не разберет толсто)) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2019, 13:52 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
cobalt_frogalex-lsпропущено... Ваш вариант какой-то говнокод, который потом никто не разберет толсто)) вы знаете как работает FBI? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2019, 14:01 |
|
Уровни изолированности транзакций
|
|||
---|---|---|---|
#18+
cobalt_frogкакую то проблему.? Помимо обеспечения целостности данных обычно стоит задача эти данные как-то использовать. Сослаться на них FK, отобрать, изменить, соединить с данными других таблиц. Когда рассмотрите все потребные в Вашем случае варианты использования, сможете сами себе ответить на вопрос - является ли Ваш FBI решением или проблемой. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2019, 14:14 |
|
|
start [/forum/topic.php?fid=52&fpage=73&tid=1882331]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
54ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 256ms |
total: | 423ms |
0 / 0 |