AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 191393
Accepted
feO2x
feO2x
Asked: 2017-11-22 03:55:12 +0800 CST2017-11-22 03:55:12 +0800 CST 2017-11-22 03:55:12 +0800 CST

LocalDB v14 cria caminho errado para arquivos mdf

  • 772

Recentemente, atualizei o LocalDB da versão 13 para 14 usando o instalador do SQL Server Express e esta instrução . Após a instalação, parei a instância padrão existente (MSSQLLOCALDB) da versão 13 e criei uma nova, que usava automaticamente o mecanismo do servidor v14.0.1000.

Costumo usar o LocalDB para testes de Integração de Banco de Dados, ou seja, em meus testes de xunit, crio um banco de dados (temporário) que é excluído quando o teste termina. Desde a nova versão, infelizmente todos os meus testes falham por causa da seguinte mensagem de erro:

CREATE FILE encontrou o erro 5 do sistema operacional (Acesso negado.) ao tentar abrir ou criar o arquivo físico 'C:\Users\kepflDBd0811493e18b46febf980ffb8029482a.mdf'

O estranho é que o caminho de destino para o arquivo mdf está incorreto, falta uma barra invertida entre C:\Users\kepfl e DBd0811493e18b46febf980ffb8029482a.mdf (que é o nome aleatório do banco de dados para um único teste). Os bancos de dados são criados através do comando simples CREATE DATABASE [databaseName]- nada de especial aqui.

No SSMS, vejo que os locais de destino para dados, log e backup são os seguintes:

Locais de destino do LocalDB

No entanto, quando tento atualizar o local, recebo outra mensagem de erro:

Mensagem de erro ao tentar atualizar

Como posso atualizar os locais padrão para que o LocalDB possa criar bancos de dados novamente? É óbvio que o LocalDB não combina corretamente o diretório de localização padrão e o nome do arquivo de banco de dados - existe uma entrada de registro que eu possa editar? Ou qualquer outra coisa?

Atualização após a resposta de Doug e o comentário de sepupic

De acordo com esta pergunta do Stackoverflow , o local padrão também deve ser alterável por meio do registro. No entanto, se eu tentar encontrar as chaves correspondentes "DefaultData", "DefaultLog" e "BackupDirectory", não consigo encontrá-las no meu registro. O SQL Server v14 renomeou essas chaves de registro ou moveu essas informações para fora do registro?

sql-server sql-server-localdb
  • 4 4 respostas
  • 15246 Views

4 respostas

  • Voted
  1. Best Answer
    Solomon Rutzky
    2017-11-27T14:01:31+08:002017-11-27T14:01:31+08:00

    ATUALIZAR

    A partir de CU 6 para SQL Server 2017, esse bug foi corrigido. Agora é possível executar o seguinte com sucesso:

    CREATE DATABASE [CreateDatabaseTest];
    DROP DATABASE [CreateDatabaseTest];
    

    O problema e o fato de ser corrigido no CU6 estão documentados no seguinte artigo da KB:
    CORREÇÃO: erro "Acesso negado" ao tentar criar um banco de dados no SQL Server 2017 Express LocalDB

    Para obter a atualização cumulativa, vá para a página a seguir e pegue a versão superior (ou seja, a mais recente), que pode ser mais recente que a CU6, dependendo de quando você vir isso:

    Versões de compilação do SQL Server 2017


    INFORMAÇÕES ABAIXO OBSOLETAS NO SQL SERVER 2017 CU6 (lançado em 2018-04-17)

    A falta de uma barra invertida no nome de caminho + arquivo combinado parece ser um bug com o SQL Server 2017. Acabei de me deparar com isso. Eu até tentei editar o Registro para adicionar um DefaultDatavalor de string para C:\Users\MyAccountName\ em ambas as chaves a seguir (os 3 caminhos padrão não estão em nenhuma das chaves de registro LocalDB que examinei):

    • Computador\HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\UserInstances\{some-GUID-value}
    • Computador\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14E.LOCALDB\MSSQLServer

    E sim, eu desliguei e reiniciei a instância LocalDB em ambas as tentativas.

    No entanto, não estou convencido de que não ser capaz de alterar os caminhos padrão seja um bug, pois pode ser apenas uma documentação ruim e um tratamento de erros ruim combinados. Digo isso porque acabei de tentar editar os locais padrão para o SQL Server LocalDB versões 2014, 2016 e 2017, e todos resultaram exatamente no mesmo erro, o que por si só é estranho por ser de RegCreateKeyEx(), que deve estar lidando com o Registro e não o sistema de arquivos.

    Não poder alterar o caminho é lamentável devido à falta de barra invertida ao criar um novo banco de dados sem especificar os arquivos a serem usados. No entanto, consegui criar um novo banco de dados usando a CREATE DATABASEsintaxe completa da seguinte forma:

    CREATE DATABASE [XXXXX]
     CONTAINMENT = NONE
     ON PRIMARY 
    ( NAME = N'XXXXX_sys', FILENAME = N'C:\Users\MyAccountName\XXXXX_sys.mdf',
      SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB ), 
     FILEGROUP [Tables] DEFAULT
    ( NAME = N'XXXXX_data', FILENAME = N'C:\Users\MyAccountName\XXXXX_data.ndf',
      SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
     LOG ON 
    ( NAME = N'XXXXX_log', FILENAME = N'C:\Users\MyAccountName\XXXXX_log.ldf',
      SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
     COLLATE Latin1_General_100_CS_AS_KS_WS_SC;
    GO
    
    • 30
  2. Nikolaj Dam Larsen
    2018-03-08T13:59:44+08:002018-03-08T13:59:44+08:00

    Eu me deparei com o mesmo problema e encontrei uma solução alternativa que não deve ter desvantagens claras (se eu estiver esquecendo alguma coisa, corrija-me) . É baseado na resposta do Solomons, mas sem a necessidade de especificar o caminho absoluto para os arquivos do banco de dados diretamente.

    DECLARE @databaseName NVARCHAR(MAX) = 'MyDatabase'
    
    DECLARE @dataFilePath NVARCHAR(MAX) = CAST(SERVERPROPERTY('InstanceDefaultDataPath') AS NVARCHAR) 
        + FORMATMESSAGE('\%s.mdf', @databaseName)
    
    DECLARE @sql NVARCHAR(MAX) = FORMATMESSAGE(
        'CREATE DATABASE %s ON PRIMARY ( NAME = %s, FILENAME = ''%s'' )', 
        quotename(@databaseName), quotename(@databaseName), @dataFilePath
    )
    
    EXEC (@sql)
    

    Ele usa sql dinâmico e não é exatamente bonito, mas faz o trabalho até que haja uma correção oficial para o problema.

    • 5
  3. abatishchev
    2018-02-24T16:42:03+08:002018-02-24T16:42:03+08:00

    Estou enfrentando esse problema também. A única solução que encontrei seria conceder o acesso de gravação c:\Users\a Todos (ou algo parecido) e deixá-lo criar os arquivos mdf onde quiser.

    • 4
  4. Doug Abrahamson
    2017-11-22T12:42:45+08:002017-11-22T12:42:45+08:00

    Obrigado pela sua explicação concisa deste problema. Eu me deparei com este mesmo problema ontem. Ainda não encontrei uma solução permanente, mas aqui está minha solução atual.

    Estou usando a função Database.EnsureCreated() para criar o banco de dados.

    Defina a cadeia de conexão para incluir a configuração ' AttachDBFilename= '.

    Server=(LocalDB)\\MSSQLLocalDB;Database=ExploreCalifornia;AttachDbFilename=.\\ExploreCalifornia.mdf;Trusted_Connection=True;MultipleActiveResultSets=true
    

    Execute o aplicativo. Vai gerar um erro:

    Não é possível anexar o arquivo '.\ExploreCalifornia.mdf' como banco de dados 'ExploreCalifornia'.

    mas ele irá criar o banco de dados.

    Depois disso, altere a string de conexão e remova ' AttachDBFilename= '.

     Server=(localdb)\\MSSQLLocalDB;Database=ExploreCalifornia;Trusted_Connection=True;MultipleActiveResultSets=true
    

    Executei o aplicativo novamente sem erros e as tabelas foram criadas.

    • 3

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve