Database restore ms sql: RESTORE (Transact-SQL) — SQL Server

База данных SQL Server застряла в состоянии восстановления

Данный материал является переводом оригинальной статьи «MSSQLTips : Daniel Calbimonte : SQL Server Database Stuck in Restoring State».

Вы обнаружили, что база данных Microsoft SQL Server находится в состоянии восстановления. Как это произошло и как получить обратно доступ к этой базе данных SQL Server?

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

 

База данных SQL Server в состоянии RESTORING после восстановления

Обычно состояние восстановления возникает, когда вы восстанавливаете базу данных. Здесь мы рассмотрим пример этого.

Создадим файл полной резервной копии (файл *.bak) и файл резервной копии журнала транзакций (файл *.bak), запустив вот такой код T-SQL в SQL Server Management Studio (SSMS):

BACKUP DATABASE [earnings] TO DISK = N'c:\sql\earnings.bak' 
WITH NOFORMAT, NOINIT, NAME = N'earnings-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO   BACKUP LOG [earnings] TO DISK = N'C:\sql\earnings_LogBackup_2018-06-02_12-42-07.bak' 
WITH NOFORMAT, NOINIT, NAME = N'earnings_LogBackup_2018-06-02_12-42-07', SKIP, NOREWIND, NOUNLOAD, STATS = 10

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

Чтобы восстановить полную резервную копию с резервной копией журнала, нам нужно использовать параметр NORECOVERY в процессе восстановления. Итак, если мы сперва восстановим полную резервную копию следующим образом:

RESTORE DATABASE [earnings] 
FROM DISK = N'c:\sql\earnings.bak' WITH NORECOVERY, NOUNLOAD, STATS = 10

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

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

RESTORE LOG [earnings]
FROM DISK = N'c:\sql\earnings_LogBackup_2018-06-02_12-42-07.bak'

 

База данных SQL Server в состоянии RESTORING после выполнения резервного копирования журнала с помощью NORECOVERY

Другая причина, по которой ваша база данных может находиться в состоянии восстановления, — это резервное копирование хвоста журнала (Log Tail) с помощью параметра NORECOVERY, как показано ниже.

BACKUP DATABASE [earnings] TO DISK = N'c:\sql\earnings.bak' 
WITH NOFORMAT, NOINIT,  NAME = N'earnings-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO   
BACKUP LOG [earnings] TO DISK = N'C:\sql\earnings_LogBackup_2018-06-02_12-42-07. bak' 
WITH NOFORMAT, NOINIT, NAME = N'earnings_LogBackup_2018-06-02_12-42-07', SKIP, NOREWIND, NOUNLOAD, NORECOVERY, STATS = 10

Это приведет к переходу базы данных в состояние восстановления.

Чтобы исправить это, вы можете восстановить резервные копии базы данных, как показано выше.

 

Как сделать базу данных SQL Server доступной в состоянии RESTORING без восстановления резервных копий

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

RESTORE DATABASE [earnings] WITH RECOVERY

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

Дополнительные сведения о восстановлении базы данных в состоянии восстановления можно найти в статье «Recovering a SQL Server database that is in the restoring state».

 

База данных SQL Server в состоянии RESTORING и Database Mirroring

Другая причина, по которой ваша база данных находится в состоянии восстановления, заключается в том, что она является частью зеркального отображения базы данных SQL Server (Database Mirroring). Database Mirroring — это решение, позволяющее обеспечить высокую доступность базы данных. Если в первичной базе данных произошел сбой, база данных вторичной реплики на другом сервере возьмет на себя операции с базой данных. Основная база данных — это основной сервер, вторичная — это зеркальный сервер и, при желании вы можете иметь еще один зеркальный сервер.

Вот пример. Слева мы видим, что на основном сервере доступна база данных. Справа мы видим зеркало базы, которое находится в состоянии восстановления.

Дополнительные сведения о зеркальном отображении базы данных можно найти в статье «Configure SQL Server Database Mirroring Using SSMS».

В зеркальном отображении базы данных зеркальный сервер находится в состоянии восстановления до тех пор, пока не будет выполнено переключение на другой ресурс (FailOver). Чтобы получить доступ к базе данных, которая находится в состоянии восстановления, когда она является частью ошибки базы данных, вы можете выполнить ручное или автоматическое переключение при отказе, от участника к зеркалу.

Чтобы выполнить автоматическое переключение при отказе, выполните действия описанные в статье: «SQL Docs : Role Switching During a Database Mirroring Session — Manual Failover».

Чтобы «сломать» зеркало, вам нужно будет выбрать базу данных, перейти на страницу зеркального отображения и нажать кнопку удаления зеркального отображения. В следующей статье показано, как это сделать: «SQL Docs : Remove Database Mirroring (SQL Server)». После удаления база данных зеркального отображения вернется в нормальное состояние, и вы сможете создать резервную копию и восстановить базу данных как обычную базу данных.

 

База данных SQL Server в состоянии RESTORING и Log Shipping

Режим Доставки журналов SQL Server (Log Shipping) позволяет постоянно создавать резервные копии журналов транзакций, а также отправлять и восстанавливать резервные копии на другом сервере, чтобы иметь реплики базы данных в случае отказа основного сервера.

Доставка журналов переводит базу данных в состояние ожидания с восстановлением, либо без восстановления. В режиме «без восстановления» база данных доставки журналов будет находиться в состоянии восстановления, как показано ниже.

Ссылка на статью об изменении состояния, чтобы избежать состояния восстановления: «Change the restore mode of a secondary SQL Server database in Log shipping with SSMS».

 

База данных SQL Server застряла в состоянии RESTORING после перезапуска компьютера

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

Если у вас возникла эта проблема, попробуйте сначала команду:

RESTORE DATABASE [databasename] WITH RECOVERY

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

USE master;
GO   
ALTER DATABASE Database_name
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;

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

После восстановления вы можете перейти в многопользовательский режим с помощью следующей команды T-SQL:

USE master;
GO   
ALTER DATABASE Database_name
SET MULTI_USER;
GO

Кроме того, убедитесь, что вы используете последний пакет обновления или накопительное обновление SQL Server.

Так же, вам следует просмотреть журнал ошибок и средство просмотра событий Windows, чтобы проверить наличие ошибок.

 

Заключение

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

Как восстановить базу данных Microsoft SQL на момент времени

  • Последнее обновление

Плоский файл
В этой статье описывается, как восстановить базу данных SQL на определенный момент времени, а затем восстановить базу данных до рабочего состояния с помощью SQL Management Studio. Перед выполнением этого решения необходимо сначала восстановить базу данных Microsoft в неструктурированный файл.

Шаг 1. Восстановите базу данных

Для восстановления базы данных выполните следующие действия:

  1. Откройте Microsoft SQL Server Management Studio и перейдите к Базы данных :
  2. Щелкните правой кнопкой мыши Базы данных и выберите Восстановить базу данных . В разделе Источник для восстановления выберите С устройства и нажмите кнопку обзора:
     
  3. Нажмите Добавить в окне Укажите резервную копию . Перейдите к расположению недавно восстановленных плоских файлов. Выберите файл полной резервной копии, который должен быть первым файлом резервной копии в списке:
  4. Нажмите OK ; в окне Specify Backup отображается:
  5. Нажмите OK . В разделе Место назначения для восстановления выберите базу данных, в которую вы хотите восстановить, а в разделе Выберите наборы резервных копий для восстановления выберите файл резервной копии, который вы выбрали выше на шаге 3 :
     
  6. На левой панели нажмите Параметры и выберите следующее:
    • В
    • 0009 Параметры восстановления , выберите Перезаписать существующую базу данных (С ЗАМЕНОЙ) и оставьте другие параметры не выбранными.
    • В разделе Состояние восстановления выберите Оставить базу данных нерабочей и не выполнять откат незафиксированных транзакций. Дополнительные журналы транзакций могут быть восстановлены. (ВОССТАНОВЛЕНИЕ БЕЗ ВОССТАНОВЛЕНИЯ) :

  7. Нажмите OK , чтобы выполнить восстановление.
  8. Выполните эти шаги для каждого файла добавочной резервной копии, включая . tm , пока не будет найден добавочный файл, содержащий файл на определенный момент времени, который вы хотите восстановить.
  9. Отображается сообщение «Восстановление»; Теперь вы можете перейти к следующему разделу, шагу 2. Восстановление до момента времени.
Шаг 2. Восстановление на момент времени

Выполните следующие действия, чтобы восстановить последний инкрементный файл, содержащий момент времени:

  1. В Microsoft SQL Server Management Studio щелкните правой кнопкой мыши Базы данных и нажмите Восстановить базу данных .
  2. В разделе Источник для восстановления выберите С устройства и нажмите кнопку обзора   .
  3. Нажмите Добавить в окне Укажите резервную копию . Перейдите к расположению недавно восстановленных плоских файлов, выберите файл инкрементной резервной копии, содержащий момент времени для восстановления, и нажмите OK .
  4. Нажмите OK в Укажите окно резервного копирования . В разделе Выберите наборы резервных копий для восстановления проверьте файл резервной копии, который вы добавили на предыдущем шаге.
  5. В разделе Место назначения для восстановления выберите базу данных, в которую нужно восстановить:
  6. В разделе Место назначения для восстановления нажмите кнопку обзора после На момент времени ; появится окно Восстановление на момент времени .
  7. Выберите  конкретную дату и время и выберите дату и время для восстановления:
  8. Нажмите  OK . На левой панели нажмите Параметры и выберите следующие параметры:
    • В разделе Параметры восстановления выберите Перезаписать существующую базу данных и оставьте другие параметры не выбранными.
    • В разделе Состояние восстановления выберите Оставить базу данных готовой к использованию путем отката незафиксированных транзакций. Дополнительные журналы транзакций могут быть восстановлены. (ВОССТАНОВЛЕНИЕ С ВОССТАНОВЛЕНИЕМ) :
  9. Нажмите  OK  , чтобы выполнить восстановление. восстановленная база данных должна отображать только изменения до указанного момента времени.

Последнее обновление

Предыдущая статья
Следующая статья

Как восстановить базу данных SQL Server на новый сервер

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

Для восстановления базы данных:

  1. После подключения к требуемому экземпляру компонента Microsoft SQL Server Database Engine в Database Explorer щелкните имя сервера, чтобы развернуть дерево серверов.
  2. Либо выберите базу данных пользователей, либо разверните Системные базы данных и выберите системную базу данных.
  3. Щелкните базу данных правой кнопкой мыши, выберите Задачи и щелкните Восстановить . Появится диалоговое окно Restore Database .
  4. На странице Источник и цель используйте раздел Источник для восстановления , чтобы указать источник и расположение наборов резервных копий для восстановления. Выберите один из следующих вариантов:
    • База данных
      Выберите базу данных для восстановления из выпадающего списка.
    • Файлы
      Выберите, чтобы указать путь к файлу резервной копии.
  5. В разделе Место назначения для восстановления поле База данных автоматически заполняется именем восстанавливаемой базы данных. Чтобы изменить имя базы данных, введите новое имя в поле База данных .
  6. В Восстановить до оставьте значение по умолчанию До последней сделанной резервной копии или нажмите Временная шкала , чтобы открыть диалоговое окно Временная шкала резервного копирования , чтобы вручную выбрать момент времени для остановки действия восстановления.
  7. В наборе резервных копий для восстановления сетки выберите резервные копии для восстановления. В этой сетке отображаются резервные копии, доступные для указанного местоположения. По умолчанию предлагается план восстановления. Чтобы переопределить предложенный план восстановления, вы можете изменить выбор в сетке. Резервные копии, которые зависят от восстановления более ранней резервной копии, автоматически очищаются при очистке более ранней резервной копии.
  8. При необходимости щелкните страницу Files , чтобы открыть диалоговое окно Browse Files . Отсюда вы можете восстановить базу данных в новое место, указав новое назначение восстановления для каждого файла в сетке Восстановить файлы базы данных как .
  9. Чтобы просмотреть или выбрать дополнительные параметры, на странице Параметры в области Параметры восстановления можно выбрать любой из следующих параметров, если он подходит для вашей ситуации:
    • Перезаписать существующую базу данных (С ЗАМЕНОЙ)
    • Сохранить настройки репликации (С KEEP_REPLICATION)
    • Ограничить доступ к восстановленной базе данных (WITH RESTRICTED_USER)
  10. Выберите параметр в поле Состояние восстановления . Это поле определяет состояние базы данных после операции восстановления.

    • ВОССТАНОВЛЕНИЕ С ВОССТАНОВЛЕНИЕМ — это поведение по умолчанию, которое оставляет базу данных готовой к использованию путем отката незафиксированных транзакций. Дополнительные журналы транзакций не могут быть восстановлены. Выберите этот вариант, если вы сейчас восстанавливаете все необходимые резервные копии.
    • RESTORE WITH NORECOVERY оставляет базу данных неработоспособной и не выполняет откат незафиксированных транзакций. Дополнительные журналы транзакций могут быть восстановлены. Базу данных нельзя использовать, пока она не будет восстановлена.
    • RESTORE WITH STANDBY оставляет базу данных в режиме только для чтения. Он отменяет незафиксированные транзакции, но сохраняет действия отмены в резервном файле, чтобы можно было отменить последствия восстановления.
  11. Сделать резервную копию журнала перед восстановлением будет выбрано, если это необходимо для выбранного момента времени.
  12. Если есть активные подключения к базе данных, операции восстановления могут завершиться неудачно. Установите флажок Закрыть существующие подключения к базе данных назначения , чтобы убедиться, что все активные подключения между dbForge Studio для SQL Server и базой данных закрыты.