SQL Server Express не может прикрепить или удалить файл mdf

Мой файл базы данных Whist.mdf был прикреплен к SQL Server Express через Management Studio, но он перестал работать в том смысле, что NHibernate в моем решении asp.net запускал некоторые исключения подключения. Я просто отключил его от Management Studio, потому что не мог открыть там базу данных.

Но когда я пытаюсь его снова подключить, я получаю такую ​​ошибку:

Не удалось подключить базу данных для сервера MyPCName \ SQLECPRESS. (Microsoft.SqlServer.Smo) Невозможно открыть физический файл "C: \ Program Files \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ DATA \ Whist.mdf". Ошибка операционной системы 32: «32 (процесс не может получить доступ к файлу, потому что он используется другим процессом)». (Microsoft SQL Server, ошибка: 5120)

Я погуглил, но не могу найти решение, которое подойдет мне. Например.:

Что-то есть в пользовательском экземпляре, но я не могу понять, связано ли это с этим:

Я попытался удалить файл mdf в Windows, но я тоже не могу этого сделать:

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

Я попытался остановить процесс SQL Server, закрыть исследование и удалить из cmd и перезагрузить ...

Надеюсь, кто-то может помочь - я думаю, это просто ...


person Morten Holmgaard    schedule 07.02.2012    source источник


Ответы (3)


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

Вы также, вероятно, правы, подозревая, что виновным здесь является Пользовательский экземпляр SQL Server Express. Пользовательский экземпляр - это особый процесс SQL Server, который не запускается как служба, а запускается и принадлежит приложению, которое пытается подключиться к нему. В вашем случае есть два пользовательских экземпляра, которые могут быть проблемой: один принадлежит упомянутому вами приложению ASP.NET, а другой принадлежит вам и запущен Visual Studio. Если вы используете IIS Express или настроили пул приложений IIS для приложения ASP.NET для запуска от имени вашей учетной записи, тогда у нас есть только один пользовательский экземпляр, о котором нужно беспокоиться.

Я рекомендую вам не использовать пользовательские экземпляры и не пытаться подключиться напрямую к файлу базы данных. Просмотрите строки подключения и удалите User Instance=true из всех. Вы также хотите удалить свойство AttachDBFilename=....

Если файл базы данных добавлен в любое из ваших решений Visual Studio, удалите его (только будьте осторожны, чтобы не удалить сам файл). Последний шаг - удалить все подключения к файлу базы данных из узла «Подключения к данным» в обозревателе серверов.

Затем перезапустите компьютер, чтобы убедиться, что все пользовательские экземпляры, работавшие в фоновом режиме, были отключены. После того, как машина снова запустится, вы сможете снова прикрепить файл базы данных к своему основному SQL Server Express с помощью SQL Server Management Studio. Назовем базу данных Whist

Для подключения к базе данных используйте следующую строку подключения:

Data Source=.\SQLExpress;Integrated Security=true;Initial Catalog=Whist

При подключении из приложения ASP.NET убедитесь, что вы создали учетную запись в SQL Server Express для приложения.

person Krzysztof Kozielczyk    schedule 09.02.2012
comment
Я попытался последовать вашим предложениям - вот что я сделал: не могу понять, как приложение ASP.NET в моем случае должно содержать экземпляр, потому что я просто использую внутренний сервер VS для запуска своего приложения (проблема находится в моей среде разработки). Файл de mdf не включен ни в одно решение, или нет никаких подключений данных от VS к базе данных. ConnectionString соответствует вашему. Я отключил экземпляр пользователя в студии управления следующим образом: sp_configure 'user instances enabled', '0' Я перезапускал несколько раз и пытался остановить / запустить сервер sql - без изменений. Что-то мне не хватает? - person Morten Holmgaard; 13.02.2012
comment
Вы можете попробовать перевести службу SQL Server в состояние Отключено и перезапустить. Это должно предотвратить его запуск или запуск любых экземпляров User. На этом этапе вы сможете переместить / переименовать файл базы данных (не забывайте о файлах * .ldf). Если нет, то происходит что-то действительно странное, может быть, что-то столь же глупое, как блокирование файла антивирусом? После того, как вы снова включите SQL Server, вы сможете снова подключить базу данных, возможно, сначала под другим именем и выполнить некоторую очистку из SSMS. - person Krzysztof Kozielczyk; 13.02.2012
comment
Это тоже не сработало ... Понятия не имею ... Я подумываю переустановить SQL Server - у вас есть другие идеи? - person Morten Holmgaard; 14.02.2012
comment
Совершенно не знаю, если вы уверены, что это единственный экземпляр SQL Server на этой машине. - person Krzysztof Kozielczyk; 14.02.2012
comment
После удаления сервера Sql он все еще не изменился ... Пока я случайно не дважды щелкнул файл mdf, и он не подключился к инструментам deamon (каким-то образом с ним связан файл mdf), и было нетрудно понять, что я правильно сделал что-то подобное для запуска проблемы .. Я разобрал ее и никаких проблем .. И ассоциация инструментов deamon будет удалена! Спасибо за помощь .. - person Morten Holmgaard; 17.02.2012

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

person Randy Thornhill    schedule 18.10.2014

Если вы хотите скопировать файлы .mdf и .ldf из своей базы данных, вы можете сначала установить для файла базы данных значение «офлайн». Пожалуйста, выполните следующие действия:

Open your SQL Server 2008(suppose you are using SQL Server 2008 ).
Select your Database that you want to copy then left click.
Go to Tasks -> Take Offline.
Right click. 

Затем вы можете скопировать этот файл базы данных в любые папки.

person Tomy Thoan    schedule 05.08.2015