База данных не может быть обновлена, потому что она доступна только для чтения или имеет файлы только для чтения. Сделайте базу данных или файлы доступными для записи и перезапустите восстановление

8

Я получил файл базы данных и инструкции по его загрузке, чтобы установить SQL Server 2005 и затем присоединить его с помощью SQL Server Management Studio.

После установки все, я пытался прикрепить файл MDF, но затем он говорит мне:

поиск в каталоге для файла "D: {имя_папки} {имя_файла} .LDF" завершился ошибкой операционной системы 21 (ошибка не найдена)

Файл LDF не поставляется с базой данных, поэтому, вероятно, он должен быть сгенерирован автоматически.

Теперь D-диск - это то место, где находится мой CD-привод, так что он там ничего не найдет. Не удастся создать что-то там.

  1. Почему он пытается найти файл журнала по определенному пути? Почему не там, где находится файл базы данных?

  2. Как я могу прикрепить эту базу данных?

Я понял, что когда я выбираю базу данных для присоединения, под «подробностями базы данных» появляются три записи. MDF, NDF и LDF. «Текущий путь к файлу» LDF указывает на путь диска D выше, поэтому я удалил его.

На этот раз, когда я нажимаю «ОК», я получаю другое сообщение об ошибке:

База данных не может быть обновлена, потому что она доступна только для чтения или имеет файлы только для чтения.
Сделайте базу данных или файлы доступными для записи и перезапустите восстановление.

Ошибка активации файла. Физическое имя D: {папка} {файл} .LDF может быть неправильным.
Новый файл журнала "..." создан. (Microsoft SQL Server, ошибка: 3415)

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

Дополнительная информация:

  • Инструкции требуют, чтобы я использовал логин "sa", который, похоже, является учетной записью sysadmin. Я подключен к своему экземпляру SQL Server, используя этот логин.

  • Я проверил свойства файла, что он не только для чтения. Каталог не только для чтения. Все ACL разрешены.

  • Я не могу прикрепить базу данных. Когда я пытаюсь присоединить его, он выдает сообщение об ошибке «прикрепить базу данных не удалось».

  • Закрытие SSMS и повторное открытие его в качестве администратора не имеет значения.

  • select SERVERPROPERTY('ProductVersion')возвращает 9.00.4035.00. Есть еще один файл, который поставляется с базой данных «dbdata.ini», который говорит «IsSql2000 = 1», так что, предположительно, он предназначен для загрузки в SQL Server 2000. Я посмотрю, смогу ли я заставить его работать в 2000 году.

MxLDevs
источник

Ответы:

8

Это не проблема доступа. Проблема заключается в том, что вы подключаете базу данных к более высокой версии SQL Server, чем тот экземпляр, к которому он .mdfбыл изначально подключен, и он доступен только для чтения. SQL Server пытается обновить базу данных как часть присоединения и не может, потому что БД находится в режиме только для чтения.

Если ваша база данных находится READ_ONLY(как кажется, это основано на ваших сообщениях об ошибках), то вам нужно все файлы (и журнал, и данные), чтобы прикрепить ее согласно документации Technet . Если вы посмотрите под FOR ATTACHпредложением, он явно описывает, что:

... для базы данных только для чтения, журнал не может быть перестроен, потому что основной файл не может быть обновлен. Поэтому, когда вы присоединяете базу данных только для чтения, чей журнал недоступен, вы должны предоставить файлы журнала или файлы в FOR ATTACHпредложении.

Вам нужно сопроводительное .ldfдля базы данных. Я хотел бы связаться с кем бы обеспечил базу данных и попросить их предоставить оба .mdfи .ldfфайлы. Затем вы можете прикрепить его со следующим синтаксисом:

CREATE DATABASE [foo]
ON (FILENAME='<<path to mdf>>')
LOG ON (FILENAME='<<path to ldf>>')
FOR ATTACH;

READ_ONLYСтатус не может быть удален из базы данных , не подключая его , потому что он хранится в метаданных базы данных. Чтобы изменить это, база данных должна быть онлайн и присоединена.

Другая альтернатива - запросить резервную копию базы данных. Вы можете обойти некоторые из этих проблем проще, если вы выполняете восстановление базы данных вместо присоединения.

Майк Фал
источник
1
Использование LOG ONс соответствием ldfне решило проблему для меня
Mugen
25

Я только что нашел пост, который ответил на этот вопрос:

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

Вы должны запустить SQL Server Management Studio от имени администратора, и это работает.

Data Juggler
источник
9
  1. Откройте мой компьютер.
  2. Найдите основную папку, в которой вы сохранили файлы ".mdf" и ".ldf".
  3. Щелкните правой кнопкой мыши на папке, нажмите «Свойства».
  4. В окне свойств нажмите «Безопасность»
  5. Нажмите на кнопку «Изменить»
  6. Включите «Чтение и выполнение», «Чтение», «Запись» для перечисленных пользователей и внесите изменения в следующие папки до файлов базы данных.
  7. Попробуйте прикрепить файл ".mdf"
Тухид Мустахим. М. Дж.
источник
спасибо, мои старые окна исчезли, и я думаю, что эти файлы заблокированы этой ОС. но просто нужно сменить разрешение
сабля tabatabaee yazdi
1

Щелкните правой кнопкой мыши .mdfи .ldfфайлы, по одному за раз , и нажмите кнопку «Свойства», а затем в нижней части, где он говорит , что «этот файл пришел с другого компьютера и может быть заблокирована , чтобы помочь защитить этот компьютер» нажмите кнопку разблокировки.

Затем щелкните правой кнопкой мыши, -> свойства, -> вкладка «Безопасность» -> кнопку «Изменить», выберите «пользователи» и дайте полное разрешение на управление.

Субодх Прадхан
источник
1

В моем случае было разрешено входить в SSMS с режимом аутентификации Windows вместо пользователя sql, у которого есть роль sysadmin. просто убедитесь, что у пользователя, которого вы использовали в режиме аутентификации Windows, есть правильное разрешение (в моем случае это был sysadmin). Я полагаю, что у пользователя sql нет необходимых прав (я сталкиваюсь с этой проблемой при переносе / копировании mdf и ldf из разных машина)

Бен Ф
источник
0

Не разрешения в нашем случае, это была версия SSMS!

(это был локальный 2012 год, где мы получили ошибку, но работали, когда мы использовали SSMS 17+ из удаленного блока)

Bigpa
источник
-1

У меня также была эта проблема. Я помог своему клиенту, перезапустив службу SQL, и смог подключить MDF в соответствии с обычной процедурой.

Чедвик Пауэлл
источник
-2

1) Откройте Sql Server Configuration Manager.

2) Выберите Sql Server Services (левая панель)

3) Дважды щелкните свой SqlServer (правая панель)

4) Выберите вкладку «Вход в систему».

5) Выберите встроенную кнопку-переключатель и измените локальную систему или сетевой сервис в выпадающем списке.

6) Нажмите Ok.

7) Прикрепите файл mdf в диспетчере сервера sql.

Али Осман Явуз
источник
-2

Вероятно, ваша служба SQL Server работает под учетной записью NT Service \ MSSQLServer . Изменение его Локальная система даст ему доступ.

Вероятно, лучше всего создать пользователя и дать ему полные права на папку, в которой находятся файлы.

kwiboo
источник