Не удается открыть устройство резервного копирования. Ошибка операционной системы 5


143

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

Однако всякий раз, когда я запускаю его, я всегда получаю это сообщение об ошибке:

Msg 3201, уровень 16, состояние 1, строка 1
Не удается открыть устройство резервного копирования «C: \ Users \ Me \ Desktop \ Backup \ MyDB.Bak». Ошибка операционной системы 5 (Доступ запрещен).

Msg 3013, уровень 16, состояние 1, строка 1
BACKUP DATABASE аварийно завершает работу.

Это мой запрос:

BACKUP DATABASE AcinsoftDB
TO DISK = 'C:\Users\Me\Desktop\Backup\MyDB.Bak'
WITH FORMAT,
MEDIANAME = 'C_SQLServerBackups',
NAME = 'Full Backup of MyDB';

Что ж, сообщение об ошибке довольно ясное, не так ли? От имени какого пользователя работает программа? Существует ли bak файл? Вы можете получить к нему доступ вручную?
Пекка

1
Должны ли мы предположить, что это для SQL Server из пути к файлу, поскольку вы не поместили продукт в теги или заголовок?
Powerlord

Мне удалось выполнить этот запрос до того, как я переформатировал свой ноутбук, если это помогло. Это SQL Server 2008, и я работаю как администратор. Файл bak не существует, так как я создаю его с помощью этого запроса.
Смайлик

@Smiley Face: вы должны читать файл SQL через локальную сеть, а не через сеть. Это означает, что вам сначала нужно переместить файл SQL из сети на локальный диск и восстановить его.
mrjimoy_05 08

Ответы:


238

Да, я только что забил этот.

Поищи в Windows Services. Пуск> Администрирование> Службы

Найдите Службу в списке под названием: SQL Server (MSSQLSERVER) найдите столбец «Вход в систему как» (необходимо добавить его, если его нет в списке).

Это учетная запись, которая вам нужна, чтобы предоставить разрешения для каталога, щелкните правой кнопкой мыши в проводнике> свойства> Общие ресурсы (и безопасность)

ПРИМЕЧАНИЕ . Не забудьте предоставить разрешения для фактического каталога И для общего ресурса, если вы выходите по сети.

Подайте заявку и дождитесь распространения разрешений, повторите попытку резервного копирования.

ПРИМЕЧАНИЕ 2 : если вы выполняете резервное копирование по сети и ваш SQL работает как «Локальная служба», тогда у вас проблемы ... вы можете попробовать назначить разрешения, или может быть проще выполнить локальное резервное копирование и xcopy за пределами SQL Server ( час спустя).

ПРИМЕЧАНИЕ 3. Если вы работаете как сетевая служба, ИНОГДА удаленная машина не распознает сетевую службу на вашем SQL Server. В этом случае вам необходимо добавить разрешения для самого компьютера, например. MyServer $.


22
Разрешения / add / advanced не нашли пользователя в списке, но я вставил "NT Service \ MSSQLSERVER", и он работал как чемпион.
Mark A

3
Покрывает ли это добавление разрешения «все» к папке?
DevDave

3
Зависит от того, если это действительно публичный неаутентифицированный, тогда да. Если это "любой аутентифицированный", то ЛОКАЛЬНАЯ СЛУЖБА на удаленной машине обычно не подходит ... но действительно ли вы хотите предоставить доступ всем, для нас это почти преступление, которое можно закрыть.
Робин Весси

1
У меня не сработало, и я просто выполняю резервное копирование на C: \ temp \. Экран разрешений для папок просто не распознает вход в систему, используемый службой NT Service \ MSSQLSERVER , даже при вставке в соответствии с предложением @Mark A. Есть ли хорошая альтернативная учетная запись для использования этой службы?
MGOwen

8
У меня сработало, отличное решение! Я использую SQL Server Express 2014, поэтому вам нужно будет предоставить разрешение на запись в NT Service \ MSSQL $ SQLEXPRESS.
mikhail-t

11

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


6

Учетная запись службы SQL Server не имеет разрешений на запись в папку. C:\Users\Kimpoy\Desktop\Backup\


22
как предоставить учетной записи службы SQL Server разрешения на доступ к этой папке? :)
Смайлик

6

