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

Откуда: Москва
Сообщений: 1955
2 yuniki
Пример неудачен. Во-первых, много раз уже обсуждалось, почему плохо открывать транзакции при редактироании на клиенте. А во-вторых, потому что, тем ни менее, никто не запрещает вам открыть одну транзакцию, в которой "будут правится пресловутые наклаждными на экране", и другую (в отдельном потоке) - где будут правятся справочники. На кой ляд это нужно (см. хороший вопрос Alexey Sh) это другой вопрос. То, что вы называете автономными транзакциями - чем они отличаются от обычных транзакций? Или вы полагаете, что MSSQL может поддерживать только одну транзакцию одновременно?

2 BootMaker
if @@TRANCOUNT >= 1
if @otran > 0 or @err_num >= 0 -- результат выполнения
while @@TRANCOUNT > @otran COMMIT TRANSACTION
else
ROLLBACK TRANSACTION

Вам не это надо?


Nobody faults but mine... (LZ)
28 янв 05, 15:13    [1282601]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
yuniki
Member

Откуда:
Сообщений: 1171
Alexey Sh >2 yuniki : Отлично! И должны мы увидеть в текущей транзакции отредактированный справочник?
Вопрос странный - почему не должны?
Вообще , что в примере странного .
aag >
Пример неудачен. Во-первых, много раз уже обсуждалось, почему плохо открывать транзакции при редактироании на клиенте. А во-вторых,
Во-первых, почему на клиенте, речь ведь идет о том, чего нет в MsSQL. Да и честно говоря, я не совсем понял, что Вы имеете ввиду - "открыть транзакции на клиенте"
А во-вторых не подтверждает то, что пример неудачный. А в Access-ADP-MsSQL я ,например, намаялся с несколькими коннектами, имитируя, то , что могло бы быть сделано на сервере.
28 янв 05, 16:09    [1282991]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
aag
Member

Откуда: Москва
Сообщений: 1955
Читаем сначала:
автор
У пользователя на экране находится окно с пресловутыми наклаждными, каждая из которых правится в свой транзакции


Итак, получается что вы хотите при начале редактирования накладных на клиенте, открывать транзакцию. Так? И какова тогда будет продолжительность такой транзакции?

автор
Вообще , что в примере странного .


автор
A transaction is a sequence of operations performed as a single logical unit of work. A logical unit of work must exhibit four properties, called the ACID (Atomicity, Consistency, Isolation, and Durability) properties, to qualify as a transaction:

Isolation
Modifications made by concurrent transactions must be isolated from the modifications made by any other concurrent transactions

Что произойдет, если я удалю ту запись из справочника, на id-шку которой я только что изменил поле в накладной? Как это будет согласовываться с требованием изоляции?
ИМХО, вы сами создаете себе трудности.


Nobody faults but mine... (LZ)
28 янв 05, 18:40    [1283643]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
yuniki
Member

Откуда:
Сообщений: 1171
aag >
Ну это же все решается , причем стандартными механизмами (и хорошо бы ,как я уже говорил, среди них иметь и автономные транзакции).

1)
И какова тогда будет продолжительность такой транзакции?

Продолжительность будет нормально в соответсвии с пессимистическим способом редактирования.
Сделать его можно легко даже в MsSQL через сопутствующую мютексную таблицу, когда вы не допустите к своей записи только ее писателей, но не читателей.
Но это уже разговор о пессимистическом редактировании. Если Вы не можете его организоать, то - это другое дело.

2)
Что произойдет, если я удалю ту запись из справочника, на id-шку которой я только что изменил поле в накладной? Как это будет согласовываться с требованием изоляции?

Сработает констрайнт, который Вам скажет , что удалять нельзя, т.к. имеются связанные записи.


И еще раз. Сделать это , если нет интсрументальных средств сложнее, но не является невозможным.
А трудности не я сам себе создаю (хотя ,безусловно, и так можно ,причем заметьте - всегда , повернуть дело) ,
а это все есть потребности удобной для пользователей (читай эффективной) системы -
и пессимистическое редактирование и параллельное редактирование справочников.
Да если я их лишу паралельного редактирования справочников, меня живьем съедят. Удобств им всегда не хватает .
28 янв 05, 20:21    [1283813]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
Alexey Sh
Member

Откуда: SPB
Сообщений: 1930
Пессимистическая блокировка средствами СУБД - не лучший вариант (кажется в проектировании обсуждалась задачка резервирования билетов)
29 янв 05, 11:30    [1284424]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
Alexey Sh
Member

Откуда: SPB
Сообщений: 1930
Ещё вопрос. А какие справочники нуждаются в параллельном редактировании?
29 янв 05, 11:41    [1284434]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
yuniki
Member

Откуда:
Сообщений: 1171
1) А какие же еще у нас м.б. средства для блокировки ?
2) Ну это мы как-то так залезаем в предметную область, но это вопросы, которые вроде как простые ...
Справочники любые , с которыми связана накладная , ну или вообще которые пользователь захочет параллельно редактировать. Я ж говорю - если бы я им предложил выйти из накладной, чтобы зайти через головное меню что-то посмотреть в справочнике (ну и исправить возможно) , и потом обратно вернуться в накладную и так , возможно, им требуется несколько раз на одной накладной, - меня б уже убили.
29 янв 05, 14:14    [1284594]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
Alexey Sh
Member

Откуда: SPB
Сообщений: 1930
п 1. Какие средства для блокировки? - прикладные. Очень грубо - заказ № x обрабатывается оператором Y, обработка начата в момент Z, соединение оператора x с базой - активно. Информация ою этих фактах хранится собственно в данных.

п2. А с какого бодуна оператор выписывающий накладные имеет право что-то редактировать в товарном справочнике? Смотреть - без проблем (в пределах предоставленных прав) - исправлять - не в его компетенции. Список атрибутов товара давно в экран не лезет. Хотя этот вопрос уже не к программиированию БД имеет отношение, а к организации бизнес-процессов.
30 янв 05, 00:50    [1284951]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
yuniki
Member

Откуда:
Сообщений: 1171
Ну по п2 говорим об одном же.

А по поводу :

п 1. Какие средства для блокировки? - прикладные. Очень грубо - заказ № x обрабатывается оператором Y, обработка начата в момент Z, соединение оператора x с базой - активно. Информация ою этих фактах хранится собственно в данных.

мне кажется, что ни только я , но и никто тут не поймет, что сказано.Только автора просить объяснять остается , что он хотел сказать по поводу :


- ссимистическая блокировка средствами СУБД - не лучший вариант (кажется в проектировании обсуждалась задачка резервирования билетов)
- а какие же еще у нас м.б. средства для блокировки ?
30 янв 05, 18:12    [1285461]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
aag
Member

Откуда: Москва
Сообщений: 1955
Мне кажется, пора вернуться к началу.

автор
У пользователя на экране находится окно с пресловутыми наклаждными, каждая из которых правится в свой транзакции


Для меня данная фраза означает - поднимается окно с накладными, и, по наступлению какого-то события (нажатие на кнопку и пр.) открывается транзакция. Которая должна закрываться при сохранении данных в окне.
Наиболее уязвимый момент в таком подходе - длительность такой транзакции зависит от длительности редактирования, т.е., от действий пользователя. И в принципе, непредсказуема.
И никакие мьютексы здесь не спасут - единственно что они смогут, это обнаружить существование такого юзера, 2-ой час редактирующего накладную. Все это уже обсуждалось сотни раз...

автор
Сработает констрайнт, который Вам скажет , что удалять нельзя, т.к. имеются связанные записи.

А если такого констрайнта нет? А если там ON DELETE CASCADE ?
Вы пишите о том, что автономные транзакции полезны, "...когда налицо имеются независимые по сути работы..." Но вся штука в том, что сервер не всегда может различить независимы ли эти работы или нет. И введение таких транзакций может привести (не обязательно приведет, но может) к тому, что состояние после rollback будет не совпадать с тем, которое было до начала транзакции.
Как у Oracle - не знаю, м.б он откатывает обе транзакции. А м.б. считается что такая несогласованность допустима.

А главное - я совершенно не понимаю, зачем вам одновременные транзакции на редактирование справочников и накладных. ИМХО, в один момент времени юзер все равно меняет что-то одно.

Nobody faults but mine... (LZ)
31 янв 05, 13:30    [1287068]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Поскольку это полноценные и независимые транзакции, такая несогласованность ПОЛНОСТЬЮ лежит на совести разработчика. Разумеется применять автономные транзакции таким образом неправильно и глупо, но есть случаи когда без них обойтись довольно тяжело (и никаких несогласованностей не возникает ;)

Примеры:
1. Аудит ПОПЫТОК изменения данных
2. Аудит SELECT-ов в Oracle 8i
3. Выполнение DDL из триггеров (сто раз подумать прежде чем делать :)

