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

Не удалось получить монопольный доступ так как база данных используется

  • автор:

восстановить сервер sql из файла .bak Не удалось получить монопольный доступ

Я также пробовал с помощью мастера восстановления с тем же результатом.

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

5 ответов

Способ 1

Способ 2

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

  1. Перейдите на вкладку «Параметры» в окне «Восстановить базу данных».
  2. Проверить (перезаписать существующую базу данных (С ЗАМЕНОЙ))
  3. Проверить (закрыть существующие соединения с целевой базой данных)
  4. Затем нажмите ОК

Начинается восстановление базы данных.

Любой, у кого были проблемы, перечисленные выше, и ни один из советов не работает. Просто отключите резервное копирование Taillog в разделе «Параметры».

Если установить (или оставить) этот параметр включенным, будет предпринята попытка получить хвостовой журнал самой исходной базы данных (даже если источником для восстановления является просто файл). Поэтому, если исходная база данных используется (что обычно происходит, если вы делаете копию рабочей БД), восстановление завершается ошибкой.

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

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

Не удалось получить монопольный доступ, потому что база данных уже используется

Восстановление может произойти только в том случае, если база данных не имеет к ней никаких подключений (кроме вашей). Самый простой способ запустить всех пользователей на MS SQL Server:

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

ответ дан 14 авг.

Моя база данных находится в D:\SQL\RRDB.mdf , Мне нужно заменить MyDB с полным путем или просто RRDB.mdf ? — Мохаммад Дайян

Я создал базу данных Single_user, но столкнулся с той же проблемой! — Ахмед Ахмед

Вы должны поставить «С немедленным откатом» в конце оператора; который немедленно откатывает все ожидающие транзакции при разрыве соединений. Простая настройка для одного пользователя по умолчанию будет держать соединения открытыми до завершения транзакции. — КитС

У меня не получилось. Я получаю ту же ошибку «Не удалось получить эксклюзивный доступ . » — А.

Таким образом, я написал метод ниже для восстановления моей базы данных,
Я на правильном пути?

ответ дан 29 окт ’10, 03:10

в принципе хорошо выглядит. Не могу запустить, но вопиющих ошибок нет. Имейте в виду, что «установить одного пользователя с немедленным откатом» закроет все соединения (кроме того, которое выполняет команду) и откатит все транзакции. — Дейв

    С НЕМЕДЛЕННЫМ ОТКАТОМ — этот вариант не ждет для завершения транзакций он просто начинает откат всех открытых транзакций

С ОТКАТОМ ПОСЛЕ nnn — эта опция откатит все открытые транзакции после ожидания nnn секунд для завершения открытых транзакций. В нашем примере мы указываем, что процесс должен подождать 30 секунд перед откатом любых открытых транзакций.

После появления RESTRICTED_USER указано, только члены db_owner, dbcreator или sysadmin роли могут использовать базу данных. MULTI_USER возвращает базу данных в нормальное рабочее состояние.

2-й способ: используя ssms 2008 R2, мы можем сделать то же самое

  1. щелкните правой кнопкой мыши свойство базы данных
  2. перейдите к параметрам -> последний раздел с заголовком состояние
  3. изменение Ограничить доступ в ОДИН ПОЛЬЗОВАТЕЛЬ
  4. ответьте «да» на этот полезный вопрос, который показывает, что такого рода действия будут закрыть все другие соединения и я думаю, это единственное, что мы здесь ищем, чтобы обойти ошибку

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

  1. восстановить вашу базу данных
  2. сделать шаги 1-4 изменения Ограничить доступ назад к MULTI_USER

3-й способ: следующие команды также закроют все соединения.

теперь база данных готова к восстановлению

SET OFFLINE и SET ONLINE также работали с SQL 2008. Обратите внимание, что оба действия должны выполняться последовательно; если БД отключена, ее нельзя восстановить. — Марк Маслар

если БД отключена, ее можно восстановить. Я тестировал его на обновленном 2008 R2, и он работал. Обычно упомянутые методы не работают, и вы должны использовать монитор активности, чтобы убить активные сеансы. — Иман

Вы можете использовать метод объекта SMO SqlServer, чтобы убить все процессы в указанной базе данных перед выполнением восстановления:

ответ дан 14 мар ’14, в 14:03

Причина этой проблемы очевидна (соединения с базой данных в настоящее время открыты / активны), но используйте следующее (погуглите, чтобы вы это поняли), и все будет хорошо:

Очевидно, заменить YOURDDB с именем вашей базы данных и запустите его с главной БД.

Да, и на всякий случай, если вы застряли в однопользовательском режиме, это отменит его:

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

Вы также можете следить это, чтобы узнать, откуда происходят подключения, и другую информацию:

Не удалось получить монопольный доступ так как база данных используется

Профиль
Группа: Awaiting Authorisation
Сообщений: 42
Регистрация: 24.8.2011

Репутация: нет
Всего: нет

Доброго времени суток!
Тема поднималась на этом форуме, но для себя не нашел ответа. (возможно плохо искал, тогда прошу простить меня).

1. Раз в сутки создавать backup БД.
2. По необходимости восстанавливать из backup'а.

1. В sql server management studio создал задачу с кодом:

Код
BACKUP DATABASE [Test] TO DISK='C:\Backup\SQL_Test.bak'

Результат: по расписанию создаётся bak.

2. Создал приложение в Builder по кнопке в ADOQuery выполняется запрос:

Код
RESTORE DATABASE [Test] FROM DISK = 'C:\\Backup\\SQL_Test.bak'

Результат: "Не удалось получить монопольный доступ, т.к. БД используестся"

Я так понял, мне надо отключать пользователей от БД.

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

Профиль
Группа: Модератор
Сообщений: 20553
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453

Цитата
The system administrator restoring the database backup must be the only person currently using the database to be restored.

Добавлено через 3 минуты и 37 секунд

Цитата(VitalyP @ 1.9.2011, 11:34 )
как мне запросом из приложения получить монопольный доступ

Разорвать все соединения. Можно принудительно и жёстко — выводом базы в оффлайн или даже детачем. Всё равно что бы там не было на коннектах — всё похерится.

Цитата(VitalyP @ 1.9.2011, 11:34 )
после restore восстановить все коннекшны?

Это ещё нахрена? никак.

О(б)суждение моих действий — в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция — Администрация форума.

Профиль
Группа: Awaiting Authorisation
Сообщений: 42
Регистрация: 24.8.2011

Репутация: нет
Всего: нет

Цитата(Akina @ 1.9.2011, 14:04 )
Разорвать все соединения. Можно принудительно и жёстко — выводом базы в оффлайн или даже детачем.
Код
RESTORE DATABASE [Test] FROM DISK = 'C:\\Backup\\SQL_Test.bak'
Цитата(Akina @ 1.9.2011, 14:04 )
Это ещё нахрена? никак.

Профиль
Группа: Модератор
Сообщений: 20553
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453

Цитата(VitalyP @ 5.9.2011, 10:08 )
Подскажите пожалуйста код запроса для этого.

О(б)суждение моих действий — в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция — Администрация форума.

Профиль
Группа: Awaiting Authorisation
Сообщений: 42
Регистрация: 24.8.2011

Репутация: нет
Всего: нет

Код
sp_detach_db @dbname='Test'

Профиль
Группа: Модератор
Сообщений: 20553
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453

О(б)суждение моих действий — в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция — Администрация форума.

Профиль
Группа: Awaiting Authorisation
Сообщений: 42
Регистрация: 24.8.2011

Репутация: нет
Всего: нет

Цитата(Akina @ 5.9.2011, 15:26 )
а вывести её в оффлайн

А то последние попытки отключения заканчиваются ошибкой: "Невозможно отключить. база данных 'Test' используется. "

И ещё, по поводу восстановления:

RESTORE DATABASE [Test] FROM DISK = 'C:\\Backup\\SQL_Test.bak' WITH REPLACE

Это правильный запрос для восстановления?

Все получилось! Спасибо ещё раз!

Код
sp_detach_db @dbname='Test'
Код
sp_attach_db @dbname='Test', @filename1='C:\\PathToDB\\Test.mdf'
Код
RESTORE DATABASE [Test] FROM DISK = 'C:\\Backup\\SQL_Test.bak' WITH REPLACE

Это сообщение отредактировал(а) VitalyP — 6.9.2011, 13:50

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »

[ Время генерации скрипта: 0.1183 ] [ Использовано запросов: 21 ] [ GZIP включён ]

SQL: Перевод БД Microsoft в Single-user Mode

В некоторых случаях требуется перевод БД SQL сервер в монопольный режим доступа (однопользовательский режим базы данных, Single-user Mode) это требуется в случаях выполнения операций, внесения изменений в БД или операций восстановления из резервной копии.
Так, например, при попытке восстановить рабочую БД, из резервной копии появится сообщение:
Exclusive access could not be obtained because the database is in use.

Чтобы исправить данное сообщение об ошибке, рекомендуется закрыть все приложения работающие с данной БД, а также вкладки SQL Management Studio, после этого выполнить команду:
где, AdventureWork — это имя базы данных.
Это откатит все текущие транзакции и переведет базу данных в режим работы Single-user Mode. После этого, если в этом же окне запустить операцию восстановления из резервной копии, то ошибка: «Exclusive access. » не повторится.

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

Добавить комментарий

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