SQL.RU
 client/server technologies
 Главная | Документация | Статьи | Книги | Форум | Блоги | Опросы | Гостевая | Рассылка | Работа | Поиск | FAQ |

Восстановление удалённой таблицы или отдельных её строк

ПУБЛИКАЦИИ  

По материалам статьи Microsoft: HOW TO: Retrieve a Table or Rows from Database or Transaction Log Backups
Информация в этой статье относится к Microsoft SQL Server 7.0 и 2000 (all editions)

СОДЕРЖАНИЕ

1.Введение
2.Резервирование текущего transaction log
3.Восстановление частичной или полной резервной копии базы данных
4.Восстановление резервной копии transaction log с использованием опции STOPAT
5.Восстановление данных
6.Пересоздание индексов, триггеров и ограничений
7.DBCC CHECKTABLE
8.Справочная информация

Введение

Эта статья описывает способы восстановления таблиц или строк в базе данных из резервной копи журнала регистрации транзакций (transaction log), без полного восстановления рабочей базы данных. Это может быть полезно в случае удаления таблицы или строки, а также для восстановления необходимых данных, которые присутствовали в предшествующем состоянии базы данных.

Вы должны иметь полную цепочку резервных копий базы данных и transaction log на всё время, в течение которого будут производиться описываемые в настоящей статье действия:

  • Если отсутствуют резервные копии transaction log, но есть полные резервные копии базы данных, можно восстановить только те данные, которые существовали в то время, когда было сделано последнее, полное резервное копирование базы данных.

  • Если полное резервное копирование базы данных никогда не выполнялось, невозможно будет восстановить утерянные данные.

ВАЖНО: поскольку будут восстановлены данные, которые не совместимы с текущим состоянием базы данных, может быть нарушена ссылочная целостность. При попытке копирования данные назад, в первоначальную базу данных, могут проявиться ограничения и ошибки ключей. Вы должны предпринять соответствующие меры, чтобы избежать возможных проблем ссылочной целостности.

[Содержание]

Резервирование текущего transaction log

Сделайте резервную копию вашего текущего transaction log с опцией NO_TRUNCATE. Для получения дополнительной информации, см. раздел "BACKUP" в SQL Server Books Online.

[Содержание]

Восстановление частичной или полной резервной копии базы данных

  • SQL Server 2000: Если ваша стратегия резервирования включает резервное копирование filegroup, Вы можете выполнить только частичное (partial) восстановление базы данных, восстановив в новое место только ту часть базы данных, которая содержит таблицу, которую необходимо восстановить. Для получения дополнительной информации об этом методе, см. тему "Partial Database Restore Operations", раздел "Restore transaction log Backups" в SQL Server Books Online.

    ОБРАТИТЕ ВНИМАНИЕ: Если ваша стратегия не включает резервное копирование filegroup, или Вы используете SQL Server 7.0, переходите сразу к следующему шагу.

  • Если Вы не используете резервное копирование filegroup или используете SQL Server 7.0, восстановите в новую базу данных с другим именем полную резервную копию базы данных (и разностные копии, если таковые делались) с опцией NORECOVERY. У Вас получиться копия базы данных, которая содержит требуемые к восстановлению данные. Вы можете восстанавливать копию на тот же самый сервер или на другой сервер.

  • Для получения дополнительной информации о том, как восстановить базу данных с другим именем и в другое место, см. следующие темы SQL Server Books Online: "RESTORE" и "How to restore files to a new location (Transact-SQL)".

Для дополнительной информации прочтите статью Microsoft Knowledge Base: INF: Using the WITH MOVE Option with the RESTORE Statement Q221465

[Содержание]

Восстановление резервной копии transaction log с использованием опции STOPAT

Это такое восстановление, при котором резервные копии transaction log восстанавливаются после восстановления частичной или полной резервной копии базы данных и останавливается перед тем моментом времени, когда таблица или строки были удалены. Используйте опцию STOPAT в команде RESTORE LOG для того, чтобы остановить восстановление transaction log и восстановит базу данных по состоянию до того момента времени, когда таблица была удалена.

ОБРАТИТЕ ВНИМАНИЕ: Не существует опции, чтобы выборочно пропустить тот момент времени, когда данные были удалены. У Вас есть возможность только восстановления базы до момента времени прежде, чем данные были удалены, но не позже.

Для получения дополнительной информации о том, как восстанавливать базу до определённого времени см. следующие темы SQL Server Books Online: "RESTORE", "How to restore to a point in time".

[Содержание]

Восстановление данных

После того, как Вы восстановите базу данных, Вы можете скопировать таблицу или строки назад в Вашу первоначальную базу данных, используя INSERT, BCP (Bulk Copy Utility) или SELECT INTO (эта статья описывает только INSERT, BCP и SELECT INTO). Также Вы можете использовать DTS, но Microsoft не рекомендует использование DTS.

INSERT

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

BCP

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

  1. Если таблица не существует, сгенерируйте скрипт этой таблицы, если Вы его не имеете, а затем создайте этим скриптом таблицу в первоначальной базе.

  2. Используйте утилиту BCP, чтобы скопировать данные из таблицы (строки) восстановленной базы данных в текстовый файл, а затем из текстового файла в первоначальную базу данных. Для получения дополнительной информации о том, как использовать утилиту BCP, см. тему SQL Server Books Online "bcp Utility ".

ОБРАТИТЕ ВНИМАНИЕ: Если Вы используете "minimally logged" или "nonlogged" операции оптового копирования (bulk copy), сделайте полную резервную копию вашей первоначальной базы данных после того, как будет завершена работа BCP. Для дополнительной информации, см. тему в SQL Server 2000 Books Online "Logged and Minimally Logged Bulk Copy Operations", или тему в SQL Server 7.0 Books Online "Logged and Nonlogged Bulk Copy Operations".

SELECT INTO

Если таблица была удалена, Вы можете скопировать таблицу из восстановленной базы данных в первоначальную базу данных с помощью SELECT INTO. Для этого не требуется предварительно создавать таблицу в первоначальной базе. SELECT INTO сам её создаст и скопирует данные в новую таблицу.

ОБРАТИТЕ ВНИМАНИЕ:

  • SQL Server 7.0: У Вашей первоначальной базы данных должна быть включена опция "select into/bulkcopy". Кроме того, Вы должны сделать полную резервную копию базы данных после того, как завершится исполнение SELECT INTO. Для получения дополнительной информации о SELECT INTO, см. тему SQL Server Books Online "SELECT (Transact-SQL)", раздел "INTO Clause".

  • SQL Server 2000: В SQL Server 2000 не нужно устанавливать специальную опцию select into/bulkcopy. Количество регистрируемых операций и необходимость выполнения полного резервного копирования первоначальной базы данных после SELECT INTO, зависит от установленной для этой базы модели восстановления (recovery model). См. тему SQL Server 2000 Books Online "SELECT Clause", подраздел "INTO Clause" и "Using Recovery Models ", а также статью на сайте SQL.RU Выбор модели восстановления SQL Server 2000

ОБРАТИТЕ ВНИМАНИЕ: Поскольку Вы восстанавливаете данные, которые могут быть не совместимы с текущим состоянием базы данных, ссылочная целостность может быть нарушена. При попытке копирования данные назад, в первоначальную базу данных, могут проявиться ограничения и ошибки ключей. Вы должны предпринять соответствующие меры, чтобы избежать возможных проблем ссылочной целостности.

[Содержание]

Пересоздание индексов, триггеров и ограничений

Вы должны пересоздать все обычные и полнотекстовые индексы, триггеры и ограничения, если ваша первоначальная таблица была утеряна.

ВАЖНО: Поскольку Вы восстанавливаете данные, который были актуальны для другого времени, чем у текущей базы данных, ссылочная целостность может быть нарушена. Вы должны предпринять соответствующие меры, чтобы избежать возможных проблем ссылочной целостности.

[Содержание]

DBCC CHECKTABLE

Выполните DBCC CHECKTABLE для новой таблицы, чтобы проверить целостность данных. Для дополнительной информации, см. тему SQL Server Books Online "DBCC CHECKTABLE".

[Содержание]

СПРАВОЧНАЯ ИНФОРМАЦИЯ

SQL Server Books Online:

  • "Designing a Backup and Restore Strategy"

  • "Backing Up and Restoring Databases"

  • "Backup/Restore Architecture"

Для дополнительной информации прочтите следующие статьи Microsoft Knowledge Base:
INF: Disaster Recovery Articles for Microsoft SQL Server Q307775
INF: Restore File and Filegroup Backups in SQL Server Q281122

[Содержание]

Перевод: Александра Гладченко  2002г.

Rambler's Top100 Рейтинг@Mail.ru  Administrator: Обратная связь 
Copyright: SQL.Ru 2000-2013