В общем это не очень прикладные задачи. И разумеется не стоит их использовать аналогично вложенным транзакциям MS SQL. Сразу возникают проблемы с согласованностью данных.

Вполне допускаю, что в MS SQL необходимость в автономных транзакциях никогда не возникнет. Эта фича СПЕЦИФИЧНА для Oracle и хорошо решает некоторые его проблемы. Для MS SQL она может быть АБСОЛЮТНО не востребованной.
1 фев 05, 09:37    [1289334]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
WiRuc
Member

Откуда: Воронеж
Сообщений: 1280
Gluk (Kazan)
Вполне допускаю, что в MS SQL необходимость в автономных транзакциях никогда не возникнет. Эта фича СПЕЦИФИЧНА для Oracle и хорошо решает некоторые его проблемы. Для MS SQL она может быть АБСОЛЮТНО не востребованной.


Ну почему же? Для аудита в MSSQL ох как бы пригодились автономные транзакции. Собственно, насколько я в курсе, и в Oracle их используют в основном только с этой целью.
1 фев 05, 11:29    [1289752]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
yuniki
Member

Откуда:
Сообщений: 1171
aag >И никакие мьютексы здесь не спасут - единственно что они смогут, это обнаружить существование такого юзера, 2-ой час редактирующего накладную.
Да хоть 2-й день.
Все это уже обсуждалось сотни раз...
Да хоть тысячи. Люди,видимо, просто не признают право на существование пессимистического блокирования.

Просто примите, как данность, что а природе СУЩЕСТВУЕТ пессимистическое редактирование. Зачем же отрицать это обстоятельство ?
Т.е Вы же , не замечая того , отрицаете это.
А раз так, то - в MS SQL единственным способом провести его, не тормозя читателей , является блокирование независимого мютекса - сама таблица при этом не блокируется, при всей сколь угодно длинной транзакции.
Конкурирующие писатели ли же как и положено увидят , кто виноват из всплывшего сообщения на экране и что им делать - звонить по такому-то номеру и т.п.

А если такого констрайнта нет? А если там ON DELETE CASCADE ?

А если такого констрейнта нет, то значит опять же , Вы неправильно проектируете бизнес - логику.
Нельзя же удалять все эти долбанные накладные за все времена и народы, если кто-то решил удалить запись в справочнике товара, фигурировавшего во всех этих накладных.

А главное - я совершенно не понимаю, зачем вам одновременные транзакции на редактирование справочников и накладных. ИМХО, в один момент времени юзер все равно меняет что-то одно.

Чтобы не вылезать все время из редактирования накладной и возвращаться обратно, а одновременно видеть на экране и накладную и справочник товаров и прочие.

Итого :

В проблема вырисовывается в том, чтоб признать, что весьма часто предметная область это требует.
Но это, если нет понимания, наверно сейчас с помощью этих записок и не возможно объяснить вообще.
Просто ПОПЫТАЙТЕСЬ.
1 фев 05, 13:40    [1290449]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
WiRuc
Gluk (Kazan)
Вполне допускаю, что в MS SQL необходимость в автономных транзакциях никогда не возникнет. Эта фича СПЕЦИФИЧНА для Oracle и хорошо решает некоторые его проблемы. Для MS SQL она может быть АБСОЛЮТНО не востребованной.


Ну почему же? Для аудита в MSSQL ох как бы пригодились автономные транзакции. Собственно, насколько я в курсе, и в Oracle их используют в основном только с этой целью.


Ну как я уже сказал не только с этой целью ;)
1 фев 05, 13:44    [1290468]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
yuniki

В проблема вырисовывается в том, чтоб признать, что весьма часто предметная область это требует.
Но это, если нет понимания, наверно сейчас с помощью этих записок и не возможно объяснить вообще.
Просто ПОПЫТАЙТЕСЬ.

А вы наконец попытайтесь понять что заявления
"невозможно ... организовать в блокировочнике по сравнению с версионником" и
"сложнее ... организовать в блокировочнике по сравнению с версионником"
эти два разных понятия.
1 фев 05, 13:57    [1290535]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
WiRuc
Member

Откуда: Воронеж
Сообщений: 1280
2Gluk> Ну как я уже сказал не только с этой целью ;)
Я же написал, что "насколько я в курсе". Это не значит, что по другому их нельзя активно использовать.
1 фев 05, 14:01    [1290557]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
yuniki
Member

