如何获取卡住的MS SQL数据库的文件路径 恢复

发布于 2024-12-06 01:14:21 字数 284 浏览 1 评论 0原文

我以“带替换”备份的形式将更新分发到数据库,但用户可以将其安装到任何硬盘驱动器上的任何位置,这意味着我需要在运行“通过移动恢复”之前对其进行“Exec SP_HelpFile”。但 SP_HelpFile 要求我首先“使用数据库”,如果它已经陷入失败的恢复中,我就无法执行此操作。如果我无法告诉它在哪里恢复,我什至无法运行“With Recovery”。有没有办法使用Master数据库来获取文件名?现在我唯一的解决方案是删除并重新安装,但我希望自动更新程序能够自行处理它。

更新:服务器版本为 2005 & 2005 2008年

I distribute updates to our database in the form of backups "With Replace", but the users can install it to any location on any hard drive, which means I need to "Exec SP_HelpFile" on it before running "Restore With Move". But SP_HelpFile requires me to "Use TheDatabase" first, which I can't do if it's already stuck in a failed restore. I can't even run "With Recovery" if I can't tell it where to restore. Is there any way to use the Master database to get the filenames? Right now my only solution is to delete and reinstall, but I'd like the automated updater to be able to handle it on its own.

UPDATE: Server version is 2005 & 2008

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

可爱咩 2024-12-13 01:14:21

在 SQL 2005+ 中,您可以使用系统视图 sys.master_files。

select name, physical_name
from sys.master_files
where db_id = db_id('your_database')

In SQL 2005+, you can use the system view sys.master_files.

select name, physical_name
from sys.master_files
where db_id = db_id('your_database')
清浅ˋ旧时光 2024-12-13 01:14:21

您应该能够获取路径+文件名,而无需使用数据库。 sp_helpfile 使用本地 sys.sysfiles,但现在至少您可以使用目录视图 sysaltfiles,出于向后兼容性原因,仍处于 master 状态...这是假设 SQL Server 2005+(请始终指定您正在使用的 SQL Server 版本) ):

SELECT filename 
    FROM master.sys.sysaltfiles
    WHERE db_id = DB_ID('database name');

You should be able to get the path+filename without having to use the database. sp_helpfile uses the local sys.sysfiles but for now at least you can use the catalog view sysaltfiles, still in master for backward compatibility reasons... this is assuming SQL Server 2005+ (please always specify the version of SQL Server you're using):

SELECT filename 
    FROM master.sys.sysaltfiles
    WHERE db_id = DB_ID('database name');
七七 2024-12-13 01:14:21

在SQL Server 2008中,您应该使用如下:

SELECT filename 
    FROM master.sys.sysaltfiles
    WHERE dbid = DB_ID('db_name');

In the SQL Server 2008, you should use as follows:

SELECT filename 
    FROM master.sys.sysaltfiles
    WHERE dbid = DB_ID('db_name');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文