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

Откуда:
Сообщений: 422
Я знаю приложения где это нужно. Тем не менее может ли быть такая функция широко востребована?
23 дек 04, 01:12    [1202448]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
vybegallo
Guest
Example ?
23 дек 04, 01:16    [1202450]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
Вложенные транзакции?
(аксес, фокс)
23 дек 04, 01:20    [1202453]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
хотя конечно интереснее не "откат закоммиченых транзакций", а как раз наоборот - "коммит зароллбеченых транзакий"
23 дек 04, 01:22    [1202454]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
serg99
Member

Откуда:
Сообщений: 422
vybegallo
Example ?


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

Но и в обычных системах (торговля, маркетинг), скажем какая нибудь девочка взяла и поубивала в базе N-ое количество клиентов, а потом вдруг вспомнила "а что же я наделала". Если бы у нее была кнопка "Undo" облегчило бы это задачу восстановления удаленных данных? В общем случае пользователь может вспомнить, что он сделал что то не так несколько транзакций назад и может захотеть отменить действия именно этой транзакции (или нескольких). То есть речь идет о поддержке UNDO/REDO на уровне сервера БД, а не в приложении.
23 дек 04, 12:58    [1203885]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
Vadim_Maximov
Member

Откуда: Москва
Сообщений: 3571
Это вопросы проектирования системы + политики прав доступа.
23 дек 04, 13:01    [1203898]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32882

Привет, Vadim_Maximov!
Ты пишешь:

Vadim_Maximov
Это вопросы проектирования системы + политики прав доступа.

Поддерживаю.
Достаточно при проектировании базы чётко разграничить понятия
"изъятия документа из списка" и "уничтожения документа".

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.1

23 дек 04, 13:12    [1203975]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
Alex.Czech
Guest
Вообще говоря, непонятно, как можно откатить из набора транзакций
T1, T2, T3, T4, ..., TN, последовательных по моменту коммита, транзакцию T3, не откатив T4 и все что за ней следует. Возможность откатиться до тразакции T3 есть во многих СУБД, например в Оракл

restore database until <SCN>
23 дек 04, 13:13    [1203983]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
Vadim_Maximov
Member

Откуда: Москва
Сообщений: 3571
Alex.Czech
Вообще говоря, непонятно, как можно откатить из набора транзакций
T1, T2, T3, T4, ..., TN, последовательных по моменту коммита, транзакцию T3, не откатив T4 и все что за ней следует. Возможность откатиться до тразакции T3 есть во многих СУБД, например в Оракл

restore database until <SCN>

Угу, только откатятся ВСЕ транзакции.
Да и операция восстановления - сама по себе довольно дорогостоящая по времени простоя...
23 дек 04, 13:18    [1204019]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
Alex.Czech
Guest
Vadim_Maximov
Alex.Czech
Вообще говоря, непонятно, как можно откатить из набора транзакций
T1, T2, T3, T4, ..., TN, последовательных по моменту коммита, транзакцию T3, не откатив T4 и все что за ней следует. Возможность откатиться до тразакции T3 есть во многих СУБД, например в Оракл

restore database until <SCN>

Угу, только откатятся ВСЕ транзакции.
Да и операция восстановления - сама по себе довольно дорогостоящая по времени простоя...


Еще раз - вообще говоря непонятно как можно откатить транзакцию T3, не откатив транзакцию T4, если T4 была закоммичена позже. Мне лень расписывать почему, но если хотите - можно привести массу примеров :)
23 дек 04, 13:19    [1204025]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
Vadim_Maximov
Member

Откуда: Москва
Сообщений: 3571
Alex, мы имеем в виду одно и тоже, просто недопоняли друг друга.
Я и имел в виду, что откатившись до T3 мы теряем T4 и все последующие.
Т.е. частичный откат (T4 не откатываем, а Т3 - да) выполнить невозможно. Что вообщем-то и логично..
23 дек 04, 13:22    [1204045]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
Alex.Czech
Guest
Ну да. Я только хотел подчеркнуть что частичный откат выполнить невозможно даже не технически (никто такую фичу не сделал), а скорее по идейным соображениям.

С другой стороны, в Оракл есть возможность выполнять т.н. flashback-запросы, так что можно сказать что нужная автору фича там есть :)
23 дек 04, 13:30    [1204094]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
serg99
Member

Откуда:
Сообщений: 422
Vadim_Maximov
Alex, мы имеем в виду одно и тоже, просто недопоняли друг друга.
Я и имел в виду, что откатившись до T3 мы теряем T4 и все последующие.
Т.е. частичный откат (T4 не откатываем, а Т3 - да) выполнить невозможно. Что вообщем-то и логично..


Приведу другой пример. Допустим в базе хранится чертеж над которым коллективно работают несколько клиентских приложений. Я условно говоря нарисовал треугольничек потом круг и потом квадрат. Затем вспомнил что треугольник я нарисовал зря и хочу откатить именно "рисование этого треугольника", при этом естественно мой круг и квадрат должны оставаться на месте, и этот откат так же не должен затрагивать то, что после моего неправильного треугольника нарисовали другие клиенты. Естественно если до того как я хочу откатить свой треугольник в него уже кто то другой залез (скажем поменял форму), то откат не должен дозволяться так как треугольник стал "продуктом" двух пользователей и не может быть просто так откатан одним из них.

Пример условный, поэтому не надо советовать взять этот треугольник и просто удалить (это можно сделать всегда, даже если треугольник редактировался до этого многими клиентами). При этом кстати тот же вопрос: удалив треугольник и сделав еще что нибудь я вспоминаю что зря я удалил треугольник и хочу его восстановить (не затрагивая то что сделано другими клиентами после неудачного удаления).
23 дек 04, 13:53    [1204218]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
В седьмом постгресе была возможность посмотреть таблицу, какой она была в указанный момент времени. То есть, вы могли бы посмотреть этот треугольник, каким он был раньше и скопировать его в настоящее время.

Такую же функциональность можно сделать на любой СУБД - надо ничего не удалять и хранить историю изменений.
23 дек 04, 13:57    [1204255]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
Alex.Czech
Guest
serg99
Vadim_Maximov
Alex, мы имеем в виду одно и тоже, просто недопоняли друг друга.
Я и имел в виду, что откатившись до T3 мы теряем T4 и все последующие.
Т.е. частичный откат (T4 не откатываем, а Т3 - да) выполнить невозможно. Что вообщем-то и логично..


Приведу другой пример. Допустим в базе хранится чертеж над которым коллективно работают несколько клиентских приложений. Я условно говоря нарисовал треугольничек потом круг и потом квадрат. Затем вспомнил что треугольник я нарисовал зря и хочу откатить именно "рисование этого треугольника", при этом естественно мой круг и квадрат должны оставаться на месте, и этот откат так же не должен затрагивать то, что после моего неправильного треугольника нарисовали другие клиенты. Естественно если до того как я хочу откатить свой треугольник в него уже кто то другой залез (скажем поменял форму), то откат не должен дозволяться так как треугольник стал "продуктом" двух пользователей и не может быть просто так откатан одним из них.

Пример условный, поэтому не надо советовать взять этот треугольник и просто удалить (это можно сделать всегда, даже если треугольник редактировался до этого многими клиентами). При этом кстати тот же вопрос: удалив треугольник и сделав еще что нибудь я вспоминаю что зря я удалил треугольник и хочу его восстановить (не затрагивая то что сделано другими клиентами после неудачного удаления).


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

Возвращаясь к СУБД - если мы откатываем транзакцию, мы должны быть уверены что переходим в целостное состояние БД так же как и при накате оной. Однако механизма проверки, так ли это, для отката транзакции не существует (в тех БД которые я знаю, я уверен что и в тех что я не знаю - тоже) - гарантом этого факта является существующий механизм проверки этого при накате транзакции. Таким образом, ради внедрения такой, неясно насколько нужной, фичи потребуется очень серьезная доработка ядра системы, приводящая вдобавок к перманентному замедлению любой операции отката
23 дек 04, 14:04    [1204289]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
Alexey Rovdo
Member

Откуда: Москва
Сообщений: 913
Думаю, что проблема решается, если вы не удаляете/изменяете из базы записи, а только помечаете их как удаленные/измененные (возможно также уточняете кем). Вопрос правда в том, что предлагаемая задача требует наличия сложных механизмов (написанных вами приложений) для управления (кто и как будет задавать параметры отката, коих будет очень много).

В Versant VDS (объектная база данных) есть возможность работы с версионностью объектов. Т.е. для каждого объекта, хранимого в базе, можно отследить граф его различных версий (к каждой версии можно получить доступ). Можно создавать новые версии на базе любых старых и сливать несколько старых версий в одну новую. Но проблемы интерфейса для управления столь замысловатыми откатами это не решает - его все равно прийдется писать самому.
23 дек 04, 15:00    [1204689]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
vybegallo
Guest
serg99
vybegallo
Example ?


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

Но и в обычных системах (торговля, маркетинг), скажем какая нибудь девочка взяла и поубивала в базе N-ое количество клиентов, а потом вдруг вспомнила "а что же я наделала". Если бы у нее была кнопка "Undo" облегчило бы это задачу восстановления удаленных данных? В общем случае пользователь может вспомнить, что он сделал что то не так несколько транзакций назад и может захотеть отменить действия именно этой транзакции (или нескольких). То есть речь идет о поддержке UNDO/REDO на уровне сервера БД, а не в приложении.


При этом после того, как девочка поубивала клиентов, но перед тем, как спохватилась, менеджером другого подразделения был выполнен отчет по клиентам. Девочка откатила транзакцию. Откуда менеждер узнает, что его отчет неверен ?
23 дек 04, 18:00    [1205759]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67390
Блог
www.fun4me.narod.ru
В седьмом постгресе была возможность посмотреть таблицу, какой она была в указанный момент времени. То есть, вы могли бы посмотреть этот треугольник, каким он был раньше и скопировать его в настоящее время.

