Localização tempdb quebrada e não pode se recuperar

8

Cometeu um erro e digitou incorretamente um comando alter database para tempdb.

Agora a instância não será iniciada. Não consigo iniciar no modo de usuário único usando -m, pois afirma que o tempdb não foi encontrado. Eu tentei usar:

net start msqsqlserver /f /t3608

Mas não consigo realmente conectar-me à instância usando um sqlcmdou outro ssms.

Tim Alexander
fonte
O que o log de erros do SQL Server diz?
Max Vernon
Que mudança você fez?
Max Vernon

Respostas:

12

Inicie o SQL Server como um aplicativo, não um serviço, no modo de configuração mínima e apenas recuperando o mestre, em um prompt de comando:

[path to this instance]\BINN\sqlservr.exe -c -f -T3608

(Adicione -s InstanceNamese esta for uma instância nomeada.)

Agora, em um prompt de comandos diferente, conecte-se usando SQLCMD:

sqlcmd -S InstanceName -E

E emita uma correção (verifique isso !!!) e desligue o aplicativo:

> ALTER DATABASE tempdb MODIFY FILE ...
> SHUTDOWN WITH NOWAIT;
> GO
Aaron Bertrand
fonte
Acabei entrando nesse método, embora inicialmente não tenha certeza por que não estava me permitindo conectar. No final, desativei todos os serviços, devolvi a caixa e executei a VM sem uma conexão de rede e ela parecia funcionar. Obrigado pelos ponteiros embora. Espero que isso seja útil para outra pessoa no futuro também!
Tim Alexander
0
  1. Iniciar servidor sql no modo de usuário único - Net Start MSSQLServer / mSQLCMD / f / t3608

  2. Para estar no modo de usuário único sqlcmd -S. –E

  3. Execute os comandos

Alterar arquivo de modificação do tempdb do banco de dados (nome = tempdev, nome do arquivo = 'E: \ SQLDATA \ DEFAULT \ tempdb.mdf')

Alterar o arquivo de modificação do tempdb do banco de dados (nome = templog, nome do arquivo = 'E: \ SQLDATA \ DEFAULT \ Templog.ldf')

  1. Parar servidor sql Parar na rede mssqlserver
Sai
fonte