У меня есть база данных SQL Server, где у меня есть данные и файлы журналов, хранящиеся на внешнем USB-накопителе. Я переключаю внешний диск между моей основной машиной для разработки в моем офисе и ноутбуком, когда меня нет в офисе. Я пытаюсь использовать sp_detach_db и sp_attach_db при перемещении между настольным компьютером и ноутбуком. Я считаю, что это работает нормально на рабочем столе - я могу отсоединить и подключить базу данных там без проблем. Но на ноутбуке я не могу подключить базу данных (база данных изначально была создана на ноутбуке, и там произошло первое отключение). Когда я пытаюсь подключить ноутбук, я получаю следующую ошибку:
Невозможно открыть физический файл "p: \ SQLData \ AppManager.mdf". Ошибка операционной системы 5: «5 (ошибка не найдена)»
Я нахожу много ссылок на эту ошибку, заявляющих, что это проблема с разрешениями. Поэтому я пошел по этому пути и убедился, что учетная запись службы SQL Server имеет соответствующие разрешения. Я также создал новую базу данных по этому же пути и смог успешно отсоединить и снова подключить ее. Так что я уверен, что разрешения не проблема.
Дальнейшие исследования показывают, что я не могу переименовывать, копировать или перемещать файлы данных, так как Windows считает, что они заблокированы - даже когда служба SQL Server остановлена. Process Explorer не показывает какой-либо процесс, блокирующий файлы.
Как узнать, что блокирует файлы, и разблокировать их.
Я убедился, что базы данных не отображаются в SSMS, поэтому SQL Server до сих пор не считает, что они существуют.
Обновление от 18.09.2008
Я попробовал все предложенные ответы на сегодняшний день безуспешно. Однако попытка этих предложений помогла прояснить ситуацию. Я могу проверить следующее:
- Я могу успешно отсоединить и повторно подключить базу данных только в том случае, если внешний диск подключен к серверу, на котором копия базы данных восстанавливается - фактически, на сервере, где база данных «создается», - давайте назовем это «Исходный сервер» ,
- Я могу перемещать, копировать или переименовывать данные и файлы журналов после отключения базы данных, пока внешний диск все еще подключен к исходному серверу.
- Как только я перевожу внешний диск на другую машину, файлы данных и журналов «блокируются», хотя два инструмента, которые я пробовал - Process Explorer и Unlocker, оба не обнаруживают никаких ручек блокировки, прикрепленных к файлам.
NB. После отсоединения базы данных я попытался как остановить службу SQL Server, так и завершить работу исходного сервера перед перемещением внешнего диска - все еще безуспешно.
Таким образом, на этом этапе все, что я могу сделать для перемещения данных между настольным компьютером и ноутбуком, - это сделать резервную копию данных на внешнем диске, переместить внешний диск, восстановить данные из резервной копии. Работает нормально, но занимает немного больше времени, поскольку база данных имеет разумный размер (1 ГБ). В любом случае, это единственный выбор, который у меня есть на данном этапе, хотя я старался не идти по этому пути.