SQL Server Express не может прикрепить или удалить файл mdf - PullRequest
1 голос
/ 08 февраля 2012

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

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

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

Я гуглил, но не могу найти решение, которое работает для меня. E.g.:

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

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 09 февраля 2012

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

1 голос
/ 05 августа 2015

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

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. 

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

1 голос
/ 19 октября 2014

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

...