2010-08-16 8 views
3

Как получить физическую базу данных и расположение файла журнала (путь к файловой системе) БД в SQL Server 2005?Физическая база данных и расположение файла журнала

Я использовал это, чтобы получить файл: {МДФ SELECT [имя], FileName ОТ sysdatabases}, но нужно, чтобы получить файл журнала, а также ...

Приветствия, Конор

ответ

6

SELECT * FROM sys.database_files

+0

Doesnt показать, где лог-файл, когда я запускаю это только путь имя_файла файла mdf? – Conor

+0

Опыты вы правы Я обращался к sysdatabases, извините !! Thanks – Conor

+0

Интересно - это включает в себя файлы журнала для меня, а документы (http://msdn.microsoft.com/en-us/library/ms174397.aspx) не подразумевают иначе. –

2

Вот еще один способ

select * from sys.sysaltfiles 
+0

прохладный спасибо очень !! – Conor

+0

+1 - но следите за тем, чтобы это исчезло в будущей версии, sys.master_files является рекомендуемой альтернативой этому представлению. –

2

Вы должны использовать sp_helpdb или sp_helpfile для этого.

например:

sp_helpdb 'master' 
+0

Почему? По общему признанию, это дает некоторую дополнительную, потенциально полезную информацию, но нет ничего плохого в запросе системных представлений. –

+0

sp_helpdb сообщает о неправильной информации против моментального снимка, см. Здесь http://blogs.lessthandot.com/index.php/DataMgmt/DBAdmin/MSSQLServerAdmin/running-sp_helpdb-against-a-snapshot-sho-2008 – SQLMenace

+1

Ничего страшного, пока они перемещать вещи вокруг ... недавно увидела проблему, когда запрос разбился из-за различий в 2000 и 2005 годах. Использование процедур позволило бы избежать этой проблемы. Интересно об обрыве снимка. – JimG

0

Я использовал следующий сценарий для извлечения данных/журнала имена файлов и пути:

declare @DBName     sysname 
     , @LogicalDataFile  sysname 
     , @LogicalLogFile  sysname 
     , @PhysicalDataFile  nvarchar(260) 
     , @PhysicalLogFile  nvarchar(260) 

set @DBName = '<database-name>' 

-- Data file 
select @LogicalDataFile = name 
     , @PhysicalDataFile = physical_name 
from sys.master_files 
where database_id = db_id(@DBName) 
     and type_desc = 'ROWS' 

-- Log file 
select @LogicalLogFile = name 
     , @PhysicalLogFile = physical_name 
from sys.master_files 
where database_id = db_id(@DBName) 
     and type_desc = 'LOG' 

select @LogicalDataFile as [@LogicalDataFile] 
     , @LogicalLogFile as [@LogicalLogFile] 
     , @PhysicalDataFile as [@PhysicalDataFile] 
     , @PhysicalLogFile as [@PhysicalLogFile] 

Кредит за сценарий идет к этой записи в блоге: http://sqlblogcasts.com/blogs/davidwimbush/archive/2009/07/28/how-to-get-the-logical-and-physical-file-names-for-a-database.aspx

+0

Это не работает, когда в базе данных много файлов, это может дать вам любой из них. И один из них может находиться внутри другой папки. ( – yucer

+0

Я вижу вашу точку зрения, у меня был только один файл данных, поэтому у меня не было никаких проблем. – Digitrance

1

попробуйте это заявление T-SQL предоставляет логическое имя и физическую локализацию на данных файлов всех баз данных, доступных/войти текущего экземпляра SQL Server

ВЫБРАТЬ db_name (database_id) в качестве DatabaseName, имя, type_desc, physical_name ИЗ sys.master_files

Если вы используете SQL Server 2000 , вы можете выполнить следующие действия T-SQL Statement

ВЫБЕРИТЕ db_name (DBID) в качестве DatabaseName, имя файла из master.dbo.sysaltfiles

Смежные вопросы