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

Откуда:
Сообщений: 176
Друзья мои, может кто подскажет
если я в query analazer запускаю например update и в друг вижу, что он неправильный, могу ли я тут же это вернуть как было
(update уже прошел)

и как это реализовать или где можно почитать
спасибо
22 июн 06, 12:25    [2801487]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
20andrey06
Друзья мои, может кто подскажет
если я в query analazer запускаю например update и в друг вижу, что он неправильный, могу ли я тут же это вернуть как было
(update уже прошел)

и как это реализовать или где можно почитать
спасибо
Если перед эти начали транзакцию, то можно.

Почитать в БОЛ по слову transaction
22 июн 06, 12:28    [2801514]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
olegenty
Member

Откуда: Набережные Челны
Сообщений: 735
первой инструкцией делай
--begin tran

и запускай, выделив без комментария.

а дальше все твои инструкции. если устраивает результат, то
--commit tran
22 июн 06, 12:40    [2801585]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
20andrey06
Member

Откуда:
Сообщений: 176
olegenty
первой инструкцией делай
--begin tran

и запускай, выделив без комментария.

а дальше все твои инструкции. если устраивает результат, то
--commit tran



я это знаю, но я имею ввиду и делаю update, тут приходит мадам и говорит я неверно вам сказала, что делать, а update уже прошел, все изменилось

и тут на тебе, но при этом данные в базе не менялись с момента запроса, можно ли как-нибудь вернуть
22 июн 06, 13:35    [2801967]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
20andrey06
я это знаю, но я имею ввиду и делаю update, тут приходит мадам и говорит я неверно вам сказала, что делать, а update уже прошел, все изменилось

и тут на тебе, но при этом данные в базе не менялись с момента запроса, можно ли как-нибудь вернуть

Подтвержденную транзакцию можно отменить только рестором из бекапа.
22 июн 06, 13:42    [2802001]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
Dirty
Member

Откуда:
Сообщений: 118
бэкап есть? восстановить под другим именем и скопировать данные
22 июн 06, 13:45    [2802024]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
20andrey06
Member

Откуда:
Сообщений: 176
Dirty
бэкап есть? восстановить под другим именем и скопировать данные



А через журнал транзакций никак нельзя это реализовать?
просто давно я видел прикладную софтину, в которой была кнопка отката последней операции. как это там было реализовано на оракле я не знаю.

или журнал используется только для накатов устаревших данных?
22 июн 06, 15:08    [2802567]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
olegenty
Member

Откуда: Набережные Челны
Сообщений: 735
такие механизмы я реализую на уровне охренительно сложной внутренней структуры базы. реализую "псевдо-объектную" БД.
есть классы.
есть экземпляры классов.
есть состояние экземпляров классов.
есть таблицы с данными состояний экземпляров классов.

пользователь не имеет об этой структуре понятия, но все его действия реально приводят к изменению состояния экземпляра класса и добавлению новой записи в таблицу с данными этого состояния. в результате "убить" данные невозможно, всегда можно для экземпляра класса сделать откат к "правильному" состоянию.

такой подход хорош и плох одновременно: хорош, поскольку данные нельзя убить, хранится вся история по каждому экземпляру каждого класса. плох, потому что связи между объектами нереляционные, логику связей пришлось всю реализовывать руками (например - каскадное удаление/обновление связанных объектов; непорождение нового экземпляра, а восстановление удалённого, если нечто было удалено, а потом вновь создано с ключевыми реквизитами класса (иначе - "коллизия")); ещё минус - избыточность данных.
22 июн 06, 15:39    [2802785]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как отменить транзакцию  [new]
нуб987
Guest
Гавриленко Сергей Алексеевич
Подтвержденную транзакцию можно отменить только рестором из бекапа.

Но в журнале же все транзакции прописаны по времени.
Неужели нельзя сказать серверу: "откати-ка, дружок, все транзакции, сделанные после 16:00"?
Т.е. чтобы сервер просто обрезал хвост журнала, начиная с указанного времени.
5 окт 15, 21:34    [18238440]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
нуб987
Гавриленко Сергей Алексеевич
Подтвержденную транзакцию можно отменить только рестором из бекапа.

Но в журнале же все транзакции прописаны по времени.
Неужели нельзя сказать серверу: "откати-ка, дружок, все транзакции, сделанные после 16:00"?
Т.е. чтобы сервер просто обрезал хвост журнала, начиная с указанного времени.
Можно. Для этого надо иметь полный бэкап на дату до 16:00 и все последующие бэкапы лога до 16:00. А не имея ничего "неужели" сделать ничего нельзя.
5 окт 15, 22:48    [18238769]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
нуб987
Guest
Гавриленко Сергей Алексеевич
Можно. Для этого надо иметь полный бэкап на дату до 16:00 и все последующие бэкапы лога до 16:00

и плюс время на восстановление базы (если база большая, то это ого-го).
а вот так, чтобы быстренько обрезать лог "наживую", так нельзя?
6 окт 15, 00:29    [18238959]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
нуб987
а вот так, чтобы быстренько обрезать лог "наживую", так нельзя?
Расшифруйте свой термин "обрезать лог".

Подтвержденные транзакции откатить нельзя.
Если очень нужно, можете поискать инструменты третьих фирм, которые умеют генерировать скрипты компенсации изменений по содержимому журнала транзакций.
6 окт 15, 00:50    [18238977]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
нуб987
Гавриленко Сергей Алексеевич
Можно. Для этого надо иметь полный бэкап на дату до 16:00 и все последующие бэкапы лога до 16:00

и плюс время на восстановление базы (если база большая, то это ого-го).
а вот так, чтобы быстренько обрезать лог "наживую", так нельзя?
К большой базе обычно прилагается нормальный администратор, который не выдает права тем, кто может сломать все настолько, что надо откатывать все "после 16:00".
6 окт 15, 01:46    [18238990]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7582
20andrey06,

Change Tracking
6 окт 15, 01:54    [18238992]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
нуб987
а вот так, чтобы быстренько обрезать лог "наживую", так нельзя?
Теоретически этому ничего не мешает - но вот именно таким способом в MSSQL не реализовано.

Видимо, потому, что такой откат - это серьёзная операция, потеряются изменения, сделанные всеми пользователями, делаться часто не будет, поэтому посчитали, что достаточно того, что это возможно наказыванием бакапа полного+логов.
6 окт 15, 02:14    [18238996]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Relic Hunter
20andrey06,

Change Tracking
Вряд ли это поможет ТС, Change Tracking не записывает "обратных" операций.
6 окт 15, 02:16    [18238997]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
нуб987
Guest
Гавриленко Сергей Алексеевич
К большой базе обычно прилагается нормальный администратор

не нужно ёрничать. Помимо ненормальных администраторов еще бывают интересующиеся "а как это устроено; а что если; а почему вот так, а не так"
и не всегда, читая BOL, можно сразу сделать правильные выводы и все понять.

alexeyvg
Видимо, потому, что такой откат - это серьёзная операция, потеряются изменения, сделанные всеми пользователями, делаться часто не будет, поэтому посчитали, что достаточно того, что это возможно наказыванием бакапа полного+логов.

спасибо, примерно так себе и представлял.
6 окт 15, 03:22    [18239012]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
нуб987
Гавриленко Сергей Алексеевич
К большой базе обычно прилагается нормальный администратор

не нужно ёрничать. ...
и не всегда, читая BOL, можно сразу сделать правильные выводы и все понять.
А что еще остается делать по отношению к тем, которые ни BOL понять не могут, ни суть, еще 10 лет назад высказанную на форуме?
6 окт 15, 03:36    [18239017]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7582
Kстати, у оракла FLASHBACK DATABASE есть уже лет 10 как. Делает именно то, что спрашивал ТС. Что-же все так запущено в MS SQL?
6 окт 15, 03:43    [18239020]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
Alexander Ryndin
Member

Откуда:
Сообщений: 4919
Блог
Гавриленко Сергей Алексеевич
нуб987
пропущено...

не нужно ёрничать. ...
и не всегда, читая BOL, можно сразу сделать правильные выводы и все понять.
А что еще остается делать по отношению к тем, которые ни BOL понять не могут, ни суть, еще 10 лет назад высказанную на форуме?
Я бы не был так категоричен. То, что MSSQL не умеет это делать изкоробки не значит, что это сделать невозможно.
6 окт 15, 03:44    [18239021]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
нуб987
Guest
Гавриленко Сергей Алексеевич
А что еще остается делать по отношению к тем, которые ни BOL понять не могут, ни суть, еще 10 лет назад высказанную на форуме?

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

вот такой вот разговор....
в общем, итог ясен. Нет - так нет.
6 окт 15, 03:50    [18239022]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7582
нуб987
приезжаете вы в шиномонтаж колеса переобуть. Вам говорят: это колесо не откручивается.
Это вы в шиномонтаж на танке приехали, что-ли?
6 окт 15, 03:58    [18239024]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
Pavel1211
Member

Откуда: Екатеринбург
Сообщений: 205
нуб987,

Еще такой момент:
Создали вы бэкап лога и вся информация, попавшая в бэкап, удаляется из транлога...
Как в таком случае "обрезать лог наживую" ?
6 окт 15, 07:31    [18239111]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
ТС ,на форуме где-то проскакивала ссылка на самописное решение на основе чтения лога ,или сам скрипт есть даже...но там как я помню достаточное количество пограничных условий. Если вам повезет может и проскочите
6 окт 15, 09:38    [18239461]     Ответить | Цитировать Сообщить модератору
 Re: Как отменить транзакцию  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
А вообще странная ситуация... у вас есть команда апдейт, у вас есть набор записей..кроме вас никто ничего не менял...попробуйте придумать операцию обратную вашему апрдейту по факту то , если повезло- то данные ревертнуть можно.. если конечно так не тупо (поле =поле из другой таблицы)
6 окт 15, 09:40    [18239472]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить