Mssql restore database: RESTORE (Transact-SQL) — SQL Server

Резервное копирование

— SQL Server: база данных застряла в состоянии «Восстановление»

По умолчанию каждая ВОССТАНОВЛЕНИЕ БАЗЫ ДАННЫХ поставляется с настройкой ВОССТАНОВЛЕНИЕ .
Параметры «NORECOVERY» в основном сообщают SQL Server, что база данных ожидает дополнительных файлов восстановления (это может быть файл DIFF и файл LOG и, если возможно, может включать файл резервной копии хвостового журнала).
Параметры «ВОССТАНОВЛЕНИЕ» завершают все транзакции и позволяют базе данных быть готовыми к выполнению транзакций.

Итак:

  1. , если ваша база данных настроена с моделью восстановления SIMPLE , вы можете выполнить восстановление FULL только с параметром NORECOVERY , когда у вас есть резервная копия DIFF . Резервное копирование LOG не допускается в базе данных модели восстановления SIMPLE .
  2. В противном случае, если для вашей базы данных настроена модель восстановления FULL или BULK-LOGGED , вы можете выполнить восстановление FULL , а затем NORECOVERY , затем выполните DIFF , затем NORECOVERY и, наконец, выполните восстановление LOG с опцией RECOVERY .

Помните, ПОСЛЕДНИЙ ЗАПРОС ВОССТАНОВЛЕНИЯ ДОЛЖЕН ИМЕТЬ ВОССТАНОВЛЕНИЕ ОПЦИЯ . Это может быть явный способ или нет. В термах T-SQL ситуация:

1.

 USE [мастер]
    ИДТИ
    ВОССТАНОВИТЬ БАЗУ ДАННЫХ Имя_базы_данных
    FROM DISK = N'\\path_of_backup_file.bak WITH FILE = 1, [REPLACE],NOUNLOAD,
    ВОССТАНОВЛЕНИЕ -- Эту опцию можно опустить.
    ИДТИ
 

Параметр WITH REPLACE следует использовать с осторожностью, поскольку это может привести к потере данных.
ИДТИ
ВОССТАНОВИТЬ БАЗУ ДАННЫХ Имя_базы_данных
FROM DISK = N’\\path_of_backup_file. bak’ WITH FILE = 1,
БЕЗ ЗАГРУЗКИ, БЕЗ ВОССТАНОВЛЕНИЯ
ИДТИ
ВОССТАНОВИТЬ БАЗУ ДАННЫХ Имя_базы_данных
FROM DISK =N’\\path_of_**diff**backup_file.bak’ WITH FILE = 1,
НЕЗАГРУЗКА, ВОССТАНОВЛЕНИЕ
ИДТИ
2. ИСПОЛЬЗОВАТЬ [мастер]
ИДТИ
— Выполните резервное копирование Tail-Log, если это возможно.
ЖУРНАЛ РЕЗЕРВНОГО КОПИРОВАНИЯ Имя_базы_данных
ИДТИ
— Восстановление ПОЛНОЙ резервной копии
ВОССТАНОВИТЬ БАЗУ ДАННЫХ Имя_базы_данных
FROM DISK = N’\\path_of_backup_file.bak’ WITH FILE = 1,
БЕЗ ЗАГРУЗКИ, БЕЗ ВОССТАНОВЛЕНИЯ
ИДТИ
— Восстановить последнюю резервную копию DIFF
ВОССТАНОВИТЬ БАЗУ ДАННЫХ Имя_базы_данных
FROM DISK = N’\\path_of_DIFF_backup_file.bak’ WITH FILE = 1,
НЕВОССТАНОВЛЕНИЕ, НЕРАЗГРУЗКА
ИДТИ
— Восстановить резервную копию журнала
ЖУРНАЛ ВОССТАНОВЛЕНИЯ имя_базы_данных
FROM DISK = N’path_of_LOG_backup_file.trn’ WITH FILE = 2,
ВОССТАНОВЛЕНИЕ, НЕЗАГРУЗКА
ИДТИ

Конечно, вы можете выполнить восстановление с параметром STATS = 10 , который указывает SQL Server сообщать о каждом завершении на 10%.

При желании вы можете наблюдать за процессом или восстановить его в режиме реального времени.
Как следует:

 ИСПОЛЬЗОВАНИЕ [мастер]
ИДТИ
ВЫБЕРИТЕ session_id КАК SPID, команда, a.text КАК запрос, время начала, процент_завершения, датадобавка (секунда, расчетное_время_завершения/1000, getdate()) как предполагаемое_время_завершения
    ОТ sys.dm_exec_requests r ПЕРЕКРЕСТНОЕ ПРИМЕНЕНИЕ sys.dm_exec_sql_text(r.sql_handle) a
        ГДЕ r.command в ('РЕЗЕРВНАЯ БАЗА ДАННЫХ', 'ВОССТАНОВЛЕНИЕ БАЗЫ ДАННЫХ')
ИДТИ
 

Надеюсь на помощь.

сервер sql — ошибка mssql ‘5 (Доступ запрещен.)’ при восстановлении базы данных

спросил

Изменено
9 месяцев назад

Просмотрено
143 тыс. раз

Я хочу восстановить базу данных из файла (Задачи → Восстановить → База данных; после выбора с устройства и выбора файла) через SQL Server Management Studio.

После этого я получаю эту ошибку:

Операционная система вернула ошибку «5 (Доступ запрещен.)» при попытке
‘RestoreContainer::ValidateTargetForCreation’ в ‘E:\Program Files\Microsoft SQL
Сервер\MSSQL10.MSSQLSERVER\MSSQL\DATA\XXXXXX.mdf».
Сообщение 3156, уровень 16, состояние 8, сервер XXXX, строка 2

Как решить эту проблему? Это ошибка безопасности?

  • sql-сервер
  • ссмс

1

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

3

Учетная запись, под которой работает сервер sql, не имеет доступа к местоположению, в котором у вас есть файл резервной копии или в котором вы пытаетесь восстановить базу данных. Вы можете использовать Диспетчер конфигурации SQL Server , чтобы определить, какая учетная запись используется для запуска экземпляра SQL Server, а затем убедиться, что эта учетная запись имеет полный контроль над файлом . BAK и папкой, в которую будет восстановлен MDF.

2

Что ж, в моем случае решение было довольно простым и понятным.

Мне пришлось изменить только значение log On As value.

Действия по устранению —

  1. Открыть Диспетчер конфигурации сервера Sql
  2. Право нажмите на SQL Server (MSSQLSERVER )
  3. Перейти к Свойства
  1. изменить войти в систему как значение на LocalSystem

Надеюсь, это поможет и вам 🙂

1

Я только что столкнулся с той же проблемой, но у меня было другое решение. По сути, на моем компьютере были установлены и SQL Server, и SQL Server Express. Это не сработало, когда я попытался восстановить SQL Express, но сработало правильно, когда я восстановил его на SQL Server.

1

Хорошим решением, которое может работать, является переход к файлам > и проверка перераспределения всех файлов. все файлы в папку в параметрах «Файлы» следующим образом:

Я столкнулся с той же проблемой, но мои настройки немного отличаются.

  • Я запускаю свою базу данных в док-контейнере Linux
  • Инструмент управления sqlserver в Windows.

Я сделал следующее:

 sudo docker exec -u root -it sqlserver /bin/bash
 

Это входит в контейнер Docker как пользователь root.

Затем:

 chmod 777 /path/to/file.bak
 

777 дает права на чтение, запись и выполнение файла для любой группы, пользователь

. Я попробовал описанный выше сценарий и получил ту же ошибку 5 (отказано в доступе). Я глубоко погрузился и обнаружил, что файл .bak должен иметь доступ к учетной записи службы SQL. Если вы не уверены, введите services.msc в меню «Пуск» -> «Выполнить», затем проверьте учетную запись для входа в службу SQL.

Затем перейдите к файлу, щелкните правой кнопкой мыши и выберите вкладку «Безопасность» в «Свойствах», затем отредактируйте, чтобы добавить нового пользователя.

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

Затем из SSMS попробуйте восстановить резервную копию.

2

Я получал ту же ошибку при попытке восстановить резервную копию базы данных SQL 2008 R2 в базе данных SQL 2012. Я предполагаю, что ошибка связана с недостаточными правами для размещения файлов .mdf и .ldf на диске C. Я попробовал одну простую вещь, после чего мне удалось успешно восстановить ее.

Попробуйте следующее:

В окнах мастера восстановления БД перейдите на вкладку «Файлы» и измените место назначения восстановления с C: на другой диск. Затем продолжите обычный процесс восстановления. Он обязательно будет успешно восстановлен!

Надеюсь, это поможет и вам. Ура 🙂

Есть несколько причин этой ошибки, я получил эту ошибку, потому что я установил флажок «Перераспределить все файлы в папку» на вкладке «Файлы» в окне «Восстановить базу данных», но путь по умолчанию не существует на моем локальном компьютере. У меня были файлы ldf/mdf в другой папке, как только я изменил их, я смог их восстановить.

1

Я нашел это, и у меня это сработало:

 СОЗДАТЬ ВХОД BackupRestoreAdmin С ПАРОЛЕМ='$tr0ngP@$$w0rd'
ИДТИ
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ BackupRestoreAdmin ДЛЯ ВХОДА BackupRestoreAdmin
ИДТИ
EXEC sp_addsrvrolemember «BackupRestoreAdmin», «dbcreator»
ИДТИ
EXEC sp_addrolemember 'db_owner', 'BackupRestoreAdmin'
ИДТИ
 

2

В моем случае мне пришлось поставить галочку в Перезаписать существующую базу данных (С ЗАМЕНОЙ) на вкладке Options на странице Restore Database .

Причина, по которой я получал эту ошибку: потому что в базе данных уже присутствовал файл MDF, и он не перезаписывался.

Надеюсь, кому-нибудь это поможет.

Если вы присоединяете базу данных, взгляните на сетку «Базы данных для подключения» и, в частности, в столбец «Владелец» после того, как вы указали файл .mdf. Запишите учетную запись и дайте ей полные разрешения для файлов mdf и ldf.

У меня была точно такая же проблема, но решение было другим: моя компания шифрует все файлы на моих машинах. После расшифровки файла у MSSQL не было проблем с доступом и созданием БД. Просто щелкните правой кнопкой мыши файл .bak -> Свойства -> Дополнительно… -> Зашифровать содержимое для защиты данных.

1

это случилось со мной сегодня утром, я был членом группы администраторов локального сервера и имел беспрепятственный доступ, или я так думал. Я также отметил вариант «заменить», хотя в экземпляре такой БД нет.

Выяснил, что раньше там была одноименная БД, и файлы MDF и LDF до сих пор физически находятся в папках данных и журналов сервера, но собственно метаданные отсутствуют в sys. databases. учетная запись службы SQL-сервера также не может перезаписывать существующие файлы. Выяснил также, что владелец файлов «неизвестен», мне пришлось сменить владельца на 2 файла выше, чтобы он теперь принадлежал группе администраторов локального сервера, а затем переименовал его.

Наконец-то это сработало.

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

  1. Нажмите клавишу Windows + R , чтобы открыть окно «Выполнить».
  2. Введите compmgmt.msc в поле Открыть:.
  3. Нажмите OK .
  4. Развернуть Службы и приложения .
  5. Развернуть Диспетчер конфигурации SQL Server .
  6. Изменить учетную запись пользователя на вкладке Войти как .

Теперь вы можете легко восстановить базу данных

Исправление для меня заключалось в том, чтобы зайти в «Параметры» при попытке восстановить базу данных и изменить путь на новый путь.