Как переместить папку экземпляров SQL Server LocalDB из расположения по умолчанию?

12

Я получаю несколько ошибок LocalDB( ошибка при запуске , не могу создать базу данных из SQL Server Management Studio, а также несколько проблем при попытке восстановить резервную копию), и ни одно из найденных исправлений не помогает. Мне кажется, что все ошибки имеют свои корни в разрешениях, неправильно настроенных.

Теперь простой сценарий создания таблицы DDL отлично работает в SQL Server Management Studio и создает базу данных в корне папки моей учетной записи пользователя ( как описано здесь ). Однако папка Instances (расположенная в папке D:\Users\[My name]\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instancesнесмотря на то, что при установке SQL Server Express с расширенными службами я указала папку DATA в другом месте, где .mdfхранятся только стандартные файлы SQL Server Express , но не LocalDBэкземпляры), представляется проблематичной в отношении разрешений (в отличие от учетной записи root), а также для того, чтобы мои файлы БД находились в одном месте среди моих проектов, я хотел бы переместить папку Instances в другое место. Это возможно? Я даже не нашел соответствующую запись в реестре.

Я использую SQL Server Express 2012, а также SSMS той же версии (установлены последние обновления).

Любая помощь будет оценена.

Редактировать: Страница настроек базы данных, упомянутая ранее KookieMonster, вызвала ошибку для меня, так как я не смог ни отредактировать, ни увидеть какую-либо конфигурацию. Я позволил Центру обновления Windows снова проверять наличие обновлений, и были некоторые обновления для SQL Server Express, которые не были установлены (хотя я уверен, что я выбрал все для установки раньше), поэтому я установил их. Это позволило мне перейти на страницу настроек.

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

Не удалось изменить настройки «Microsoft.SqlServer.Management.Smo.ObjectKeyBase». (Microsoft.SqlServer.Smo)

------------------------------ ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Возникла исключительная ситуация при выполнении оператора или пакета Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)


RegCreateKeyEx () вернул ошибку 5, «Доступ запрещен». (Microsoft SQL Server, ошибка: 22002)

Я получаю это, даже если в папке есть Полный контроль для всех! Еще более забавно, что единственная папка, которая работает, та, которая установлена ​​по умолчанию (корень учетной записи пользователя), не имеет специальных разрешений - только те, которые есть у моего пользователя (как и любая другая папка, которую я пытался установить). Фактически это означает, что все файлы моих баз данных LocalDB сохраняются в корневой папке моей учетной записи.

Piedone
источник
1
Что происходит, когда вы создаете базу данных и явно устанавливаете файлы в определенном месте вместо значений по умолчанию?
Аарон Бертран
1
Спасибо за ответ! Это работает (если я выбираю подходящую папку, например, папку моего проекта), но очень неудобно каждый раз указывать путь. Я просто не могу поверить, что нет способа изменить значения по умолчанию.
Пьедоне
Что происходит, когда вы переходите на узел сервера, щелкаете правой кнопкой мыши, выбираете свойства, параметры базы данных и меняете расположение по умолчанию? Значения те, которые вы установили во время установки или что-то еще?
KookieMonster
У меня точно такая же проблема. Я думаю, что причина изменения прав доступа к папке не имеет эффекта, потому что это фактически говорит вам, что есть проблема с правами доступа к реестру, в частности создание раздела реестра (см. Последнюю часть: RegCreateKeyEx). К сожалению, я не могу понять, какой ключ он хочет создать.
daveaglick

Ответы:

13

Смотрите мой комментарий выше. Я использовал Process Monitor для отслеживания доступа к реестру и обнаружил, что при попытке записи получено «Отказано в доступе»:

3:16:40.8405491 PM sqlservr.exe 8756 RegCreateKey HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\MSSQLServer ACCESS DENIED Desired Access: Write

Я справился с этим, открыв редактор реестра и предоставив всем полный доступ к HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\MSSQLServer. Затем я изменил расположение по умолчанию и удалил доступ Все, как только это было сделано. Это сделало следующие дополнительные ключи, которых не было раньше:

DefaultData

DefaultLog

BackupDirectory

daveaglick
источник
Спасибо. В конце концов, я пошел другим путем, поэтому не могу проверить, как это будет работать для меня.
Пьедоне
3
Я просто попробовал именно то решение, которое вы предложили здесь, и да, у меня есть дополнения, которые вы упомянули в реестре. Тем не менее, это не отменяет и не изменяет текущие значения свойств моей локальной базы данных. В реестре показаны желаемые значения для всех 3 местоположений, но в SMSS по-прежнему существуют местоположения по умолчанию при установке. Использование MS SQL Server Compact 3.5 SP 1 может быть причиной такого поведения?
user3840527
2
Это единственное место , которое я смог найти любую информацию об этой ошибке. Иногда, да, изменение разрешений для этого ключа reg устраняет ошибку, но, как говорит пользователь 3840527, SSMS по-прежнему имеет исходные местоположения по умолчанию, даже после выхода и повторного открытия.
Янн Дюран
@Piedone, не могли бы вы объяснить, чем вы занимались вместо использования метода reg key? Или указать куда-нибудь, что объясняет метод? Спасибо
Янн Дюран
1
Ошибка уходит, но местоположение не меняется
Адиль Мамедов