Это и есть упомянутые flashback queries в Оракле.
23 дек 04, 18:04    [1205770]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67390
Блог
Alex.Czech
Еще раз - вообще говоря непонятно как можно откатить транзакцию T3, не откатив транзакцию T4, если T4 была закоммичена позже.

Чисто технически - понятно, что существуют случаи, когда это возможно. Вопрос в том, что вряд ли в обычном режиме сохраняется необходимая для этого информация - например, в Oracle для теоретической возможности выполнения этого, полагаю, придется выставлять каждой транзакции уровень изоляции repeatable read, а возможно - даже serializable. Поскольку реальные приложения такой архитектуры вряд ли существуют - ....
23 дек 04, 18:07    [1205780]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
Alex.Czech
Guest
softwarer
Alex.Czech
Еще раз - вообще говоря непонятно как можно откатить транзакцию T3, не откатив транзакцию T4, если T4 была закоммичена позже.

Чисто технически - понятно, что существуют случаи, когда это возможно. Вопрос в том, что вряд ли в обычном режиме сохраняется необходимая для этого информация - например, в Oracle для теоретической возможности выполнения этого, полагаю, придется выставлять каждой транзакции уровень изоляции repeatable read, а возможно - даже serializable. Поскольку реальные приложения такой архитектуры вряд ли существуют - ....


Гм. Я полагал что в Оракле и так все работает в режиме REPEATABLE READ всегда... разве я неправ ? Ведь любой read в Оракл будет очень даже repeatable :)
23 дек 04, 18:20    [1205815]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67390
Блог
Alex.Czech
Гм. Я полагал что в Оракле и так все работает в режиме REPEATABLE READ всегда... разве я неправ ?

По умолчанию Oracle работает в режиме READ COMMITTED. Можно ли в настройках экземпляра задать другой уровень изоляции по умолчанию - наверное, можно (лень проверять), но это настолько не принято, что я назову это заведомо кривым подходом - надеюсь, понятно, какие проблемы вызывает "нестандартная настройка сервера".
23 дек 04, 18:43    [1205870]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
serg99
Member

Откуда:
Сообщений: 422
vybegallo

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


Так ведь его отчет верен :-). У отчета есть дата/время его создания, соответственно верность/неверность отчета относится только к этому времени. Вы же не будете запрещать модификацию базы данных из-за того что сделанный когда то отчет становится при этом out-of-date.

Верность/неверность отчета поределяется его соответствием/несоответствием текущему состоянию данных в БД (подразумевается что данные целостны и логически не противоречивы). БД не имеет каких либо механизмов определить верность/неверность собственно своих данных (в смысле их соответствия объективной реальности). Соответственно девочка поубивавшая записи, вместо того что бы бежать к администратору просить исправить ее ошибку (за что у нее могут понизить премию), скорее всего просто никому ничего не скажет и никакой менеджер никогда ничего не заметит (разве что случайно). Была бы кнопка UNDO, то этой проблемы не было бы. Разграничение доступа решает проблему частично, потому что любой человек может ошибиться в рамках предоставленных ему прав.

То есть насколько я понял каких то простых возможностей пользователю откатить одну из своих уже закоммиченных транзакций существующие СУБД не предоставляют?
23 дек 04, 22:48    [1206178]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
vybegallo
Guest
Вы правильно поняли - стандартных средств нет и быть не должно. ПОскольку это противоречит самой идее транзакций, как средству поддержки непротиворечивости и интегральной целостности данных.
К примеру, отчет был - о клиентах, переводящих суммы больше $x.
И каким образом у вас в базе то исчезают, то появляются некоторые клиенты, и нет ли в этом преступного умысла - будете рассказывать прокурору :-)
23 дек 04, 23:08    [1206187]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
AI
Member

Откуда: Москва
Сообщений: 2817
В оракле 9 и выше есть такая возможность. Посмотрите на workspace management.
24 дек 04, 10:22    [1206727]     Ответить | Цитировать Сообщить модератору
 Re: Существуют ли СУБД с возможностью отката закоммиченных транзакций? Нужно ли это?  [new]
serg99
Member

Откуда:
Сообщений: 422
vybegallo
Вы правильно поняли - стандартных средств нет и быть не должно. ПОскольку это противоречит самой идее транзакций, как средству поддержки непротиворечивости и интегральной целостности данных.


Это не противоречит выше названной идее. Как до транзакции так и после нее данные были целостные и непротиворечивые. Соответственно откат закомиченной транзакции это так же транзакция переводящая БД в целостное и непротиворечивое состояние при условии отмены действий вызванных откатываемой транзакцией.
24 дек 04, 13:46    [1207687]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить