Recentemente, movi meus arquivos de banco de dados temporários para uma unidade separada (eu tinha dois arquivos de dados e um arquivo de log).
No entanto, depois de reiniciar o servidor, meu segundo arquivo de dados desapareceu da lista de arquivos no gui e do sp_helpfile. Já consegui reproduzir esse comportamento várias vezes: adiciono um novo arquivo de dados, vejo que ele aparece tanto no gui quanto no sp_helpfile e desaparece após a reinicialização do servidor.
Eu corri dbcc checkdb
contra o banco de dados e ele retorna nenhum erro. Não há informações nos logs SQL ou no log de eventos do aplicativo Windows.
Depois de fazer um pouco mais de pesquisa, executei a seguinte consulta:
select d.name, m.* from sys.master_files m
inner join sys.databases d
on (m.database_id = d.database_id)
where d.name like 'tempdb'
order by 1, 2
Resultados: http://pastebin.com/Zu5fJ2hU
Ele mostra quatro arquivos de dados secundários diferentes, nenhum dos quais aparece em sp_helpfile. Se eu tentar usar qualquer um desses nomes, o servidor SQL não me permite. Nenhum desses arquivos existe fisicamente no disco. Meu servidor é SQL 2012 Standard.
(Consolidando os comentários em uma resposta, para que seja mais facilmente consumível pelos pesquisadores.)
Parece que isso está relacionado a não conceder as permissões apropriadas ao contêiner de dados ao mover o local dos arquivos físicos. Sem ter tentado, acredito que isso também se aplicaria a bancos de dados de usuários, não apenas
tempdb
.Tenho um vídeo antigo, mas ainda tecnicamente preciso, sobre como mover todos os bancos de dados do sistema (não apenas
tempdb
) aqui , que inclui mostrar o processo de atribuição de permissões ao novo contêiner de dados. O mecanismo de banco de dados requer controle total sobre esta pasta, subpastas e arquivos começando na raiz do contêiner de dados.Depois que as permissões forem definidas corretamente no contêiner de dados, os arquivos pendentes devem ser removidos dos catálogos do sistema usando
ALTER DATABASE ... REMOVE FILE ...
.