Меню

Ошибка восстановления базы данных 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. » не повторится.

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

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

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

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

  • #1

Здравствуйте! Как восстановить БД 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

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

Alter Database YOURDB   
SET SINGLE_USER With ROLLBACK IMMEDIATE
GO

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

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

Alter Database YOURDB   
SET MULTI_USER With ROLLBACK IMMEDIATE
GO

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

EDIT:

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

Я тестировал это при запущенных службах, которые повторно подключались к базе данных. Я обнаружил, что вам нужно установить однопользовательский режим, затем запустить 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, после этого выполнить команду: 

USE [master]
GO
ALTER DATABASE [AdventureWork] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

где, AdventureWork — это имя базы данных.
Это откатит все текущие транзакции и переведет базу данных в режим работы Single-user Mode. После этого, если 

в этом же окне

запустить операцию восстановления из резервной копии, то ошибка: «Exclusive access…» не повторится.

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

USE master;
GO
ALTER DATABASE AdventureWorks
SET MULTI_USER;
GO

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


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

Msg 3101, Level 16, State 1, Line 3
Exclusive access could not be obtained because 
the database is in use.
Msg 3013, Level 16, State 1, Line 3
RESTORE DATABASE is terminating abnormally.

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

IF DB_ID('AdventureWorksDW') IS NOT NULL 
BEGIN 
RESTORE DATABASE [AdventureWorksDW] 
FILE = N'AdventureWorksDW_Data' 
FROM  
DISK = N'C:Program FilesMicrosoft SQL Server
MSSQL10_50.SS2008MSSQLBackupAdventureWorksDW.bak' 
WITH  FILE = 1, 
MOVE N'AdventureWorksDW_Data' 
TO N'C:Program FilesMicrosoft SQL Server
MSSQL10_50.SS2008MSSQLDATAAdventureWorksDW.mdf', 
MOVE N'AdventureWorksDW_Log'  
TO N'C:Program FilesMicrosoft SQL Server
MSSQL10_50.SS2008MSSQLDATAAdventureWorksDW_0.LDF', 
NOUNLOAD,  STATS = 10 
END


Ответы:


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

USE master
GO

ALTER DATABASE AdventureWorksDW
SET SINGLE_USER
--This rolls back all uncommitted transactions in the db.
WITH ROLLBACK IMMEDIATE
GO

RESTORE DATABASE AdventureWorksDW
FROM ...
...
GO

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







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






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

alter database [YourDBName] 
set offline with rollback immediate

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

  alter database [YourDBName] 
  set online






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

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

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

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

  4. Щелкните ОК.

Вот и все.



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

declare @sql as varchar(20), @spid as int

select @spid = min(spid)  from master..sysprocesses  where dbid = db_id('<database_name>') 
and spid != @@spid    

while (@spid is not null)
begin
    print 'Killing process ' + cast(@spid as varchar) + ' ...'
    set @sql = 'kill ' + cast(@spid as varchar)
    exec (@sql)

    select 
        @spid = min(spid)  
    from 
        master..sysprocesses  
    where 
        dbid = db_id('<database_name>') 
        and spid != @@spid
end 

print 'Process completed...'

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


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

USE master
GO
ALTER DATABASE AdventureWorksDW
SET SINGLE_USER


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




Use Master
alter database databasename set offline with rollback immediate;

--Do Actual Restore
RESTORE DATABASE databasename
FROM DISK = 'path of bak file'
WITH MOVE 'datafile_data' TO 'D:newDATAdata.mdf',
MOVE 'logfile_Log' TO 'D:newDATADATA_log.ldf',replace

alter database databasename set online with rollback immediate;
GO


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


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

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


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

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

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

declare @sql varchar(1024);

set @sql = 'DEL C:ProdAEandAEXdataBACKUPAE11.bak'
exec master..xp_cmdshell @sql

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

declare @cmdstring varchar(1000)
set @cmdstring = 'copy \ShareSQLDBBackupAE11.bak C:ProdAEandAEXdataBACKUP'
exec master..xp_cmdshell @cmdstring 

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

SQLCMD -E -S dev-erpdata1 -b -i "C:ProdAEandAEXdataBACKUPAE11_Restore.sql"

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

RESTORE DATABASE AE11
FROM DISK = N'C:ProdAEandAEXdataBACKUPAE11.bak'
WITH MOVE 'AE11' TO 'E:SQL_DATAAE11.mdf',
MOVE 'AE11_log' TO 'D:SQL_LOGSAE11.ldf',
RECOVERY;


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


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

отключить

  • Remove From My Forums
  • Question

  • Hi,

    I am unable to restore a db on SQL Server 2005 running on XP Professional. The backup was made on the same machine just a few hours previously. The error msg is:

    Restore failed for Server ‘Server_Name’. (Microsoft.SqlServer.Smo)

    System.Data.SqlClient.SqlError: RESTORE cannot process database ‘DbName’ because it is in use by this session. It is recommended that the master database be used when performing this operation.

    However, there are no other apps currently connected to the db and the db is not involved in any query windows. This should be a perfectly routine restore, which I have done hundreds of times on many servers. I rebooted the server and still the same error.

    Any suggestions?

    Thanks.

    Dan

Answers

  • Hi — I just ran into this problem too, and my issue was I was restoring a database that I also was using as my default database.

    So, by changing my user default database to the master db, I was able to restore.

    Hope that helps.

    • Marked as answer by

      Tuesday, July 27, 2010 10:06 PM

  • Your login to the server cannot have the database as its default. Go to Security > Logins > your login user. Right click to get properties and where it says Default, put the database back to «Master.» It doesn’t take you out of the other db, just takes it out of that connection for the restore. I’d routinely restored but must have one day changed the default thinking it wouldn’t hurt anything. Now I know it hurts restores to that db if I log onto the server as that connection with that default! Hope this helps clear it up.

    • Proposed as answer by
      Jeffrey N. Sarmiento
      Monday, April 13, 2009 7:53 AM
    • Marked as answer by
      Kalman TothEditor
      Tuesday, July 27, 2010 10:05 PM

  • I’m assuming that you are using Enterprise Manager or SQL Server Management Studio.

    You are connected to the database.

    With SSMS, close all query windows until the only window left open is [Object Exporer Details]. In the [Object Explorer] pane, click on any database OTHER than the one you want to RESTORE. IF there are no others listed, click on [System Databases], then click on the Master database.

    With EM, close all windows until you have on [Console Root], then click on the Master database

    Now try your RESTORE again.

  • I got the same problem. After my hard research, I found it is because your login is using your destined database as default database. SSMS is using your login default database as working platform and always keeps a session (connection) alive. So you just need to go to your login properties and change the «Default database» to something else. It works for me!

    • Marked as answer by
      Kalman TothEditor
      Tuesday, July 27, 2010 10:05 PM

  • You do NOT want to be connected to the database. That is the problem.

    Connect to a different database, such as Master. In Object Explorer, you do not want to have the database in question selected.

  • Hi rebton — thanks for your suggestion.

    I had the same problem and changing my default database sorted it, although I did have to close down SSMS and reopen for the changes to take effect.

    • Marked as answer by
      Kalman TothEditor
      Tuesday, July 27, 2010 10:05 PM

  • I ran into the same problem.

    Thanks for the suggestion. I changed my Default database and it worked for me.

    • Marked as answer by
      Kalman TothEditor
      Tuesday, July 27, 2010 10:05 PM

  • Hi All,

    It’s an old post, but high rank, so I will add one option. Default database might be specified for login used. Change that to master in Object Explorer tab under Security >> Logins >> Your Login.

    Thanks,
    Montek


    «Do you think I am what I am without being what I’m not?»

    • Marked as answer by
      Kalman TothEditor
      Tuesday, July 27, 2010 10:04 PM

  • FWIW:

    The issue is that the your user’s default database is the on you are trying to update or is offline.

    I know this solution is stated in other posts but here’s how got past the issue.  Both the windows login I was using and the «sa» login were both pointing to the database that I was trying to update
    as their default database (don’t ask).

    This solution works for both the SQL 2005 and SQL EM (SSMS):

    When I got the connection dialog box right after SQL startup, I clicked the «Options>>» button and typed in «master» (no quotes).  Once I connected (I was getting a login error because the database I was trying to update was offline from
    a previous troubleshooting step), I ran this:

    USE [master]
    GO

     
    ALTER DATABASE yourDbHere SET ONLINE
    GO

    ALTER LOGIN [yourLoginHere] WITH DEFAULT_DATABASE=[master]
    GO

    Disconect and reconnect to your DB Engine and you’re good to go.

    Rock on

    • Marked as answer by
      Kalman TothEditor
      Tuesday, July 27, 2010 10:04 PM

  • Remove From My Forums
  • Question

  • Hi,

    I am unable to restore a db on SQL Server 2005 running on XP Professional. The backup was made on the same machine just a few hours previously. The error msg is:

    Restore failed for Server ‘Server_Name’. (Microsoft.SqlServer.Smo)

    System.Data.SqlClient.SqlError: RESTORE cannot process database ‘DbName’ because it is in use by this session. It is recommended that the master database be used when performing this operation.

    However, there are no other apps currently connected to the db and the db is not involved in any query windows. This should be a perfectly routine restore, which I have done hundreds of times on many servers. I rebooted the server and still the same error.

    Any suggestions?

    Thanks.

    Dan

