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

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

  • автор:

Ошибка при выполнении задания по восстановлению MSSQL

Всем привет. Записал скрипт через MS SQL для восстановления базы из бекапа, создал задание для выполнения по расписанию но периодически задание не выполняется. Полный текст ошибки:

Сообщение
Выполняется от имени пользователя: MEBELRADOM\rdm_sqldev.Не удалось получить монопольный доступ, так как база данных используется. [SQLSTATE 42000] (Ошибка 3101) RESTORE DATABASE прервано с ошибкой. [SQLSTATE 42000] (Ошибка 3013). Шаг завершился с ошибкой.

ПО:
MS SQL Server 2016
SQL Server Management Studio 19

ниже скрины параметров при записи скрипта и настройки задания (но там я только выставил расписание и прикрепил скрипт)

Если невозможно записать такой скрипт который автоматически закрывает все сессии перед запуском то возможно ли настроить удаление всех сессий по расписанию через консоль администратора 1С или сам MSSQL?

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

Ошибка при выполнении задания в функциями
не могу понять в чем ошибка uses crt; function spr(a,b:integer):integer; const .

В чем ошибка кода при выполнении задания?
Реализуйте функцию getline, которая считывает поток ввода посимвольно, пока не достигнет конца.

Ошибка при выполнении задания с типом "Запись"
Определить тип для представлении анкеты школьника, включающей в себя ФИО, возраст, номер школы и.

Сообщение от MarkuS3
Сообщение от MarkuS3
Сообщение от MarkuS3
Лучший ответСообщение было отмечено MarkuS3 как решение

Решение

Сообщение от MarkuS3

почему? восстановил из бэкапа и сразу переводишь в online

Сообщение от MarkuS3

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

Добавлено через 32 минуты
Ступил, не сразу нашёл как записать через SSMS.
записал добавил перед восстановлением в задание, вроде всё ок.
выглядит так

Сообщение от qwertehok

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

Сообщение от qwertehok

Вариант так себе. Потому что в процессе убивания одних сессий — могут появиться другие.
Годится только при очень невысокой нагрузке на базу.

И рестриктед юзерс — тоже обычно не прокатывает, потому что . глубоко уважаемые дебилоперы (модератор не разрешает материться) обычно не в состоянии понять концепцию "роли приложения", а уж коннект от ограниченного пользователя и нормальная работа с разрешениями — вообще нечто за гранью фантастики, поэтому 99.99% приложений работают из под сисадмина.

Так что самый рабочий вариант для восстановления — set offline, и восстановление поверх.
Труднее, когда нужно вывести базу на обслуживание, и что-то поделать в ней без пользователей.
И у тебя куча клиентов от приложения, которое вцепляется в коннект (делает реконнект при разрыве соединения) и работающее от сисадмина :-))))
Вот тут кроме как активация logon-триггера, который не дает соединиться ниоткуда, кроме loopback или чего-то в таком духе — вариантов то и нет.

Зависание формы при выполнении процедуры на MSSQL
Подключил к форме две кнопки, по нажатию которых обрабатывается своя процедура на сервере MSSQL.

Проблемы при выполнении задания
Текст задания : Создайте несложную объектно-ориентированную приключенческую игру , в которой игрок.

При выполнении задания(при клике) удаляется совсем другое задание, только в визуализации
Здравствуйте. Когда я кликаю(на кнопку Выполнено) на любом задании, почему-то всегда удаляется.

Использование множеств при выполнении задания
Решите с помощью множеств Pascal ABC: Вводятся три слова. Можно ли из символов, общих для двух.

Измените программу, составленную при выполнении предыдущего задания
Измените программу, составленную при выполнении предыдущего задания, так, чтобы можно было.

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

Профиль
Группа: 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 восстановить все коннекшны?

Профиль
Группа: Модератор
Сообщений: 20562
Регистрация: 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 )
Это ещё нахрена? никак.

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

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

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

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

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

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

Код
sp_detach_db @dbname='Test'

Профиль
Группа: Модератор
Сообщений: 20562
Регистрация: 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.1283 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Ошибка восстановления базы данных sql server не удалось получить монопольный доступ

SQL-Server: Ошибка — не удалось получить монопольный доступ, поскольку база данных уже используется.

Я предполагаю, что если вы восстанавливаете базу данных, вас не волнуют какие-либо существующие транзакции в этой базе данных. Верно? Если это так, это должно сработать для вас:

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

Установка БД в однопользовательский режим не сработала для меня, но перевод ее в автономный режим, а затем возврат в оперативный режим действительно сработал. Он находится в контекстном меню базы данных, в разделе «Задачи».

Обязательно установите флажок «Отменить все активные подключения» в диалоговом окне.

У меня возникла эта проблема при попытке восстановить базу данных на MS SQL Server 2012.

Вот что сработало для меня :

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

Это отобразит логическое имя и соответствующее физическое имя файлов данных и журнала для базы данных соответственно:

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

И задача восстановления базы данных успешно выполнилась:

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

  1. Задайте путь для восстановления файла.
  2. Нажмите «Параметры» слева.
  3. Снимите флажок «Сделать резервную копию журнала перед восстановлением»
  4. Установите флажок — «Закрыть существующие подключения к целевой базе данных».
  5. Щелкните ОК.

Выполните этот запрос перед восстановлением базы данных:

И этот после восстановления:

Для меня решение:

Установите флажок Перезаписать существующую базу данных (ЗАМЕНИТЬ) на вкладке параметров слева.

Снимите все флажки со всех остальных опций.

Выберите исходную и целевую базы данных.

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

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

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

Я просто перезапустил службу sqlexpress, а затем восстановление завершилось нормально

Перевод исходной базы данных в автономный режим работал для меня

take offline

Решение 1. Перезапустите службы SQL и попытайтесь восстановить БД. Решение 2. Перезапустите систему / сервер и попытайтесь восстановить БД. Решение 3. Верните текущую БД, удалите текущую / целевую БД и попытайтесь восстановить БД.

Вот способ восстановления базы данных от производства к разработке:

ПРИМЕЧАНИЕ. Я делаю это с помощью задания SSAS, чтобы ежедневно запускать производственную базу данных в разработку:

Шаг 1. Удалите резервную копию предыдущего дня, находящуюся в разработке:

Шаг 2: Скопируйте производственную базу данных в разработку:

Шаг 3. Восстановите, запустив скрипт .sql.

Код, который находится в файле AE11_Restore.sql:

Я получил эту ошибку, когда на диске не хватало места для восстановления Db. Очистка места решила эту проблему.

Я получил эту ошибку, когда без моего ведома кто-то был подключен к базе данных в другом сеансе SSMS. После того, как я их выписал, восстановление завершилось успешно.

Перевод БД 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. » не повторится.

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

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

Я предполагаю, что если вы восстанавливаете базу данных, вам не нужны никакие существующие транзакции в этой базе данных. Правильно? Если да, то это должно сработать для вас:

Теперь нужно знать еще об одном пункте. После того, как вы установите базу данных в однопользовательский режим, кто-то другой может попытаться подключиться к базе данных. В случае успеха вы не сможете продолжить восстановление. Это гонка! Я предлагаю запустить все три оператора одновременно.

Здравствуйте! Как восстановить БД SQL server из bak файла? Пишет что не удается восстановить так как БД не в монопольном режиме..

При восстановлении базы вот такая ошибка:

ЗАГОЛОВОК: Microsoft SQL Server Management Studio
——————————

Ошибка восстановления базы данных «MGMT_DB». (Microsoft.SqlServer.Management.RelationalEngineTa sks)

——————————
ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ:

System.Data.SqlClient.SqlError: Не удалось получить монопольный доступ, так как база данных используется. (Microsoft.SqlServer.SmoExtended)

Последнее редактирование модератором: 28.02.2019

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

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

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

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

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

Я тестировал это при запущенных службах, которые повторно подключались к базе данных. Я обнаружил, что вам нужно установить однопользовательский режим, затем запустить sp_who2, чтобы увидеть, откуда идет одно соединение, и запомнить SPID. Вы можете запустить команду kill для этого SPID и восстановление в одной транзакции, и она должна пройти. Вот последовательность, которую я использовал:

ИСПОЛЬЗУЙТЕ МАСТЕР ALTER DATABASE DATABASENAME SET SINGLE_USER С ROLLBACK IMMEDIATE GO

-Это позволит сделать только одно соединение с базой данных. -Выполните следующую команду, чтобы узнать, откуда происходят какие-либо повторяющиеся подключения к базе данных.

EXEC SP_WHO2

-Проверьте этот список в столбце DBName. Если база данных есть в списке, проверьте столбцы ProgramName и HostName, чтобы узнать, кто пытается подключиться. -Если это не служба или другое приложение, которое может автоматически переподключиться, которое может быть отключено, запишите номер в столбце SPID, чтобы прервать соединение, и немедленно начните резервное копирование. Замените ниже SPID просто номером.

KILL SPID RESTORE DATABASE DATABASENAME FROM DISK = ‘X: PATHTO BACKUP.BAK’ GO

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

ALTER DATABASE DATABASENAME SET MULTI_USER WITH ROLLBACK IMMEDIATE GO

В некоторых случаях требуется перевод БД 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…» не повторится.

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

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

На самом деле я пытаюсь создать сценарий (в Sql Server 2008) для восстановления одной базы данных из одного файла резервной копии. Я ввел следующий код и получаю сообщение об ошибке —

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

Я предполагаю, что если вы восстанавливаете базу данных, вам не нужны никакие существующие транзакции в этой базе данных. Правильно? Если да, то это должно сработать для вас:

Теперь нужно знать еще об одном пункте. После того, как вы установите базу данных в однопользовательский режим, кто-то другой может попытаться подключиться к базе данных. В случае успеха вы не сможете продолжить восстановление. Это гонка! Я предлагаю запустить все три оператора одновременно.

  1. Задайте путь для восстановления файла.
  2. Нажмите «Параметры» слева.
  3. Снимите флажок «Сделать резервную копию журнала перед восстановлением»
  4. Установите флажок — «Закрыть существующие подключения к целевой базе данных».
    введите описание изображения здесь
  5. Щелкните ОК.

выполните этот запрос перед восстановлением базы данных:

и этот после восстановления:

Для меня решение:

Установите флажок «Перезаписать существующую базу данных (С ЗАМЕНИТЬ)» на вкладке «Опции» слева.

Снимите все флажки со всех остальных опций.

Выберите исходную и целевую базы данных.

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

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

Я думаю, вам просто нужно установить db в однопользовательский режим, прежде чем пытаться восстановить, как показано ниже, просто убедитесь, что вы используете master

Я просто перезапустил службу sqlexpress, а затем восстановление завершилось нормально

Решение 1. Перезапустите службы SQL и попытайтесь восстановить БД. Решение 2. Перезапустите систему / сервер и попытайтесь восстановить БД. Решение 3. Верните текущую БД, удалите текущую / целевую БД и попытайтесь восстановить БД.

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

Обязательно установите флажок «Отменить все активные подключения» в диалоговом окне.

Вот способ восстановления базы данных от производства к разработке:

ПРИМЕЧАНИЕ. Я делаю это через SSAS, чтобы ежедневно запускать производственную базу данных в разработку:

Шаг 1. Удалите резервную копию предыдущего дня в разработке:

Шаг 2: Скопируйте производственную базу данных в разработку:

Шаг 3. Восстановите, запустив сценарий .sql.

Код, который находится в файле AE11_Restore.sql:

Я получил эту ошибку, когда на диске не хватало места для восстановления Db. Очистка места решила эту проблему.

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

Я предполагаю, что если вы восстанавливаете базу данных, вам не нужны никакие существующие транзакции в этой базе данных. Правильно? Если да, то это должно сработать для вас:

Теперь нужно знать еще об одном пункте. После того, как вы установите базу данных в однопользовательский режим, кто-то другой может попытаться подключиться к базе данных. В случае успеха вы не сможете продолжить восстановление. Это гонка! Я предлагаю запустить все три оператора одновременно.

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

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