Восстановление базы данных MS SQL Server из копии на сетевом диске

Здравствуйте, дорогие читатели.
В одной из своих заметок я рассказывал как сделать копию базы данных MS SQL на сетевой диск. Сегодня я хочу рассказать как восстановить базу из копии, которая находится на сетевом диске. Скрипты, приведенные ниже, актуальны для MS SQL 2008R2 и MS SQL 2012, также необходимым условием является запуск Microsoft SQL Server с использованием доменной учетной записи.
Пример.
Резервное копирование ведется по схеме: полная копия делается 1 раз в неделю и каждый день делается разностная копия. Необходимо восстановить базу данных  в новую базу и в текущую.
1. Восстановление в новую базу, т.е. базы еще нет и она будет создана из копии.
USE master
go
exec sp_addumpdevice ‘disk’, ‘BaseBackup1’ ,‘\\IP-Адрес или имя компьютера\папка с копией\TestFULL_backup_201310130530.bak’ ;
go
exec sp_addumpdevice ‘disk’, ‘BaseBackup2’ ,‘\\IP-Адрес или имя компьютера\папка с копией\TestDay_backup_201310160030.bak’ ;
go
RESTORE DATABASE [TestForTest]
FILE = N’Test’ —указывается логическое имя файла БД, из которой были созданы копии
FROM   BaseBackup1
WITH   FILE = 1 ,  
MOVE N’Test’ TO N’K:\DATA\TestForTest.mdf’ , —Первый параметр — это логическое имя файла БД из которой была создана копия, второй параметр — путь, где будет находиться файл БД на диске новой базы
MOVE N’Test_log’ TO N’M:\LOG\TestForTest_log.ldf’, —Первый параметр — это логическое имя файла лога БД из которой была создана копия, второй параметр — путь, где будет находиться файл лога на диске новой базы
NORECOVERY ,  NOUNLOAD ,  REPLACE , STATS = 10
GO
RESTORE DATABASE [TestForTest]
FILE = N’Test’ —указывается логическое имя файла БД, из которой были созданы копии
FROM   BaseBackup2
WITH   FILE = 1 ,   RECOVERY , NOUNLOAD ,   STATS = 10
GO
exec sp_dropdevice ‘BaseBackup1’
GO
exec sp_dropdevice ‘BaseBackup2’
GO
2. Восстановление в существующую базу.
 
USE master
go
exec sp_addumpdevice ‘disk’, ‘BaseBackup1’ ,‘\\IP-Адрес или имя компьютера\папка с копией\TestFULL_backup_201310130530.bak’ ;
go
exec sp_addumpdevice ‘disk’, ‘BaseBackup2’ ,‘\\IP-Адрес или имя компьютера\папка с копией\TestDay_backup_201310160030.bak’ ;
go
RESTORE DATABASE [TestForTest]
FILE = N’Test’ —указывается логическое имя файла БД, из которой были созданы копии
FROM   BaseBackup1
WITH   FILE = 1 ,  
NORECOVERY ,  NOUNLOAD ,  REPLACE , STATS = 10
GO
RESTORE DATABASE [TestForTest]
FILE = N’Test’ —указывается логическое имя файла БД, из которой были созданы копии
FROM   BaseBackup2
WITH   FILE = 1 ,   RECOVERY , NOUNLOAD ,   STATS = 10
GO
exec sp_dropdevice ‘BaseBackup1’
GO
exec sp_dropdevice ‘BaseBackup2’
GO
Сами скрипты можно скачать здесь.
Как посмотреть логические имена файлов БД и лога. Необходим в Management Studio открыть свойства БД из которой была сделана копия и перейти на вкладу File.
СвойстваБД

Популярность: 12%

Запись опубликована в рубрике Настройка и оптимизация с метками . Добавьте в закладки постоянную ссылку.

9 Responses to Восстановление базы данных MS SQL Server из копии на сетевом диске

  1. Виктор говорит:

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

    • Сергей Сопелев говорит:

      Здравствуйте. Прошу прощения что не приложил скрипты для скачивания.
      Все ошибки из-за искажения кавычек.
      Еще хочется сказать что эти скрипты нельзя применять как есть, это как шаблон куда надо вставлять свои данные.
      В заметку добавил ссылку для скачивания

      • Виктор говорит:

        Это я понял, что там подставлять надо, только он все равно встал на строке, где restore database, и я так и не понял что ему надо. Пришлось пожертвовать одной базой, грохнуть ее, на ее место архив загнать и оттуда уже восстанавливать. А сейчас я уже 4-й час создаю базу, которую грохнул..и осталось еще где то полчаса..

  2. Виктор говорит:

    Я надеюсь правильно понял, что в команде
    RESTORE DATABASE [TestForTest] TestForTest надо поменять на имя своей БД, которая у меня 1cvict, т.е. у меня команда должны выглядеть RESTORE DATABASE [1cvictn]

  3. Виктор говорит:

    Месяца через три-четыре мне надо будет опять восстанавливать базу и именно по сети, так что буду вас спрашивать про то, что ему не нравится. Хорошо?!

  4. Денис говорит:

    Естественно, все работает, если выправить искажение вебом кавычек. Большое спасибо, теоретически знал, что из сети можно восстанавливать, но никогда не делал. Вдруг приспичило — сервер забили так, что бэкап положить локально некуда.

    Еще база остается в состоянии Restoring, наверное можно впихнуть в опции основного скрипта, либо

    RESTORE DATABASE [db_name] WITH RECOVERY

  5. Сергей говорит:

    Немного доработанный скрипт, для тех у кого просто полный бэкап

    USE master
    go
    exec sp_addumpdevice ‘disk’, ‘BaseBackup1′ ,’\\dsm\usbshare\upp_backup.bak’;
    go
    RESTORE DATABASE [upp]
    FILE = N’upp’ —указывается логическое имя файла БД, из которой были созданы копии
    FROM BaseBackup1
    WITH FILE = 1 ,
    MOVE N’upp’ TO N’C:\MSSQLBase\upp.mdf’ , —Первый параметр — это логическое имя файла БД из которой была создана копия, второй параметр — путь, где будет находиться файл БД на диске новой базы
    MOVE N’upp_log’ TO N’C:\MSSQLBase\upp_log.ldf’, —Первый параметр — это логическое имя файла лога БД из которой была создана копия, второй параметр — путь, где будет находиться файл лога на диске новой базы
    NORECOVERY , NOUNLOAD , REPLACE , STATS = 10
    GO
    exec sp_dropdevice ‘BaseBackup1’
    GO

Добавить комментарий для Виктор Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.