Откуда:
Сообщений: 1171
Glory>
А вы наконец попытайтесь понять что заявления
"невозможно ... организовать в блокировочнике по сравнению с версионником" и
"сложнее ... организовать в блокировочнике по сравнению с версионником"
эти два разных понятия.


Ну и к ЧЕМУ такие наезды с боку ?
Кстати, я о том же и говорил выше :
И еще раз. Сделать это , если нет интструментальных средств сложнее, но не является невозможным.
1 фев 05, 14:19    [1290645]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
yuniki
Glory>
А вы наконец попытайтесь понять что заявления
"невозможно ... организовать в блокировочнике по сравнению с версионником" и
"сложнее ... организовать в блокировочнике по сравнению с версионником"
эти два разных понятия.


Ну и к ЧЕМУ такие наезды с боку ?
Кстати, я о том же и говорил выше :
И еще раз. Сделать это , если нет интструментальных средств сложнее, но не является невозможным.

К тому что тупить не надо
1 фев 05, 14:20    [1290651]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
SysRq
Member

Откуда: Москва
Сообщений: 1869
Glory
yuniki

К тому что тупить не надо


Вах!!! Довели Glory!!! В первый раз такое вижу!
1 фев 05, 17:59    [1291804]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
yuniki
Member

Откуда:
Сообщений: 1171
2 Glory>
тупить не надо
Для невообразимо (аж до не заметности) острых должен заметить , что
Автор ставит вопрос о том, что понимать под вложенными транзакциями в MsSQL.
Ваш же первый ответ был, что все работает как описано в BOL - кто бы спорил ;), В огороде бузина,а в Киеве дядька.
Вторым был таран одного из участников, обсуждавшего тему и ничего не подозревшего о том, что Ваши пули могут попадать не только в молоко.

PS. Может , уже хватит оффтопа ? Или продолжим ?
Ой, чувствую, сейчас услышу : "- сам дурак" .
1 фев 05, 18:34    [1291995]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
thrashead
Member

Откуда: Россия, Санкт-Петербург
Сообщений: 722
yuniki,
Подниму-ка тему. Интересно было почитать столь конструктивный спор/диалог, но хотелось бы услышать от уважаемых членов форума некоторые советы из личного опыта, "best practices", так сказать. Задача: логирование (аудит) действий пользователей, операций по добавлению/изменению/удалению данных в БД, сообщения об ошибках и т.д. Информация должна сохраняться в специальной таблице.
Как уже было сказано, в MS SQL Server нет автономных транзакций, подобных тем, что есть Oracle. Мне известно несколько способов "обойти" транзакцию:
а) табличная переменная. Приём хорош, если всё дело происходит внутри одной процедуры, и нет цепочки вызовов других процедур. Условный недостаток: запись лога в постоянную таблицу происходит после транзакции.
б) CLR. Идёт обращение к CLR, которая в свою очередь вызывает процедуру записи в лог вне транзакции. Некоторый недостаток: ещё одна CLR, которую придётся поддерживать, дописывать при необходимости и т.д.
в) loopback linked server. Достаточно простой и, на мой взгляд, изящный способ. Кто-нибудь знает, какие недостатки тут могут быть?

Реализовал вариант "в". Проверил, работает. Однако, "свыше" было сказано "убрать это г..." без дополнительных объяснений.

Ещё варианты есть?
14 сен 12, 10:51    [13162744]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
thrashead
Ещё варианты есть?
Единственный работающий способ - из клиента; остальные перечисленные способы будут пропускать записи в лог при некоторых ошибках (например, ошибках компиляции). Увы.

Если это не недостаток, то в принципе вариант 2 и 3 нормальные.
14 сен 12, 11:25    [13163073]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
thrashead
Member

Откуда: Россия, Санкт-Петербург
Сообщений: 722
alexeyvg,
Спасибо! Похоже, придётся ещё одну CLR писать, регистрировать, а потом ещё и поддерживать...
14 сен 12, 11:33    [13163172]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
А почему не "loopback linked server"?
14 сен 12, 13:54    [13164768]     Ответить | Цитировать Сообщить модератору
 Re: "Вложенные транзакции" или зачем нужна эта профанация ?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
thrashead
Реализовал вариант "в". Проверил, работает. Однако, "свыше" было сказано "убрать это г..." без дополнительных объяснений.
Лять. Плохо что вообще допустили что начальство суёт нос в технические вопросы.
14 сен 12, 13:55    [13164785]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить