Quando usar este procedimento?


O procedimento deve ser usando quando o array que hospeda a tempdb falhar. Quando isso acontece o SQL Server retorna um erro,pois, o caminho aonde a tempdb estava não foi encontrado.

Cenário: Imagine um cenário que temos a tempdb em um disco de nome S, conforme print:


E esse disco falhou ou a letra não é mais a mesma(se você trocou a letra depois da falha). Quando o SQL Server iniciar na próxima vez ele retornará as seguintes mensagens no Event Viewer:
Erro:1


Erro:2


Erro:3


Quando aparecer qualquer dessas mensagens, que dizer que a tempdb não foi encontrada. A solução para esse tipo de problema é: Se conectar ao SQL Server via prompt de comando e alterar o arquivo da tempdb de unidade. Vá até a a pasta aonde encontra-se os binários do SQL Server.


Você deve acessar esse caminho via promt de comand, conforme print:


Digite a linha de comando abaixo para inicar o SQL Server pelo prompt.
Sqlservr.exe -f -m -sNomeDaInstancia

O print mostra a linha digitada:

Obs: O SQL Server Agent deve estar desabilitado para a execução desta linha de comando. Se o SQL Server estiver ativo, você não conseguirá usar o SQL em single user mode.
Os parâmetros são explicados abaixo:
  • f ? Executa o sql server com as configurações minimas.
  • m ? Entra no sql server em single user mode.
  • s ? Nome da instancia do sql server. Esse nome pode ser obtido no SQL Server Configuration Manager.



Nome da Instancia.


Com o SQL Server iniciado no prompt que foi aberto:


Quando o SQL Server é inicado desta maneira, a tempdb por default vai para o diretorio de bases de dados padrão do SQL Server de instalação(aonde encontra-se a master, model e msdb). Abra um novo prompt do MS-DOS e use um utilitário de linha de comando para mudar a tempdb de diretório. Use a linha de comando abaixo:
osql.exe -E -sNomeDaInstancia

Conforme o print abaixo:

Obs: O parâmetro -E é a conexão trusted (integrada com o windows), o usuário que está executando este procedimento deve ter permissões de SA no SQL Server. Neste exemplo usamos o login TMKTSQLSVC que é uma conta do windows com permissões de SA.

Após conectado ao SQL Server, execute os comandos abaixo para modificar a tempdb para a nova unidade.
USE MASTER
GO
ALTER DATABASE tempdb MODIFY FILE 
(NAME= tempdev, FILENAME= 'F:/MSSQL2005/MSSQL/SYS_DBS/DATA/tempdb.mdf')
GO
ALTER DATABASE tempdb MODIFY FILE 
(NAME= templog, FILENAME= 'F:/MSSQL2005/MSSQL/SYS_DBS/LOG/templog.ldf')


O SQL Server retorna a mensagem que os arquivos da tempdb serão movidos após a próxima reinicialização do serviço do SQL Server.


Digite exit na janela aonde você digitou os comandos e aperte a tecla enter.
Na outra janela de prompt que está em aberta pressione CTRL C aparecerá uma mensagem solicitando confirmação se você deseja fazer o shutdown do SQL Server.

Pressione a tecla Y.

Inicie o SQL Server normalmente.


E está pronto.