Luca
Модератор
Зарегистрирован: 05.10.2012
Сообщений: 1259
Во время выполнения одного запроса ошибся и сформировал не правильный запрос UPDATE. В результате один из столбцов оказался заполнен неверными данными. Бекап не делал. Есть ли способ откатить состояние БД назад

По идее же лог транзакций должен храниться, значит его можно к предыдущему состоянию вернуть. Однако волшебной кнопки в "вернуть все как было" в MSQL SQL Management Studio я не нашел.

Как быть
Теги: SQL  
Последнее изменение: Luca, 13.01.2014 11:35

Комментарии10

0 0

Rector
Золотой пользователь
Зарегистрирован: 22.10.2012
Сообщений: 692
Тут есть спецы по базам божественной корпорации Подскажете Или вы только языком гавно молоть умеете -))
-- Зри в корень!

0 0

Luca
Модератор
Зарегистрирован: 05.10.2012
Сообщений: 1259
Проблему к счастью смог решить, но вопрос остается открытым. Просто не вижу принципиальной разницы почему Photoshop может изменения откатывать, а SQL нет.
-- тишина - самый громкий звук

0 0

Rector
Золотой пользователь
Зарегистрирован: 22.10.2012
Сообщений: 692
Сообщение от Luca Проблему смог решить, но вопрос остается открытым

Никому здесь не говори как ты её решил. Пусть гавномёты эксперты предложат свои решения. Интересно будет наблюдать -)
-- Зри в корень!

0 0

kenzzzooo
Пользователь
Зарегистрирован: 09.10.2012
Сообщений: 391
restore database <имя_базы> from <имя_копии_журнала> with recovery|norecovery, stopat = {d, 'дата_время'}
-- Денис: Если тебе захочется запустить Пэинт через командную строку, ты что будешь набирать Катерина: О_о телефон психбольницы
edited: kenzzzooo, 13.01.2014 17:24

0 0

kenzzzooo
Пользователь
Зарегистрирован: 09.10.2012
Сообщений: 391
а вообще, если речь идет о транзакции, то лучше ее маркировать типа:

begin tranz <имя> with mark <метка>

а потом, первая строка не указана в прошлом посте:

use master
restore database <имя_базы> from <откуда> with file = 1 (например), norecovery
restore log <имя_базы> from <откуда> with file = 2, recovery, stopatmark = <метка>
-- Денис: Если тебе захочется запустить Пэинт через командную строку, ты что будешь набирать Катерина: О_о телефон психбольницы

0 0

kenzzzooo
Пользователь
Зарегистрирован: 09.10.2012
Сообщений: 391
Сообщение от Luca Просто не вижу принципиальной разницы почему Photoshop может изменения откатывать, а SQL нет.

нда... не, ну разницы никакой, естественно :) и как, стесняюсь спросить, но спрошу, это видится
-- Денис: Если тебе захочется запустить Пэинт через командную строку, ты что будешь набирать Катерина: О_о телефон психбольницы

0 0

Павел
Пользователь
Зарегистрирован: 26.09.2013
Сообщений: 170
Журналы транзакций могут обновляться циклически (следующий журнал затирает самый старый), а могут архивироваться с момента последнего резервного копирования. Это задается в настройках БД. Если выбран второй вариант, то для восстановления БД на любой момент времени t, следует:
1. восстановить ее из резервной копии, непосредственно предшествующей этому моменту. То есть, необходимо обновиться из копии, последней на момент t.
2. Применять последовательно изменения, сохраненные в журнале транзакций, вплоть до момента t. Этот процесс называется rolling forward.

В MSSQL это определяется моделями восстановления.
Roll forward возможен, если это Full или Bulk logged.
В этом случае, как уже сказал kenzzzooo, , применяется оператор RESTORE ... WITH STOPAT.

0 0

wr224
Новичок
Зарегистрирован: 28.12.2013
Сообщений: 65
В MSSQL не предусмотрен ручной режим управления транзакциями по-умолчанию Слабо верится

0 0

Павел
Пользователь
Зарегистрирован: 26.09.2013
Сообщений: 170
Сообщение от wr224 В MSSQL не предусмотрен ручной режим управления транзакциями по-умолчанию Слабо верится
Что такое ручной режим

0 0

kenzzzooo
Пользователь
Зарегистрирован: 09.10.2012
Сообщений: 391
Сообщение от wr224 В MSSQL не предусмотрен ручной режим управления транзакциями по-умолчанию Слабо верится

wr224, что именно имеется ввиду
-- Денис: Если тебе захочется запустить Пэинт через командную строку, ты что будешь набирать Катерина: О_о телефон психбольницы