Como mover a pasta de instâncias do SQL Server LocalDB do local padrão?

12

Eu recebo vários erros com LocalDB( erro de inicialização , não consigo criar banco de dados no SQL Server Management Studio e também vários problemas ao tentar restaurar um backup) e nenhuma das correções que encontrei estão ajudando em nada. Parece-me que todos os erros têm sua raiz nas permissões não configuradas corretamente.

Agora, um script simples de criação de tabela DDL funciona bem no SQL Server Management Studio e cria o banco de dados na raiz da pasta da minha conta de usuário ( conforme explicado aqui ). A pasta Instâncias, no entanto (localizada D:\Users\[My name]\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instancesao lado da instalação do SQL Server Express com Advanced Services , especifiquei a pasta DATA em outro local - onde apenas os .mdfarquivos padrão do SQL Server Express são armazenados, mas não as LocalDBinstâncias) parece problemática em relação às permissões (ao contrário da conta raiz), portanto, e também por ter meus arquivos de banco de dados em um local entre meus projetos, eu gostaria de mover a pasta Instâncias para outro local. Isso é possível? Eu nem encontrei uma entrada de registro correspondente.

Estou usando o SQL Server Express 2012 e também o SSMS da mesma versão (últimas atualizações instaladas).

Qualquer ajuda seria apreciada.

Editar: A página de Configurações do banco de dados mencionada anteriormente pelo KookieMonster gerou um erro para mim, não sendo possível editar nem ver nenhuma configuração lá. Deixei o Windows Update procurar atualizações novamente e houve algumas atualizações para o SQL Server Express que não foram instaladas (embora eu tenha certeza de ter selecionado tudo para instalar antes), então as instalei. Isso me possibilitou ir para a página de configurações.

Tentei configurar a pasta raiz da instância LocalDB para outro lugar, mas recebo um erro de acesso negado para todas as pastas que tentei, a saber

Alter falhou nas configurações 'Microsoft.SqlServer.Management.Smo.ObjectKeyBase'. (Microsoft.SqlServer.Smo)

------------------------------ INFORMAÇÃO ADICIONAL:

Ocorreu uma exceção ao executar uma instrução ou lote Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)


RegCreateKeyEx () retornou o erro 5, 'Acesso negado.' (Microsoft SQL Server, erro: 22002)

Eu recebo isso mesmo que a pasta tenha Controle total definido para Todos! Ainda mais divertida, a única pasta que funciona, definida como padrão (a raiz da conta do usuário) não tem permissões especiais aplicadas - apenas as que meu usuário possui (como qualquer outra pasta que tentei definir). Com efeito, isso significa que todos os arquivos dos meus bancos de dados do LocalDB são salvos na pasta raiz da minha conta.

Piedone
fonte
1
O que acontece quando você cria um banco de dados e define explicitamente os arquivos para um local específico, em vez de assumir os padrões?
Aaron Bertrand
1
Obrigado pela sua resposta! Isso funciona (se eu selecionar uma pasta adequada como a pasta do meu projeto), mas é muito inconveniente precisar especificar o caminho todas as vezes. Eu simplesmente não posso acreditar que não há como alterar os padrões.
Piedone
O que acontece quando você acessa o nó do servidor, clica com o botão direito do mouse em propriedades, parâmetros de banco de dados e alterna o local padrão? Os valores são os que você definiu durante a instalação ou algo mais?
KookieMonster
Eu estou tendo exatamente o mesmo problema. Eu acho que o motivo de alterar as permissões da pasta não ter efeito é porque isso realmente indica que há um problema de permissões no registro, criando especificamente uma chave do registro (consulte a última parte: RegCreateKeyEx). Infelizmente, não consigo descobrir qual chave ele deseja criar.
Daveaglick

Respostas:

13

Veja meu comentário acima. Usei o Process Monitor para rastrear o acesso ao registro e descobri que estava recebendo um acesso negado ao tentar escrever:

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

Eu resolvi isso abrindo o Editor do Registro e dando acesso a Todos a todos HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\MSSQLServer. Em seguida, mudei o local padrão e removi o acesso Todos depois que ele foi feito. Isso criou as seguintes chaves extras que não existiam antes:

DefaultData

DefaultLog

BackupDirectory

daveaglick
fonte
Obrigado. Eu segui uma rota diferente no final, então não posso testar como isso funcionaria para mim.
Piedone
3
Eu apenas tentei exatamente a solução que você propôs aqui e sim, eu tenho os extras que você mencionou no registro. Ainda assim, isso não substitui nem altera os valores atuais das propriedades do meu banco de dados local. O registro mostra os valores desejados para todos os 3 locais, mas no SMSS ainda existem os locais padrão por instalação. Usando o MS sql server compact 3.5 SP 1 pode ser a razão para esse comportamento?
precisa saber é o seguinte
2
Este é o único lugar que eu fui capaz de encontrar qualquer informação sobre este erro. Em algum momento, sim, alterar as permissões para essa chave reg faz com que o erro desapareça, mas, como diz o usuário3840527, o SSMS ainda possui os locais padrão originais posteriormente, mesmo após sair e reabri-lo.
precisa saber é o seguinte
@Piedone, você poderia, por favor, explicar o que você fez em vez de usar o método reg key? Ou aponte para algum lugar que explique o método? Obrigado
Yann Duran
1
O erro desaparece, mas o local não muda
Adil Mammadov