У меня тоже была эта проблема недавно, однако я выполнял задание резервного копирования с сервера A, но резервная копия базы данных находилась на сервере B в файловом ресурсе на сервере C. Когда агент на сервере A сообщает серверу B запустить резервную копию t -sql, на самом деле это учетная запись службы, под которой sql запущен на СЕРВЕРЕ B, который пытается записать резервную копию на сервер C.

Просто помните, что именно учетная запись службы sql-сервера, выполняющая фактическую команду BACKUP DATABASE, - это то, что требует привилегий в файловой системе, а не для агента.


4

Я просто сам через это проходил. Я убедился, что у моего пользователя MSSQLSERVER был логин, full accessно он все еще вызывал проблемы. Это сработало только после того, как я переместил место назначения в корень C. Что еще более важно, из папки пользователя (хотя у меня был общий ресурс с полными разрешениями - даже попробовал «Все» в качестве теста).

Не знаю, считаю ли я свою проблему «исправленной», но она «работает».

Просто к сведению всех пользователей, которые сталкиваются с этой веткой.


1
Я думаю, это вызвано тем, что корпоративные домены имеют пользовательские пути, расположенные на сетевых дисках, поэтому они доступны пользователю прозрачно, независимо от машины, на которую они входят. Примерно такая ситуация: superuser.com/a/730519
Бон

@Bon Спасибо! Это решило проблему для меня. Путь, по которому у меня был файл резервной копии, на самом деле был сетевым путем.
JonM

4

У меня такая же проблема с SQL Express 2014 SP1 в Windows 10.

Решение, которое работает

  1. Откройте Service, набрав Services
  2. Найдите и откройте SQL Server (SQLExpress).
  3. Перейдите на вкладку LogOn
  4. Выберите учетную запись локальной системы (также проверьте, разрешено ли службам взаимодействовать с рабочим столом)
  5. Щелкните ОК. Остановите службу. Перезапустите службу.
  6. Задача решена

3

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

Вам нужно перейти на свой сервер, на котором установлен SQL Server. Найдите диспетчер конфигурации SQL Server

введите описание изображения здесь

Далее вам нужно перейти в «Службы SQL Server»

введите описание изображения здесь

Под вашим экземпляром SQL Server (MSSQLSERVER) будет учетная запись со столбцом «Logon As», в моем случае это NT Service \ MSSQLSERVER .

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

Допустим, ваш файл резервной копии находится в папке «D: \ Shared», тогда вам нужно предоставить такие разрешения:

введите описание изображения здесь


2

У меня была аналогичная проблема. Я добавил права на запись в сам файл .bak и свою папку, в которую я делал резервную копию для пользователя NETWORK SERVICE. Чтобы добавить разрешения, просто щелкните правой кнопкой мыши файл / каталог, который вы хотите изменить, выберите вкладку безопасности и добавьте туда соответствующих пользователей / разрешения.


1
что вы имеете в виду под подходящим?
Steam

2

Вот что я сделал, чтобы обойти проблему.

1) Перейти в резервную копию

2) Удалите путь к файлу назначения на диск

3) Нажмите Добавить

4) В поле Имя файла: установите флажок вручную введите имя резервной копии после .. \ backup, как показано ниже, где Yourdb.bak - имя резервной копии базы данных.

C: \ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ Backup \ Yourdb.bak

5) Нажмите ОК.

Надеюсь это поможет!


2

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

  1. Открыть запуск с помощью Windows + R
  2. Введите services.msc, и откроется диалоговое окно служб.
  3. Найдите SQL Server (MSSQLSERVER)
  4. Щелкните правой кнопкой мыши и выберите свойства.
  5. Перейдите на вкладку Вход в систему
  6. Выберите учетную запись локальной системы и нажмите «Применить» и «ОК».
  7. Щелкните ссылку «Остановить» на левой панели, выбрав «SQL Server (MSSQLSERVER)» и запустите его снова после полной остановки.
  8. Наслаждайтесь резервной копией.

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


1

Я знаю, что это не точное решение, но использование внешних путей решает эту проблему.

BACKUP DATABASE AcinsoftDB
TO DISK = 'E:\MyDB.Bak'
WITH FORMAT,
MEDIANAME = 'C_SQLServerBackups',
NAME = 'Full Backup of MyDB';

1

SQL Server не может получить доступ (записать) резервную копию в указанное место.

Сначала вам нужно проверить учетную запись службы, на которой работает сервер Sql. Это можно сделать с помощью диспетчера конфигураций или Services.msc.

или

Используйте запрос ниже:

SELECT  DSS.servicename,
    DSS.startup_type_desc,
    DSS.status_desc,
    DSS.last_startup_time,
    DSS.service_account,
    DSS.is_clustered,
    DSS.cluster_nodename,
    DSS.filename,
    DSS.startup_type,
    DSS.status,
    DSS.process_id FROM    sys.dm_server_services AS DSS;

Теперь посмотрите на столбец service_account и запишите его.

Перейдите в то место, где вы пытаетесь сделать резервную копию, в вашем случае: C: \ Users \ Me \ Desktop \ Backup.

Щелкните правой кнопкой мыши -> Свойства -> Безопасность ->

Добавьте учетную запись службы и предоставьте разрешения на чтение / запись. Это решит проблему.


0

У меня была такая же проблема, и приведенный ниже URL мне действительно помог.

Это может помочь и вам.

http://blog.sqlauthority.com/2011/04/13/sql-server-fix-error-msg-3201-level-16-cannot-open-backup-device-operating-system-error-5access-is- отказано /


6
Вы должны попытаться ответить на вопрос, объясняющий, как статья вам помогла.
Али Сами

0

Msg 3201, уровень 16, состояние 1, строка 1 Не удается открыть устройство резервного копирования «C: \ Backup \ Adventure_20120720_1024AM.trn». Ошибка операционной системы 5 (Доступ запрещен). Msg 3013, уровень 16, состояние 1, строка 1 BACKUP LOG ненормально завершается.

Я проверил резервную папку на диске C. Имеет ли новая учетная запись службы разрешение на полный доступ или нет? Я понял, что учетная запись службы «Test \ Kiran» не имеет разрешения на полный доступ.

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

  1. Перейдите на диск C, щелкните правой кнопкой мыши папку Backup.
  2. Выберите вкладку Безопасность.
  3. Нажмите кнопку «Редактировать», откроется новое окно.
  4. Нажмите кнопку «Добавить» и введите учетную запись пользователя Test \ Kiran и нажмите кнопку «Проверить имя», это подтвердит, что введенный вами пользователь существует или нет, если он существует, он отобразит пользователя в окне, нажмите «ОК».
  5. Выберите введенное имя пользователя и установите флажок «Полный доступ» под «Разрешить».

0

Пожалуйста, проверьте доступ к дискам. Сначала создайте одну папку и перейдите в свойства папки,

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

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


0

Поделитесь этой папкой и используйте UNC-путь, например: \ pc \ backups \ mydb.bak

Тогда вы можете перестать делиться.

Не очень элегантно, но решает все проблемы с разрешениями (вам также необходимо предоставить разрешения для совместного использования, как упоминалось выше)


0

У меня возникла эта проблема, когда файл .BAK временно хранился в папке, зашифрованной с помощью BitLocker. Он сохранил шифрование после того, как был перемещен в другую папку.

Учетная запись NETWORK SERVICE не смогла расшифровать файл и выдала это полностью информативное сообщение об ошибке.

Удаление шифрования BitLocker (снятие флажка «Зашифровать содержимое для защиты данных» в свойствах файла) для файла .BAK решило проблему.


0

У меня такая же ошибка. Следующие изменения помогли мне это исправить.

Мне пришлось проверить Server Manager-> Tool-> Services и найти пользователя (столбец «Log On As») для службы: SQL Server (SQLEXPRESS).

Я перешел в локальную папку (C: \ Users \ Me \ Desktop \ Backup) и добавил "NT Service \ MSSQL $ SQLEXPRESS" в качестве пользователя, чтобы дать права на запись.


0

Привет, вам нужно изменить запрос с:

BACKUP DATABASE AcinsoftDB
TO DISK = 'C:\Users\Me\Desktop\Backup\MyDB.Bak'

к

BACKUP DATABASE AcinsoftDB
TO DISK = N'C:\Users\Me\Desktop\Backup\MyDB.Bak'

Вы должны добавить N перед тем, как путь работает для меня.


0

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

TO DISK N'{path}\WRITE_YOUR_BACKUP_FILENAME_HERE.bak'

0

Я решил ту же проблему с помощью следующих 3 шагов:

  1. Я храню свой файл резервной копии в другом пути к папке, который работал правильно.
  2. Просмотрите разные вкладки безопасности в двух папках (как на изображении ниже).
  3. Разрешение на редактирование в папке вкладки безопасности, которое работает неправильно.

введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.