Как получить пути к файлам зависшей базы данных MS SQL Восстановление

Я распространяю обновления нашей базы данных в виде резервных копий «С заменой», но пользователи могут установить их в любое место на любом жестком диске, а это значит, что мне нужно «Exec SP_HelpFile» на нем перед запуском «Восстановить с перемещением». Но SP_HelpFile требует, чтобы я сначала «Использовал TheDatabase», чего я не могу сделать, если он уже застрял в неудачном восстановлении. Я даже не могу запустить «С восстановлением», если не могу сказать, куда восстанавливать. Есть ли способ использовать базу данных Master для получения имен файлов? Прямо сейчас мое единственное решение - удалить и переустановить, но я бы хотел, чтобы автоматическое средство обновления могло справиться с этим самостоятельно.

ОБНОВЛЕНИЕ: версия сервера 2005 и 2008.


person Patrick    schedule 22.09.2011    source источник
comment
Для систем, использующих зеркалирование, этот вопрос возникает постоянно.   -  person PCurd    schedule 27.09.2013


Ответы (3)


Вы должны иметь возможность получить путь + имя файла без использования базы данных. sp_helpfile использует локальные sys.sysfiles, но на данный момент, по крайней мере, вы можете использовать sysaltfiles представления каталога, которые все еще находятся в master по причинам обратной совместимости... это предполагает SQL Server 2005+ (пожалуйста, всегда указывайте версию SQL Server, которую вы используете ):

SELECT filename 
    FROM master.sys.sysaltfiles
    WHERE db_id = DB_ID('database name');
person Aaron Bertrand    schedule 22.09.2011
comment
не люблю использовать устаревшие материалы, но это привело меня к master.sys.master_files, так что укажите на вас. - person Patrick; 22.09.2011
comment
Ах да, забыл про его замену. - person Aaron Bertrand; 22.09.2011

В SQL 2005+ вы можете использовать системное представление sys.master_files.

select name, physical_name
from sys.master_files
where db_id = db_id('your_database')
person Ben Thul    schedule 22.09.2011

В SQL Server 2008 вы должны использовать следующее:

SELECT filename 
    FROM master.sys.sysaltfiles
    WHERE dbid = DB_ID('db_name');
person Trung Nguyen    schedule 14.05.2013