Заблокированные файлы данных SQL Server - PullRequest
3 голосов
/ 17 сентября 2008

У меня есть база данных 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

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

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

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

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

Ответы [ 10 ]

4 голосов
/ 17 июля 2009

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

1 голос
/ 17 сентября 2008

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

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

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

0 голосов
/ 11 августа 2018

У меня была такая же проблема. Кто-то отсоединил файлы и ушел, и мы не смогли перенести его на другой диск. Но после вступления во владение файлом (безопасность -> расширенный -> вступить во владение вашим идентификатором входа в систему), а затем добавив свой идентификатор входа в систему на вкладке безопасности и предоставив доступ к файлу, можно было двигаться.

0 голосов
/ 10 ноября 2017

Я решил похожую проблему, предоставив системному администратору все разрешения:

  1. клик правой кнопкой мыши> свойства
  2. вкладка безопасности
  3. в group or usernames нажмите изменить.
  4. нажмите добавить> расширенный
  5. нажмите find now, чтобы получить список всех доступных разрешений.
  6. выберите администратора и добавьте его в список.
  7. дайте ему полное разрешение.
0 голосов
/ 26 декабря 2013

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

0 голосов
/ 30 января 2013

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

0 голосов
/ 03 апреля 2011

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

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

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

0 голосов
/ 17 сентября 2008

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

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

0 голосов
/ 17 сентября 2008

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

0 голосов
/ 17 сентября 2008

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

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