Answers

  • Hi — I just ran into this problem too, and my issue was I was restoring a database that I also was using as my default database.

    So, by changing my user default database to the master db, I was able to restore.

    Hope that helps.

    • Marked as answer by

      Tuesday, July 27, 2010 10:06 PM

  • Your login to the server cannot have the database as its default. Go to Security > Logins > your login user. Right click to get properties and where it says Default, put the database back to «Master.» It doesn’t take you out of the other db, just takes it out of that connection for the restore. I’d routinely restored but must have one day changed the default thinking it wouldn’t hurt anything. Now I know it hurts restores to that db if I log onto the server as that connection with that default! Hope this helps clear it up.

    • Proposed as answer by
      Jeffrey N. Sarmiento
      Monday, April 13, 2009 7:53 AM
    • Marked as answer by
      Kalman TothEditor
      Tuesday, July 27, 2010 10:05 PM

  • I’m assuming that you are using Enterprise Manager or SQL Server Management Studio.

    You are connected to the database.

    With SSMS, close all query windows until the only window left open is [Object Exporer Details]. In the [Object Explorer] pane, click on any database OTHER than the one you want to RESTORE. IF there are no others listed, click on [System Databases], then click on the Master database.

    With EM, close all windows until you have on [Console Root], then click on the Master database

    Now try your RESTORE again.

  • I got the same problem. After my hard research, I found it is because your login is using your destined database as default database. SSMS is using your login default database as working platform and always keeps a session (connection) alive. So you just need to go to your login properties and change the «Default database» to something else. It works for me!

    • Marked as answer by
      Kalman TothEditor
      Tuesday, July 27, 2010 10:05 PM

  • You do NOT want to be connected to the database. That is the problem.

    Connect to a different database, such as Master. In Object Explorer, you do not want to have the database in question selected.

  • Hi rebton — thanks for your suggestion.

    I had the same problem and changing my default database sorted it, although I did have to close down SSMS and reopen for the changes to take effect.

    • Marked as answer by
      Kalman TothEditor
      Tuesday, July 27, 2010 10:05 PM

  • I ran into the same problem.

    Thanks for the suggestion. I changed my Default database and it worked for me.

    • Marked as answer by
      Kalman TothEditor
      Tuesday, July 27, 2010 10:05 PM

  • Hi All,

    It’s an old post, but high rank, so I will add one option. Default database might be specified for login used. Change that to master in Object Explorer tab under Security >> Logins >> Your Login.

    Thanks,
    Montek


    «Do you think I am what I am without being what I’m not?»

    • Marked as answer by
      Kalman TothEditor
      Tuesday, July 27, 2010 10:04 PM

  • FWIW:

    The issue is that the your user’s default database is the on you are trying to update or is offline.

    I know this solution is stated in other posts but here’s how got past the issue.  Both the windows login I was using and the «sa» login were both pointing to the database that I was trying to update
    as their default database (don’t ask).

    This solution works for both the SQL 2005 and SQL EM (SSMS):

    When I got the connection dialog box right after SQL startup, I clicked the «Options>>» button and typed in «master» (no quotes).  Once I connected (I was getting a login error because the database I was trying to update was offline from
    a previous troubleshooting step), I ran this:

    USE [master]
    GO

     
    ALTER DATABASE yourDbHere SET ONLINE
    GO

    ALTER LOGIN [yourLoginHere] WITH DEFAULT_DATABASE=[master]
    GO

    Disconect and reconnect to your DB Engine and you’re good to go.

    Rock on

    • Marked as answer by
      Kalman TothEditor
      Tuesday, July 27, 2010 10:04 PM

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка восстановления базы данных microsoft sqlserver management relationalenginetasks
  • Ошибка воспроизведения музыки 21 намальск что значит