如何在不知道目标路径或文件名的情况下还原SQL Server数据库备份?

use*_*797 13 t-sql sql-server database-restore sql-server-2008

我需要以编程方式(T-SQL)还原SQL Server 2008中的数据库备份.此备份来自不同的服务器,原始数据库名称也可能不同.(实际上,我将数据库从某个服务器复制到另一台服务器上的新数据库.)

显然,我必须使用RESTORE DATABASE ... WITH MOVE,哪个有效,但我需要知道应该将文件恢复到哪里以及如何命名它们.尽管搜索,我还没有找到最基本的任务:只使用默认路径和文件名,即执行SQL Server时执行的任何操作CREATE DATABASE- 您不必指定路径命令,为什么需要一个RESTORE

我是否忽略了一些简单的解决方案,或者我是否真的必须列出文件,以某种方式从SQL Server配置中找到数据库目录,并使用该信息构建RESTORE命令?谢谢.

(与PostgreSQL相比,使用pg_restore时,你指定一个已经创建的目标数据库;当你创建它时,你有选择 - 不是强制性的 - 指定一个非默认的表空间,但是如果你没有,那么你只是不关心文件的物理存储位置.)

gve*_*vee 9

对于未来的Google员工; 从SQL Server 2012 开始,您可以使用:

SELECT ServerProperty(N'InstanceDefaultDataPath') AS default_file
     , ServerProperty(N'InstanceDefaultLogPath') AS default_log
;
Run Code Online (Sandbox Code Playgroud)

这将读取"服务器属性">"数据库设置">"数据库默认位置"下显示的文件夹路径

服务器属性>数据库设置


Fil*_*Vos 6

不久前我写了一个函数,它为你做这件事。它支持所有版本的 SQL Server,包括使用默认实例和命名实例的安装。有关代码和示例,请参见此处

要进行恢复,您将调用如下所示的函数。

declare @sql nvarchar(2000), 
        @data varchar(260), 
        @log varchar(260); 

select @data = dbo.fn_get_default_path(0),
       @log = dbo.fn_get_default_path(1)

SELECT @sql= 'RESTORE DATABASE DefaultLocationDB 
FROM  DISK = N''c:\backups\DemoDB.bak'' WITH  FILE = 1,  
MOVE N''demo_data_device'' TO N''' + @data + '\DemoDb.mdf'',  
MOVE N''demo_log_device'' TO N''' +  @log + '\DemoDb.ldf'',  
NOUNLOAD, REPLACE'

exec (@sql)
Run Code Online (Sandbox Code Playgroud)


Dav*_*tin 5

CREATE DATABASE命令将使用默认路径创建数据库,因此您可以创建数据库,然后使用替换语法(sqlcmd模式)对其进行还原:

:setvar DatabaseName MyDatabase
declare @fileName varchar(255)
set @fileName = 'c:\backup\mybackup.bak'

if db_id('$(DatabaseName)') is null
            CREATE DATABASE [$(DatabaseName)]

RESTORE DATABASE [$(DatabaseName)]
FROM DISK = @fileName
WITH REPLACE
Run Code Online (Sandbox Code Playgroud)

  • 然后我在sqlcmd或SQL查询中尝试此操作,我得到:`文件'MyDBnameHere'无法还原到'M:\ myOLDserverPath \ MyDBnameHere.mdf'。使用WITH MOVE标识文件的有效位置。 (3认同)

小智 0

如果您的意思是使用 Management Studio 的“新建数据库”选项,那么它会默认某些值。但 CREATE DATABASE 的 T-SQL 仍然需要路径。您可以通过转到管理工作室,选择“新建数据库”,输入新名称,然后单击“脚本”按钮来查看这一点。此按钮将为您提供 SQL Server 将运行的 T-SQL。该过程实际上并不运行,因此您可以取消新建数据库向导。

恢复时也有一个类似的按钮。因此,如果您已经拥有所有信息并且只需要 T-SQL,请通过 Management Studio 进行恢复,但不要单击“确定”来运行该过程,而是单击“脚本”按钮,该按钮将为您生成默认的 T-SQL价值观。

希望这可以帮助。