Sql база read only что делать
by Kapil Khandelwal · July 13, 2017 · 109,807 Views
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.
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.
B. Using SQL query:
Result:
.NET Professional | Microsoft Certified Professional | DZone’s Most Valuable Blogger | Web Developer | Author | Blogger
Doctorate in Computer Science and Engineering
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
Among top 3% overall in terms of contribution on Stack Overflow (
database attached is read only
I used the following the script to attach a database. But the database created is read only.
What modifications should I make in the script to make it read-write. Please help me.
13 Answers 13
Once that is done, Open Management Studio, in the Object Explorer right click on the Database which is read only and select Properties. In the Options Menu, check that the Read-Only property is false.
Make sure the files are writeable (not read-only), and that your user has write permissions on them.
Also, on most recent systems, the Program Files directory is read-only. Try to place the files in another directory.
Giving the sql service account ‘NT SERVICE\MSSQLSERVER’ «Full Control» of the database files
If you have access to the server files/folders you can try this solution that worked for me:
SQL Server 2012 on Windows Server 2008 R2
Did the trick for me.
Another Way which worked for me is:
After dettaching before you attach
for your name\account (optional) and for «NT SERVICE\MSSQLSERVER»(NB)
If SQL Server Service is running as Local System, than make sure that the folder containing databases should have FULL CONTROL PERMISSION for the Local System account.
This worked for me.
You need to go to the new folder properties > security tab, and give permissions to the SQL user that has rights on the DATA folder from the SQL server installation folder.
There are 3 (at least) parts to this.
Part 1: As everyone else suggested. Ensure the folder and containing files are not read only. You will read about a phantom bug in windows where you remove read only from folders and containing items, only to open the properties again and see it still clicked. This is not a bug. Honestly, its a feature. You see back in the early days. The System and Read Only attributes had specific meanings. Now that windows has evolved and uses a different file system these attributes no longer make sense on folders. So they have been «repurposed» as a marker for the OS to identify folders that have special meaning or customisations (and as such contain the desktop.ini file). Folders such as those containing fonts or special icons and customisations etc. So even though this attribute is still turned on, it doesn’t affect the files within them. So it can be ignored once you have turned it off the first time.
Part 2: Again, as others have suggested, right click the database, and properties, find options, ensure that the read only property is set to false. You generally wont be able to change this manually anyway unless you are lucky. But before you go searching for magic commands (sql or powershell), take a look at part 3.
Part 3: Check the permissions on the folder. Ensure your SQL Server user has full access to it. In most cases this user for a default installation is either MSSQLSERVER or MSSQLEXPRESS with «NT Service» prefixed. You’ll find them in the security\logins section of the database. Open the properties of the folder, go to the security tab, and add that user to the list.
In all 3 cases you may (or may not) have to detach and reattach to see the read only status removed.
If I find a situation where these 3 solutions don’t work for me, and I find another alternative, I will add it here in time. Hope this helps.
Настройка доступа только для чтения к вторичной реплике в группе доступности Always On
По умолчанию и доступ для чтения и записи, и доступ только для чтения разрешены в первичной реплике, а подключения к вторичным репликам группы доступности AlwaysOn запрещены. В этом разделе описывается настройка доступа к соединениям реплики доступности в группе доступности AlwaysOn в SQL Server с помощью SQL Server Management Studio, Transact-SQLили PowerShell.
Требования и ограничения
Permissions
Задача | Разрешения |
---|---|
Настройка реплик при создании группы доступности | Требуется членство в фиксированной роли сервера sysadmin и одно из разрешений: CREATE AVAILABILITY GROUP, ALTER ANY AVAILABILITY GROUP или CONTROL SERVER. |
Изменение реплики доступности | Необходимо разрешение ALTER AVAILABILITY GROUP для группы доступности, разрешение CONTROL AVAILABILITY GROUP, разрешение ALTER ANY AVAILABILITY GROUP или разрешение CONTROL SERVER. |
Использование среды SQL Server Management Studio
Настройка доступа к реплике доступности
В обозревателе объектов подключитесь к экземпляру сервера, на котором размещена первичная реплика, и разверните дерево сервера.
Щелкните группу доступности, реплику которой нужно изменить.
Щелкните правой кнопкой мыши реплику доступности и выберите пункт Свойства.
В диалоговом окне Свойства реплики доступности можно изменить доступ к соединению для первичной и вторичной роли следующим образом:
Для вторичной роли выберите новое значение в раскрывающемся списке Доступная для чтения вторичная следующим образом.
Нет
Для баз данных-получателей этой реплики соединения пользователя не разрешаются. Для них не разрешен доступ для чтения. Это параметр по умолчанию.
Назначение — только чтение
Для баз данных-получателей этой реплики разрешены лишь подключения только для чтения. Для всех баз данных-получателей разрешен доступ для чтения.
Да
Для баз данных-получателей этой реплики разрешены все соединения, но только с доступом для чтения. Для всех баз данных-получателей разрешен доступ для чтения.
Для первичной роли выберите новое значение в раскрывающемся списке Соединения в первичной роли следующим образом:
разрешить все соединения.
Разрешаются все соединения с базами данных в первичной реплике. Это параметр по умолчанию.
Использование Transact-SQL
Настройка доступа к реплике доступности
Пример этой процедуры см. в подразделе Примеры (Transact-SQL)далее в этом разделе.
Подключитесь к экземпляру сервера, на котором находится первичная реплика.
Чтобы настроить доступ к соединению для вторичной роли, укажите в предложении ADD REPLICA или MODIFY REPLICA WITH параметр SECONDARY_ROLE следующим образом:
SECONDARY_ROLE ( ALLOW_CONNECTIONS = < NO | READ_ONLY | ALL >)
NO
Прямые подключения для баз данных-получателей этой реплики не разрешаются. Для них не разрешен доступ для чтения. Это параметр по умолчанию.
READ_ONLY
Для баз данных-получателей этой реплики разрешены лишь подключения только для чтения. Для всех баз данных-получателей разрешен доступ для чтения.
ALL
Для баз данных-получателей этой реплики разрешены все соединения, но только с доступом для чтения. Для всех баз данных-получателей разрешен доступ для чтения.
Чтобы настроить доступ к соединению для первичной роли, укажите в предложении ADD REPLICA или MODIFY REPLICA WITH параметр PRIMARY_ROLE следующим образом:
PRIMARY_ROLE ( ALLOW_CONNECTIONS = < READ_WRITE | ALL >)
ALL
Разрешаются все соединения с базами данных в первичной реплике. Это параметр по умолчанию.
Примеры (Transact-SQL)
В следующем примере вторичная реплика добавляется в группу доступности с именем AG2. Для размещения новой реплики доступности указывается отдельный экземпляр сервера COMPUTER03\HADR_INSTANCE. В этой реплике разрешены только соединения для чтения и записи для первичной роли, а для вторичной роли разрешены соединения с намерением чтения.
Использование PowerShell
Настройка доступа к реплике доступности
Пример кода см. в подразделе Пример (PowerShell)далее в этом разделе.
Перейдите в каталог (cd) экземпляра сервера, в котором находится первичная реплика.
AllowNoConnections
Не допускаются прямые соединения с базами данных во вторичной реплике, кроме того, к базам данных также нельзя получить доступ только для чтения. Это параметр по умолчанию.
AllowReadIntentConnectionsOnly
Разрешаются только соединения с базами данных во вторичной реплике, у которых свойство «Назначение приложения» равно ReadOnly. Дополнительные сведения об этом свойстве см. в разделе Using Connection String Keywords with SQL Server Native Client.
AllowAllConnections
К базам данных во вторичной реплике разрешаются все соединения на доступ только для чтения.
Чтобы настроить доступ к соединению для первичной роли, укажите параметр ConnectionModeInPrimaryRoleprimary_role_keyword, где primary_role_keyword равно одному из следующих значений:
AllowReadWriteConnections
Соединения, у которых свойство «Назначение приложения» равно ReadOnly, разрешены. Если свойство «Назначение приложения» имеет значение ReadWrite либо оно не задано, то соединение разрешено. Дополнительные сведения о свойстве соединения «Назначение приложения» см. в разделе Using Connection String Keywords with SQL Server Native Client.
AllowAllConnections
Разрешаются все соединения с базами данных в первичной реплике. Это параметр по умолчанию.
Настройка и использование поставщика SQL Server PowerShell
Пример (PowerShell)
В следующем примере параметры ConnectionModeInSecondaryRole и ConnectionModeInPrimaryRole устанавливаются в значение AllowAllConnections.
Дальнейшие действия. После настройки доступа только для чтения для реплики доступности
Доступ только для чтения к к доступным для чтения вторичным репликам.
Обеспечение возможности подключения клиентских приложений к доступным для чтения вторичным репликам.
Предварительные требования | Ссылка |
---|---|
Убедитесь, что группа доступности имеет прослушиватель. | Создание или настройка прослушивателя группы доступности (SQL Server) |
Настройте маршрутизацию только для чтения в группе доступности. | Настройка маршрутизации только для чтения в группе доступности (SQL Server) |
Факторы, которые могут повлиять на триггеры и задания после отработки отказа.
Если имеются триггеры и задания, которые не могут выполняться в недоступной или доступной для чтения базы данных-получателе, то в скриптах триггеров и заданий следует проверять, какой базой данных является искомая реплика, базой данных-источником или базой данных-получателем, доступной для чтения. Для получения этих сведений используйте функцию DATABASEPROPERTYEX, возвращающую свойство Updateability базы данных. Чтобы определить базу данных, доступную только для чтения, задайте в качестве значения READ_ONLY, как в примере ниже:
Чтобы определить базу данных для чтения и записи, укажите в качестве значения READ_WRITE.
Sql база read only что делать
Режимы работы баз данных SQL Server 2005, ONLINE, OFFLINE, EMERGENCY, READ-ONLY, READ-WRITE, MULTI_USER, RESTRICTED_USER, SINGLE_USER, переключение режимов
· база данных станет недоступной для пользователей;
· на нее больше не будет расходоваться оперативная память сервера;
· файлы базы данных и журнала транзакций освободятся, и их можно будет, например, скопировать средствами операционной системы.
· она станет доступной только на чтение;
· будет отключено протоколирование (т. е. запись в журналы транзакций);
· к базе данных смогут обращаться только системные администраторы (т. е. члены серверной роли sysadmin ).
Этот режим рекомендуется использовать для целей диагностики базы данных, если вы подозреваете, что в ней возникли проблемы;
q вообще ничего не указывать. В этом случае команда ALTER DATABASE будет ждать бесконечное время, пока пользователи не закончат в базе данных свою работу. После этого команда переведет базу данных в нужный режим (если вы не хотите ждать, выполнение команды можно прервать);
ALTER DATABASE testdb SET RESTRICTED_USER WITH ROLLBACK AFTER 600;
На работу пользователей, которые подключились к базе данных с административными правами (т. е. с правами специальной роли db_owner ) эта команда не повлияет.
Можно рассмотреть еще один вариант, когда вы просто отслеживаете соединения всех пользователей через окно Activity Monitor (оно доступно из контейнера Management (Управление) в окне SQL Server Management Studio ), а просматриваете, что они делают, а затем отключаете каждого по отдельности (возможно, предварительно предупредив их).
База данных не может быть обновлена, потому что она доступна только для чтения или имеет файлы только для чтения. Сделайте базу данных или файлы доступными для записи и перезапустите восстановление
Я получил файл базы данных и инструкции по его загрузке, чтобы установить SQL Server 2005 и затем присоединить его с помощью SQL Server Management Studio.
После установки все, я пытался прикрепить файл MDF, но затем он говорит мне:
поиск в каталоге для файла «D: <имя_папки> <имя_файла>.LDF» завершился ошибкой операционной системы 21 (ошибка не найдена)
Файл LDF не поставляется с базой данных, поэтому, вероятно, он должен быть сгенерирован автоматически.
Почему он пытается найти файл журнала по определенному пути? Почему не там, где находится файл базы данных?
Как я могу прикрепить эту базу данных?
Я понял, что когда я выбираю базу данных для присоединения, под «подробностями базы данных» появляются три записи. 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 году.
. для базы данных только для чтения, журнал не может быть перестроен, потому что основной файл не может быть обновлен. Поэтому, когда вы присоединяете базу данных только для чтения, чей журнал недоступен, вы должны предоставить файлы журнала или файлы в FOR ATTACH предложении.