![]() |
|
IT и Связь Обсуждение "айтишных" вопросов и средств связи |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#1 |
Пенсионер всея Ирландея
|
![]()
Дамы и Господа,
есть программуля которая запускает что-то типа "Select Lock,Store_Code where store code = 'mystore' FOR UPDATE" потом делает чо то и commit'ит их Store_code ключик в другую табличку ... записи по ключику в другой таблике тоже блокируются ? и вопрос Oracl'истам ... если между "For Update" и "commit" программуля падает.... то ...запесь будет как я понял залочена до какова то определенного значения ...нсли оно не 0 ... как это значение обзывается ?
__________________
невозможно испугать санкциями того, кому похер, так,что санкции против меня на этом форуме, мне феерически похер |
![]() |
![]() |
Зарегистрируйтесь или войдите под своим именем, чтобы спрятать этот рекламный блок |
![]() |
#2 |
Спам-робот
|
![]()
Я не ораклист, но коммон сенс подсказывает что другая табличка будет заблокирована только если между ними в явном виде создана ссылочная целостность (пошло как звучит
![]() Если нет линка - то блокируй вручную если боишься. Потеряешь правда знаменитое оракловское RDBWWDBR ![]() Если запрос слетает то транзакция откатывается - это основные принципы СУБД. Откат может быть по ошибке, по таймауту сервера, по потере соединения между клиентом и сервером и т.д. и т.п.
__________________
My Church is Black... |
![]() |
![]() |
![]() |
#3 |
Спам-робот
|
![]()
Да, запись (страница, екстенд, whatever) при откате будет залочена ровно на промежуток времени между началом транзакции и концом rollback.
__________________
My Church is Black... |
![]() |
![]() |
![]() |
#4 | |
Пенсионер всея Ирландея
|
![]() Цитата:
между FOR UPADTE и commit'ом програма завернула ласты, оракл транзакцию не откатил блин упинаю индусоф
__________________
невозможно испугать санкциями того, кому похер, так,что санкции против меня на этом форуме, мне феерически похер |
|
![]() |
![]() |
![]() |
#5 | ||
Новичок
|
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#6 | ||
Пенсионер всея Ирландея
|
![]() Цитата:
![]() Цитата:
__________________
невозможно испугать санкциями того, кому похер, так,что санкции против меня на этом форуме, мне феерически похер |
||
![]() |
![]() |
![]() |
#7 |
My name is Exaybachay
|
![]()
насколько я помню локиться будет только этот набор записей независимо от определенных связей до момента коммита.
но for update - это про локинг, а не про транзакцию как таковую. в смысле самой транзакции насколько я помню разницы между for update и без него нет. но, мне кажется, в оракле принято явным образом роллбакить в случае эксепшна, разве нет?
__________________
митьки никого не хотят победить |
![]() |
![]() |
![]() |
#8 |
My name is Exaybachay
|
![]()
> в другую на запись полей тоже небыло доступа .
как ты это конкретно проверял? по идее не должно быть возможности удалить запись из второй таблицы связанную с записями из нашей или поменять значение первичного ключа в этих записях (из второй таблицы, на которую ссылается наша). но это не от того что там во второй талбице записи залочены, а от того что они залочены в первой.
__________________
митьки никого не хотят победить |
![]() |
![]() |
![]() |
#9 | ||||
Спам-робот
|
![]() Цитата:
![]() Не могет такого быть ! А если явнороллбакить уже некому -что делать будем? Цитата:
Цитата:
Цитата:
Он вообще никогда не должен тебе дать возможность менять вторичные ключи напрямую - ты этим разрушишь его механизм сохранения целостности
__________________
My Church is Black... |
||||
![]() |
![]() |
![]() |
#10 |
My name is Exaybachay
|
![]()
> Не могет такого быть ! А если явнороллбакить уже некому -что делать
> будем? я могу сильно ошибаться, но по-моему если речь идет о едином запросе с коммитом в нем - то это надо делать внутри этого запроса. а если коммит внешний, то он по-моему вообще не сиквеловской командой делается, а средствами API. и открывать такую транзакцию по идее надо это... эксплиситли короче. тоже средствами APi. я правда об оракле очень туманное представление имею.
__________________
митьки никого не хотят победить |
![]() |
![]() |
![]() |
#11 | |
Участник
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#12 |
Спам-робот
|
![]()
Не, ты путаешь коммит и роллбак - коммит можно сделать автоматичный, т.е. каждая строка кода будет как неявная транзакция пока ты явно не напишешь begin tran.
внешний коммит через АПИ - это всего лишь посылка АПИ commit tran серверу. Если клиент слетел то роллбак будет сделан сразу после того как менеджер соединений обнаружит этот факт. И rollback всегда автоматичный - иначе очень быстро случаться опаньки. Кстати я по этому поводу имел очень познавательную неформальную дисскуссию с хлопцами из МС - а что будет если во время роллбака сервер влетит в деадлок ? Теоретически из этой ситуации вообще нет выхода - даже перезагрузка не спасет. В итоге мне было заявлено что такое не случиться вообще никогда - но почему мы тебе не скажем ![]()
__________________
My Church is Black... |
![]() |
![]() |
![]() |
#13 | |
Спам-робот
|
![]() Цитата:
каждый select может восприниматься сервером как begin tran select ... commit Ну да я это уже говорил.
__________________
My Church is Black... |
|
![]() |
![]() |
Зарегистрируйтесь или войдите под своим именем, чтобы спрятать этот рекламный блок |
![]() |
#14 | ||
Участник
|
![]() Цитата:
Хотя с Оракл API я не очень хорошо знаком... на 100% не гарантирую, может просто не видел такого. |
||
![]() |
![]() |
![]() |
#15 | |
Спам-робот
|
![]() Цитата:
Тогда следует понимать что если в скрипте есть COMMIT то все что от него и до начала или предыдущего коммита будет транзакцией, если коммита нет вообще то каждая операция будет сама себе транзакция ? Женя, давай код в студию. Очень интересно как это скрипт с коммитом слетел а половина транзакции закоммитчилось. Это как часть заряда электрона.
__________________
My Church is Black... |
|
![]() |
![]() |