[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Базы Данных / Разное /

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

Greg Robidoux (оригинал: How to restore from a transaction log in SQL Server)
Перевод Моисеенко С.И., источник: http://www.sqlbooks.ru

Наличие плана резервного копирования - половина залога успеха в поднятии вашего 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 - прекрасные инструменты, которые могут помочь Вам в этом, однако использование хорошего соглашения об именовании сделает этот шаг значительно быстрее и надежнее.




    Комментарии

     Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



    Последние статьи: Базы Данных / Разное /

    Разработка запросов
    08-03-2010   

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

    Кол. просмотров: общее - 3389 сегодня - 0

    Параметрическое определение порядка сортировки данных
    08-03-2010   

    В различных сетевых форумах часто обсуждается вопрос: как получить отсортированные результаты выполнения запроса, передавая хранимой процедуре некоторый параметр? Я собрал несколько решений этой задачи, предложенных талантливыми программистами. Основная часть идей, изложенных в этой статье... подробнее

    Кол. просмотров: общее - 3456 сегодня - 1

    Delete from mytable; Commit:.. или Восстановление данных в СУБД Interbase
    08-03-2010   

    Данная статья написана на основе статей: The Interbase On - Disk Structure by Ann Harrison ; Structure of a Data Page by Paul Beach, а так же включает в себя мой горький опыт в удалении важных данных, а потом в их успешном восстановлении. Я никоим образом не собираюсь нарушать права ни выше перечисленных авторов, ни компаний, чьи зарегистрированные торговые знаки перечисленные в данной статье... подробнее

    Кол. просмотров: общее - 3474 сегодня - 0

    Часто задаваемые вопросы по базам данных
    08-03-2010   

    СУБД — Система Управления Базами Данных (dbms — database management system). Программа, либо комплекс программ, предназначенных для полнофункциональной работы с данными. Как правило, включает в себя инструменты для создания и изменения структуры хранения наборов данных... подробнее

    Кол. просмотров: общее - 3903 сегодня - 0

    Временные таблицы в sql server. Так ли необходимы временные таблицы?
    07-03-2010   

    Временные таблицы всегда прекрасно помогали разработчикам. Раньше, когда я использовал access, я обычно создавал временные таблицы, которые удалял после решения задачи. При использовании sql server решить задачу можно гораздо проще. Не так ли?... подробнее

    Кол. просмотров: общее - 3437 сегодня - 1



      WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects