Recebo vários erros com LocalDB
( erro de inicialização , não consigo criar o banco de dados do SQL Server Management Studio e também vários problemas ao tentar restaurar um backup) e nenhuma das correções que encontrei está ajudando em nada. Parece-me que todos os erros têm sua raiz em 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 Instances, no entanto (localizada em D:\Users\[My name]\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances
apesar de ao instalar o SQL Server Express com Advanced Services eu especificar a pasta DATA em outro local - onde apenas os .mdf
arquivos padrão do SQL Server Express são armazenados, mas não LocalDB
as instâncias) parece problemática em relação às permissões (ao contrário da conta root) portanto e também por ter meus arquivos de banco de dados em um local entre meus projetos, gostaria de mover a pasta Instances para outro local. Isso é possível? Eu nem mesmo encontrei uma entrada de registro correspondente.
Estou usando SQL Server Express 2012 e também SSMS da mesma versão (últimas atualizações instaladas).
A página de configurações do banco de dados apresentou um erro para mim, não sendo possível editar nem ver nenhuma configuração lá. Deixei o Windows Update verificar as atualizações novamente e havia algumas atualizações para o SQL Server Express que não foram instaladas (embora eu tenha certeza de que selecionei tudo para instalar antes), então as instalei. Isso possibilitou que eu fosse para a página de configurações.
Tentei configurar a pasta raiz da instância do LocalDB em outro lugar, mas recebo um erro de acesso negado para cada pasta que tentei, ou seja
Falha ao alterar as configurações 'Microsoft.SqlServer.Management.Smo.ObjectKeyBase'. (Microsoft.SqlServer.Smo)
------------------------------ INFORMAÇÃO ADICIONAL:
Ocorreu uma exceção durante a execução de uma instrução ou lote Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)
RegCreateKeyEx() retornou o erro 5, 'Acesso negado.' (Microsoft SQL Server, erro: 22002)
Eu entendo isso mesmo que a pasta tenha o controle total definido para todos! Ainda mais divertido, a única pasta que funciona, uma que está 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 (assim como qualquer outra pasta que tentei definir). Na verdade, isso significa que todos os arquivos dos meus bancos de dados LocalDB são salvos na pasta raiz da minha conta.
Usei o Process Monitor para rastrear o acesso ao registro e descobri que estava recebendo um acesso negado ao tentar escrever:
Contornei isso abrindo o Editor do Registro e dando a todos acesso total aos arquivos
HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\MSSQLServer
. Em seguida, alterei o local padrão e removi o acesso Todos depois de concluído. Isso criou as seguintes chaves extras que não existiam antes: