База данных только для чтения как исправить ms sql
Перейти к содержимому

База данных только для чтения как исправить ms sql

  • автор:

MS SQL — перенесенные базы подключаются только в read-only (только для чтения)

Итак, вводная: у нас есть сервер Microsoft SQL Server, установленный на Windows Server 2008 или выше. Причем не важно — имеем ли мы SQL Standard, SQL Enterprise или SQL Express — ситуация будет одинаковой.

Пока базы данных лежат по своему пути по-умолчанию, т.е. в Program files, все с ними хорошо. Но как только мы перенесем их в другой каталог (а тем более — на другой диск) — сразу появляются проблемы.

Проблемы заключаются в том, что либо MS SQL Server не желает подключать (аттачить) вовсе перенесенные базы данных, либо подключает, но только в режиме «только для чтения» (т.е. read-only).

Решение.

Проблема заключается в правах на папку, куда Вы перенесли базы данных. Дело в том, что изначально MS SQL Server прав на запись туда не имеет, соответственно, и работает не так.

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

), нажать правой кнопкой мыши на папке с базами данных (как правило — «DATA»), в контекстном меню выбрать «Свойства», далее перейти на вкладку «Безопасность» и посмотреть текущие права.

Вы увидите там надпись вида «SQLServerMSSQLUser$HOSTNAME$SQLExpress» или типа того (вместо HOSTNAME — имя Вашего сервера, вместо SQLExpress — имя инстанции или ничего).

Теперь топаем туда, куда Вы базы скопировали, и добавляем эту группу с полными правами в безопасность (кстати да, это группа, а не пользователь).

А вот отсюда читаем внимательно! Просто так, введя частично имя группы и нажав на кнопку «Проверить имена» Вы ее не добавите! Windows будет себя вести так, как будто такого группы нет в ни в системе, ни в домене — нигде вообще. Почему это сделано — загадка (ибо безопасности оно не добавляет — отчаившись, админы добавляют группу «Все» и дают максимальные права на папку).
Вводить имя группы нужно ПОЛНОСТЬЮ. Каждый блин символ! Один в один, вот прямо как написано во вкладке «Безопасность» папки «DATA», где на ЭТОМ сервере лежат базы по-умолчанию. Если не введете хотя-бы один символ — группа не распознается. И неважно — какие объекты для поиска Вы выбираете — все равно пока не введете символ в символ — ОС будет говорить, что такого объекта не существует.

Итак, добавили группу с максимальными правами к папке, где сейчас лежат нужные базы данных — и снова пробуем присоединить их в MS SQL Server. Теперь должно получиться.

присоединенная база данных доступна только для чтения

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

задан 19 мая ’11, 04:05

12 ответы

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

Как только это будет сделано, откройте Management Studio, в обозревателе объектов щелкните правой кнопкой мыши базу данных, доступную только для чтения, и выберите «Свойства». В меню «Параметры» убедитесь, что свойство «Только для чтения» имеет значение false.

Введите описание изображения здесь

ответ дан 07 мар ’14, в 06:03

В дополнение к вышеперечисленным шагам мне также пришлось дать Сетевое обслуживание учетная запись полный контроль над файлами MDF и LDF. — ДугКоуто

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

Кроме того, в самых последних системах каталог Program Files доступен только для чтения. Попробуйте поместить файлы в другой каталог.

ответ дан 19 мая ’11, 08:05

+1 за подсказку о Program Files — Файлы данных SQL Server действительно не принадлежат Program Files каталог !! — marc_s

Когда я скопировал файлы .mdf и .ldf в папку установки сервера sql, он создает базу данных для чтения и записи. в чем будет проблема? — Маану

Проблема в том, что каталог Program Files доступен только для чтения. — Ксавье Пойнас

Я поместил их во вновь созданную папку. Но созданная база данных по-прежнему доступна только для чтения. — Маану

Эта новая папка является подкаталогом Program Files? — Ксавье Пойнас

Откройте свойства базы данных -> параметры и установите База данных только для чтения в Ложь.

  • Убедитесь, что вы вошли в SQL Management Studio, используя проверку подлинности Windows.
  • Убедитесь, что у вашего пользователя есть доступ на запись к каталогу файлов mdf и журналов.

ответ дан 03 апр.

Предоставление учетной записи службы sql ‘NT SERVICE \ MSSQLSERVER’ «Полный доступ» к файлам базы данных

Если у вас есть доступ к файлам / папкам сервера, вы можете попробовать это решение, которое сработало для меня:

SQL Server 2012 в Windows Server 2008 R2

  1. Щелкните правой кнопкой мыши файл или папку базы данных (mdf / ldf) и выберите «Свойства».
  2. Выберите вкладку «Безопасность» и нажмите кнопку «Изменить».
  3. Нажмите кнопку «Добавить».
  4. Введите имя объекта, которое нужно выбрать, как «NT SERVICE \ MSSQLSERVER», и нажмите кнопку «Проверить имена».
  5. Выберите MSSQLSERVER (RDN) и дважды нажмите кнопку «ОК».
  6. Предоставьте этой служебной учетной записи «Полный доступ» к файлу или папке.
  7. Вернувшись в SSMS, щелкните базу данных правой кнопкой мыши и выберите «Свойства».
  8. В разделе «Параметры» прокрутите вниз до раздела «Состояние» и измените «База данных только для чтения» с «Истина» на «Ложь».

Сработало для меня как шарм. — Закром

Вам необходимо изменить права доступа для папки вашей базы данных: свойства -> вкладка безопасности -> редактировать . -> добавить . -> имя пользователя «NT Service \ MSSQL $ SQLEXPRESS» или «NT Service \ MSSQLSERVER». Закройте окна, откройте «Дополнительно» . дважды щелкните пользователя и установите следующие параметры: Тип: Разрешить. Применяется к: этой папке, подпапке и файлам. Основные разрешения: все. Убедитесь, что также установлен владелец.

ответ дан 14 авг.

Другой способ, который сработал для меня:

После отсоединения перед прикреплением

-> перейдите к файлу .mdf -> щелкните правой кнопкой мыши и выберите свойства в файле -> вкладка безопасности -> Проверить группу или имена пользователей:

для вашего имени \ учетной записи (необязательно) и для «NT SERVICE \ MSSQLSERVER» (NB)

-> если нет, нажмите кнопку редактирования -> нажмите кнопку добавления

-> нажмите ОК -> предоставьте полные права -> примените, затем ОК

затем снова сделайте это и для файла .ldf.

Если служба SQL Server работает как локальная система, убедитесь, что папка, содержащая базы данных, должна иметь ПОЛНОЕ КОНТРОЛЬНОЕ РАЗРЕШЕНИЕ для учетной записи локальной системы.

Это работает для меня.

ответ дан 15 дек ’14, 09:12

Вам нужно перейти в свойства новой папки> вкладку безопасности и дать разрешения пользователю SQL, имеющему права на папку DATA из папки установки SQL-сервера.

ответ дан 29 апр.

В этом есть 3 (как минимум) части.

Часть 1: Как все предлагали . Убедитесь, что папка и содержащие файлы не доступны только для чтения. Вы прочитаете о фантомной ошибке в окнах, где вы удаляете только чтение из папок и содержащих элементы, только чтобы снова открыть свойства и увидеть, что они все еще нажимаются. Это не ошибка. Честно говоря, это особенность. Вы видите прошлое. Атрибуты «Система» и «Только для чтения» имеют определенное значение. Теперь, когда Windows эволюционировала и использует другую файловую систему, эти атрибуты больше не имеют смысла для папок. Поэтому они были «перепрофилированы» в качестве маркера для ОС, позволяющего идентифицировать папки, которые имеют особое значение или настройки (и как таковые содержат файл desktop.ini). Папки, например, содержащие шрифты или специальные значки, настройки и т. Д. Таким образом, даже если этот атрибут все еще включен, он не влияет на файлы в них. Таким образом, его можно игнорировать, если вы выключили его в первый раз.

Часть 2: Опять же, как предлагали другие, щелкните правой кнопкой мыши базу данных и свойства, найдите параметры, убедитесь, что для свойства только для чтения установлено значение false. Обычно вы все равно не сможете изменить это вручную, если вам не повезет. Но прежде чем искать волшебные команды (sql или powershell), взгляните на часть 3.

Часть 3: Проверьте права доступа к папке. Убедитесь, что ваш пользователь SQL Server имеет к нему полный доступ. В большинстве случаев этим пользователем для установки по умолчанию является MSSQLSERVER или MSSQLEXPRESS с префиксом «NT Service». Вы найдете их в разделе базы данных security \ logins. Откройте свойства папки, перейдите на вкладку безопасности и добавьте этого пользователя в список.

Во всех трех случаях вам может потребоваться (а может и не потребоваться) отсоединение и повторное подключение, чтобы увидеть, что статус только для чтения удален.

Если я найду ситуацию, когда эти 3 решения не работают для меня, и найду другую альтернативу, я добавлю ее сюда вовремя. Надеюсь это поможет.

How to change database from Read-Only to Read-Write mode in SQL SERVER ?

Recently, I was working on new ASP.NET application and for that I attach an existing database to SQL SERVER. I noticed that it gets attached in read-only mode.

database read only

So, to change database to Read-Write mode, I need to follow any of the below steps:

A. Using SQL SERVER Management Studio:

Right click on Database, select Properties. And in the Database Properties window, select Options page. In Options page, under State change Database Read Only value to False.

sql server database read only

B. Using SQL query:

Result:

database read write

.NET Professional | Microsoft Certified Professional | DZone’s Most Valuable Blogger | Web Developer | Author | Blogger

Doctorate in Computer Science and Engineering

Microsoft Certified Professional (MCP) with over 12+ years of software industry experience including development, implementation & deployment of applications in the .NET framework

Experienced and skilled Agile Developer with a strong record of excellent teamwork, successful coding & project management. Specialises in problem identification and proposal of alternative solutions. Provided knowledge and individual mentoring to team members as needed

База данных только для чтения как исправить ms sql

Добрый день коллеги,

Есть сервер SQL 2008R2 на нем крутится две базы данных, есть задача подключить к базе данных BI систему, но есть опасения что BI при формировании сложного отчета загрузит основной сервер SQL.

Есть идея создать еще один SQL сервер 2008R2 или 2012 , для зеркалирования основных баз данных с основного на новый сервер , в идеале базы должны быть только для чтения и сюда уже подключить BI сервер. Копия должна быть актуальная , почти в реальном времени.

Натолкните на мысль , как это лучше сделать с точки зрения безопасности и простоты реализации?

  • Изменено offskid 1 ноября 2013 г. 9:42

Ответы

Можно, действительно, сделать через мирроринг. Но эта технология делалась для другого. Использование зеркальной копии для чтения делается фактически хаком и пользоваться этим достаточно неудобно. Для многопользовательской отчётности в реальном времени — практически нереально.

Я бы думал про репликацию(нужного набора таблиц) или построение более-менее нормального DWH. Возможна, конечно, и комбинация всех озвученных подходов. Но без конкретики советовать что-то очень сложно. Может ведь оказаться и так, что вы переоцениваете сложность ваших запросов. И аккуратное их переписывание вместе с переходом на snapshot isolation level окажется достаточным.

В 2012 есть AlwaysOn технологии, позволяющие расширить спектр возможных решений.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *