Подтвердить что ты не робот

Имеет ли SQL Server какую-либо магическую функцию отмены?

Короче говоря, я попытался быстро обновить одну строку на SQL Server с помощью студии Management и просто набрал UPDATE table SET column='value' и забыл часть WHERE other_column='other_value'. Пошел на обед, вернулся, и меня ждут 15 непрочитанных писем. Случилось около часа назад, ожидая, когда парень базы данных вернется, чтобы посмотреть, когда была последняя резервная копия. Там нет волшебной функции UNDO, хотя есть?

4b9b3361

Ответ 1

Да, есть - это журнал транзакций. Чтобы восстановить что-то подобное, до тех пор, пока у вас есть ваша база данных в модели FULL recovery, вы просто сделаете резервную копию журнала транзакций, а затем выполните восстановление с опцией STOPAT, чтобы сообщить, что восстановление прекратит восстановление в точке перед тем, как начать транзакцию. Это вернет базу данных к точке вашей ошибки.

Подробнее об использовании опции STOPAT см. здесь http://msdn.microsoft.com/en-us/library/ms186858(SQL.90).aspx.

Ваш script будет выглядеть примерно так:

-- backup the existing log
BACKUP LOG [MyDatabase]
     TO DISK = N'\\MyServer\Share\MyDatabase.trn'
     -- options left out for brevity
GO

-- restore the database first
RESTORE DATABASE [MyDatabase] 
    FROM  DISK = N'\\MyServer\Share\MyDatabase.bak' 
    WITH  FILE = 1,  
    NORECOVERY,  
    NOUNLOAD,  
    STATS = 10
GO

/* Previous transaction logs in the chain go here... */

/* restore your log that you backed up after the mistake 
   took place, stopping at your point where the problem happened */
RESTORE LOG [MyDatabase] 
    FROM  DISK = N'\\MyServer\Share\MyDatabase.trn' 
    WITH  FILE = 1,  
    NORECOVERY,  
    NOUNLOAD,  
    STATS = 10,
    STOPAT = '2010-03-12 13:00'
GO

Ответ 3

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

Ответ 4

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

Ответ 5

Я боюсь, что их нет. Вот почему я всегда пишу select, чтобы увидеть результаты, а затем преобразовать их в обновление. Также выучил урок жесткий путь LOL. Конечно, вы можете восстановить из журнала транзакций.