Как выполнить восстановление из журнала транзакций в SQL Server

Источник: realcoding
Моисеенко С.И

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

Сложность, которую привносят резервные копии журналов, состоит в том, что они требуют от Вас восстановления многочисленных файлов, а не только одного большого полного резервного файла. Чтобы успешно восстановить базу данных, Вы должны иметь все резервные копии журнала транзакций, которые были созданы, и они должны восстанавливаться в именно том порядке, в котором были созданы. Если какие-нибудь резервные копии журнала транзакций оказываются поврежденными, Вы не можете восстановить никакие резервные копии журнала транзакций, следующие после поврежденного. Они должны восстанавливаться по порядку, и Вы не можете пропустить ни один из файлов.

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

Содержание

  • Шаг 1: Резервирование активной части журнала транзакций
  • Шаг 2: Определение того, что необходимо восстановить
  • Шаг 3: Проверка того, что резервные копии имеют корректное содержимое
  • Шаг 4: Узнайте ваши опции восстановления
  • Шаг 5: Используйте преимущества восстановления до определенного момента времени
  • Если в случае сбоя Вы должны восстановить данные на другом сервере, Вы должны сначала сделать резервную копию активной части журнала транзакций, чтобы получить оставшиеся транзакции, которые еще не были записаны в существующую резервную копию журнала транзакций. Чтобы создать эту последнюю резервную копию журнала транзакций, используйте что-то подобное следующей команде:

    BACKUP LOG Northwind 
           TO DISK= 'C:SQLBackupNorth.bak' 
           WITH NO_TRUNCATE

    Этим создается еще одна резервная копия журнала транзакций, которая затем будет использоваться в вашем восстановительном процессе.

    Следующий шаг должен определить, какие файлы должны быть восстановлены. Надеюсь, что Вы уже знаете, какие резервные копии требуется восстановить. В противном случае Вы можете сделать запрос к таблицам SQL Server в msdb; эти таблицы покажут Вам все резервные копии, сделанные на вашем сервере, включая резервные копии, созданные с помощью Maintenance Plans (Планы Обслуживания), мастера в Enterprise Manager, команд T-SQL и инструментария третьих фирм, который использует встроенные функции SQL Server для создания резервных копий.

    В msdb имеются следующие таблицы:

    • backupfile - Содержит по одной строке на каждый файл данных или файл журнала, для которого создавалась резервная копия
    • backupmediafamily - Содержит по строке на каждое семейство сред
    • backupmediaset - Содержит по строке на каждый набор сред резервного копирования
    • backupset - Содержит по строке на каждый набор резервного копирования
    Если Вы выполняете полное восстановление, то должны начать с Полной Резервной копии (Full Backup) и затем включить дифференциальные, после которых - любые резервные копии журнала транзакций. Данные в этих таблицах показывают сначала самые старые резервные копии, поэтому ищите самую последнюю Полную Резервную копию и любые другие резервные копии, которые были сделаны после Полной Резервной копии.

    В дополнение к команде RESTORE, которая используется для восстановления резервных копий, есть другие команды RESTORE, которые позволят Вам увидеть содержание резервных файлов. Это команды RESTORE HEADERONLY и RESTORE FILELISTONLY.

    RESTORE HEADERONLY

    Эта команда позволяет Вам увидеть информацию заголовка резервной копии для всех наборов резервных копий на конкретном устройстве резервного копирования. Эта команда полезна, когда Вы работаете с многочисленными файлами или если Вы получаете файл резервной копии с сервера, которым не управляете. Чтобы определить, что находится в резервных файлах, Вы можете выполнить эту команду в Query Analyzer.

    RESTORE FILELISTONLY

    Эта команда позволяет Вам увидеть список файлов базы данных и журнала, содержащихся в наборе резервирования, в какой файловой группе они находятся, а также размер файлов данных и журналов. LogicalName и PhysicalName - ключевые элементы данных, которые используются в течение процесса восстановления.

    RESTORE FILELISTONLY 
            FROM DISK = 'C:SQLBackupNorth.bak'

    Имеется несколько опций, которые могут использоваться при восстановлении резервных копий, включая восстановление резервных копий журнала транзакций. Вот некоторые из этих опций:

    NORECOVERY

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

    RESTORE DATABASE NORTH 
            FROM DISK = 'C:SQLBackupNorth.bak' 
            WITH NORECOVERY

    RECOVERY

    Это опция используется по умолчанию, если никакая опция не указана. Ее следует использовать на последней стадии восстановления. После ее использования Вы не можете уже восстановить дополнительные резервные копии; чтобы сделать это, Вы должны начать процесс восстановления с самого начала. Эта опция может использоваться при восстановлении полных, дифференциальных резервных копий или резервной копии журнала транзакций.

    RESTORE LOG NORTH 
            FROM DISK = 'C:SQLBackupNorth_Log.bak' 
            WITH RECOVERY

    STANDBY

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

    RESTORE LOG NORTH 
            FROM DISK = 'C:SQLBackupNorth_Log.bak' 
            WITH STANDBY = 'c:undo.ldf'

    MOVE

    Восстанавливая базы данных на другом сервере, Вам вероятно потребуется опция MOVE, если серверы не настроены точно так же. Выше я упоминал об использовании LogicalName и PhysicalName из команды RESTORE FILELISTONLY. Опция MOVE позволяет Вам перемещать физические файлы в другое место на вашем сервере. Вам потребуется использовать опцию MOVE для всех ваших восстановлений, включая Полное (Full), Дифференциальное (Differential) и Журнала Транзакций (Transaction Log).

    RESTORE LOG NORTH 
            FROM DISK = 'C:SQLBackupNorth_Log.bak' 
            WITH RECOVERY, 
            MOVE 'Northwind_Data' TO 'c:dataNorthwind.mdf', 
            MOVE 'Northwind_Log' TO 'c:dataNorthwind _log.ldf'

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

    STOPAT

    Эта опция позволяет Вам повторить все зафиксированные транзакции, которые произошли до 31 декабря 2005; 0:00.

    RESTORE LOG Northwind 
            FROM DISK = 'C:SQLBackupNorth_Log.bak' 
            WITH RECOVERY, 
            STOPAT = 'Dec 31, 2005 12:00 AM'

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

    STOPATMARK

    При помощи этой опции вы можете восстановить все зафиксированные транзакции, которые произошли вплоть до транзакционной метки Invoice1024.

    RESTORE LOG Northwind 
            FROM DISK = 'C:SQLBackupNorth_Log.bak' 
            WITH RECOVERY, 
            STOPATMARK = 'Invoice1024'

    STOPBEFOREMARK

    Эта опция позволяет Вам повторить все зафиксированные транзакции, которые произошли до транзакционной метки Invoice1024.

    RESTORE LOG Northwind 
            FROM DISK = 'C:SQLBackupNorth_Log.bak' 
            WITH RECOVERY, 
            STOPBEFOREMARK = 'Invoice1024'

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


    Страница сайта http://test.interface.ru
    Оригинал находится по адресу http://test.interface.ru/home.asp?artId=29617