Muitas vezes precisamos saber onde estão e quais são os arquivos utilizados no servidor, seja para fazer uma limpeza, para manipular os arquivos utilizados, documentar ou qualquer outra finalidade. Eu já migrei um servidor com mais de 80 bases e identificar os arquivos foi fundamental pois não havia espaço em disco para backup. Abaixo um pequeno select da tabela sys.master_files do sistema:
SELECT DB_NAME(database_id) AS [dbname], name AS [logical_name], physical_name AS current_file_location
FROM sys.master_files
Faça também um select de todo o conteúdo da tabela para ver quantas informações úteis ela pode te trazer:
SELECT * from sys.master_files
Evite copiar e colar. Procure digitar para memorizar o nome das tabelas de sistema e a sintaxe do SQL.
4 comentários
Pular para o formulário de comentário ↓
Glauco Carvalho
9 de dezembro de 2015 às 15:29 (UTC -3) Link para este comentário
tem um risco na utilização da coluna physical_name sozinha, pois mais de um registro podem ter o mesmo valor, por exemplo uma base de homologação criada a partir de uma base de produção na mesma instância. Utilizo uma pesquisa com a sys.master_files juntamente com a sys.databases para retornar também o nome logico da database. Dessa forma cada registro terá um par “Database Name x Logical Name” único. Aproveito e adicionei a query o tamanho (aproximado) e o recovery model, pois são valores que auxiliam bastante quando inicio uma análise.
E parabéns Mercante pelo excelente trabalho e artigos publicados.
select a.name as ‘Database Name’, b.name as ‘Logical Name’,
a.recovery_model_desc as ‘Recovery Model’,b.physical_name as ‘Physical Name’,
(b.size*8/1024) as SizeMB
from sys.databases as a
inner join sys.master_files as b
on a.database_id = b.database_id
Luiz Mercante
10 de fevereiro de 2016 às 16:48 (UTC -3) Link para este comentário
Olá Glauco. É possível ter duas databases com arquivos de nomes lógicos iguais mas o physical_name refere-se aos arquivos em seus diretórios e não é possível armazenar arquivos com o mesmo nome em um diretório, portanto, não é possível ter arquivos repetidos na coluna physical_name mas agradeço a contribuição. Abs!
Glauco Carvalho
11 de fevereiro de 2016 às 7:59 (UTC -3) Link para este comentário
falae Mercantes! Me expressei mal, desculpe a confusão! A minha recomendação é adicionar o campo “name” da tabela “sys.databases” na query, para relacionar o physical_name com o database name ao invés de relacionar somente com logical name, pois o logical name pode estar duplicado ou não refletir o nome do database.
Luiz Mercante
11 de fevereiro de 2016 às 9:19 (UTC -3) Link para este comentário
Agora entendi, realmente poderia confundir já que a coluna name se refere ao Logical Name do arquivo.
https://msdn.microsoft.com/en-us/library/ms186782(v=sql.120).aspx
Obrigado pela contribuição.