2008-09-17 4 views
3

У меня есть база данных SQL Server, где у меня есть файлы данных и журналов, хранящиеся на внешнем USB-накопителе. Я переключаю внешний диск между моей основной машиной разработки в своем офисе и ноутбуком, когда не в моем офисе. Я пытаюсь использовать sp_detach_db и sp_attach_db при перемещении между настольными компьютерами и ноутбуками. Я нахожу, что это работает нормально на рабочем столе - я могу отсоединить и повторно подключить базу данных там никаких проблем. Но на ноутбуке я не могу повторно подключить базу данных (база данных была изначально создана на ноутбуке, и там был первый отрыв). Когда я пытаюсь подключиться к ноутбуку, я получаю следующую ошибку:Заблокированные файлы данных SQL Server

Невозможно открыть физический файл «p: \ SQLData \ AppManager.mdf». Ошибка операционной системы 5: «5 (ошибка не найдена)»

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

Дальнейшие исследования показывают, что я не могу переименовать, скопировать или переместить файлы данных, поскольку Windows считает, что они заблокированы - даже когда служба SQL Server остановлена. В Process Explorer не обнаружен процесс блокировки файлов.

Как узнать, что блокирует файлы и их разблокировать.

Я проверял, что базы данных не отображаются в SSMS - поэтому SQL Server по-прежнему не считает, что они существуют.

Update 18/09/2008

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

  1. Я могу успешно отсоединить и подключить базу данных только тогда, когда внешний диск подключен к серверу, что копия базы данных восстанавливаются - эффективно сервером, где база данных «созданный» - позволяет называть это «исходным сервером».
  2. Я могу перемещать, копировать или переименовывать файлы данных и журналов после отсоединения базы данных, а внешний диск по-прежнему подключен к исходному серверу.
  3. Как только я перемещаю внешний диск на другую машину, файлы данных и журналов блокируются, хотя два инструмента, которые я пробовал - Process Explorer и Unlocker, не находят никаких блокирующих ручек, прикрепленных к файлам.

NB. После отсоединения базы данных я попытался как остановить службу SQL Server, так и закрыть исходный сервер перед перемещением внешнего накопителя - все равно без успеха.

На этом этапе все, что я могу сделать для перемещения данных между настольным компьютером и ноутбуком, - это сделать резервную копию данных на внешний диск, переместить внешний диск, восстановить данные из резервной копии. Работает нормально, но занимает немного больше времени, поскольку база данных имеет разумный размер (1 ГБ). Во всяком случае, это единственный выбор, который у меня есть на этом этапе, хотя я пытался избежать того, чтобы идти по этому пути.

+0

Помогает ли перезапуск процесса проводника или службы SQL? – 2008-09-17 00:14:20

ответ

0

Когда вы находитесь в Enterprise Manager или SSMS, вы можете увидеть название базы данных, о которой вы говорите? В фанковой ситуации может быть остаточная база данных. Я бы удостоверился, что у вас есть резервная копия или копия mdf где-то в безопасности. Если это так, возможно, попробуйте сбросить базу данных и затем снова ее установить.

+0

Я проверял, что базы данных не отображаются в SSMS - поэтому SQL Server по-прежнему не считает, что они существуют. – daveywc 2008-09-17 00:18:23

1

Вы можете скопировать файлы? Мне было бы интересно узнать, можете ли вы скопировать файлы на свой ноутбук и затем прикрепить их там. Я бы предположил, что это какая-то ошибка разрешений, но похоже, что вы проделали эту работу, чтобы исправить это.

Есть ли атрибуты в файле?

Обновление: Если вы не можете копировать файлы, тогда что-то должно их блокировать. Я бы посмотрел Unlocker, который я не пробовал, но звучит как хорошая отправная точка. Вы также можете попробовать получить права собственности на файлы в соответствии с разрешениями на файлы.

+0

Нет, я не могу допировать файлы. Единственным атрибутом в файле является A. – daveywc 2008-09-17 00:43:27

+0

Unlocker был полезен - он не обнаружил никакой блокировки в файле, но он позволил мне переместить файл и, следовательно, восстановить из резервной копии все еще, используя исходное местоположение файла данных. – daveywc 2008-09-17 21:27:24

0

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

+0

Я сделал это, так что я могу двигаться сегодня, поскольку я нахожусь за пределами площадки только с ноутбуком и внешним приводом. – daveywc 2008-09-17 00:42:25

0

Запустите sqlservr.exe в режиме отладки с помощью переключателя/c и посмотрите, что произойдет при запуске. Любые проблемы с блокировкой или разрешениями могут быть уложены в постель, сделав копию файла и передав копию оригиналу.

Также проверьте связанный файл журнала (.ldf). Если этот файл отсутствует или недоступен, вы не сможете подключить базу данных к любому состоянию/состоятельному состоянию, не прибегая к режиму аварийного обхода.

4

Сумасшедший, поскольку это звучит, вы пытались вручную предоставить себе perms в файлах с помощью правой кнопки мыши/свойств/безопасности? Я думаю, что SQL Server 2005 будет устанавливать разрешения для отдельного файла исключительно для принципала, который сделал отрыв (возможно, ваша учетная запись, возможно, учетная запись, под которой работает служба SQL Server), и никто другой не может манипулировать файлом. Чтобы обойти это, мне пришлось вручную предоставить права доступа к файлам MDF и LDF, прежде чем перемещать или удалять их. См. Также сообщение в блоге на onupdatecascade.com

0

У меня была аналогичная проблема. Ничто, казалось, не разрешило его - даже попытался полностью перезагрузить машину, перезапустив SQL-сервисы и т. Д. ProcMon и ProcessExplorer ничего не показывали, поэтому я понял - «блокировка» выполняется ОС.

Я разрешил его, удалив файл и вернув его обратно с диска, установленного под другой буквой диска.

PS. Мой файл базы данных не был на USB-накопителе, но на TrueCrypt-диске (в некоторых случаях вы можете сказать, что это также «съемный диск»)

0

В SQL Server Configuration Manager зайдите в SQL Server Services. Для всех экземпляров SQL Server посмотрите, какая учетная запись выбрана во вкладке «Вход в систему» ​​- «Вход в систему как:». Например, я обнаружил, что изменение его в учетной записи локальной системы устраняет проблему, с которой вы столкнулись. Это было единственное, что на самом деле работало для меня - и, конечно же, ни у кого не было такой же проблемы.

0

Это проблема безопасности на уровне защиты на уровне файлов - вы отключили db с разными учетными данными и прикрепляли его к другим учетным данным - просто просмотрите статью http://www.sqlservermanagementstudio.net/2013/12/troubleshooting-with-attaching-and.html И попробуйте скопировать ее в другое место.

0

я решил аналогичную проблему, предоставляя системным администратором для всех разрешений:

  1. правой кнопкой мыши> свойства
  2. Вкладка безопасности
  3. в group or usernames нажмите кнопку Изменить.
  4. click add> advanced
  5. нажмите find now, чтобы перечислить все доступные разрешения.
  6. выберите администратора и добавьте его в список.
  7. предоставить ему полное разрешение.
Смежные вопросы