Пытаюсь восстановить через t-sql скрипт. Не удалось получить эксклюзивный доступ, так как база данных используется - PullRequest
1 голос
/ 21 декабря 2009

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

RESTORE DATABASE M2MDATA01 FROM DISK = 'C:\Install\SQLBackup\M2MDATA01.SQLBackup' WITH REPLACE,
   MOVE 'M2MDATA01' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\M2MData01.mdf',
   MOVE 'M2MDATA01_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\M2MData01.ldf'

Я получаю следующую ошибку:

    Error   12/21/2009 9:06:09 AM   0:00:00.000 SQL Server Database Error: Exclusive access could not be obtained because the database is in use.   5   0

Однако я понятия не имею, как это можно использовать. Как я могу сказать?

Ответы [ 5 ]

3 голосов
/ 21 декабря 2009

Проверьте, что подключено (простой способ)

SELECT * FROM sys.sysprocesses S WHERE S.dbid = DB_ID('M2MDATA01')

Примечание: sysprocesses нельзя эмулировать с помощью dmvs ...

Редактировать, проверить и блокировки тоже

SELECT * FROM sys.dm_tran_locks L WHERE L.resource_type = 'DATABASE' AND L.resource_database_id = DB_ID('M2MDATA01')
2 голосов
/ 21 декабря 2009

В SQL Server Management Studio перейдите в раздел Управление => Монитор активности. Это покажет вам все процессы, которые связаны со всеми базами данных, и позволит вам убить эти процессы (рекомендуется только в крайнем случае).

0 голосов
/ 26 августа 2014

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

USER master
GO

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

RESTORE DATABASE M2MDATA01 
FROM DISK = 'C:\Install\SQLBackup\M2MDATA01.SQLBackup' 
WITH REPLACE,
MOVE 'M2MDATA01' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\M2MData01.mdf',
MOVE 'M2MDATA01_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\M2MData01.ldf'
GO

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

0 голосов
/ 22 декабря 2009

Самое простое решение - удалить базу данных и установить флажок «закрыть существующие подключения», прежде чем нажимать «ОК». Тогда восстановление будет работать нормально. Это просто DEV правильно? :}

0 голосов
/ 21 декабря 2009

Profiler является одним из вариантов.

В Sql Server Management Studio выберите Инструменты | Sql Server Profiler.

  1. Подключитесь к экземпляру сервера, на котором работает база данных, с которой вы работаете.
  2. Переключиться на вкладку выбора события
  3. установите флажок под сеткой с надписью «Показать все столбцы»
  4. В таблице найдите столбец DatabaseName и проверьте весь столбец.
  5. (необязательно) нажмите кнопку Фильтры столбцов и выберите имя базы данных, с которой вы работаете.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...