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时,你指定一个已经创建的目标数据库;当你创建它时,你有选择 - 不是强制性的 - 指定一个非默认的表空间,但是如果你没有,那么你只是不关心文件的物理存储位置.)
对于未来的Google员工; 从SQL Server 2012 开始,您可以使用:
SELECT ServerProperty(N'InstanceDefaultDataPath') AS default_file
, ServerProperty(N'InstanceDefaultLogPath') AS default_log
;
Run Code Online (Sandbox Code Playgroud)
这将读取"服务器属性">"数据库设置">"数据库默认位置"下显示的文件夹路径
不久前我写了一个函数,它为你做这件事。它支持所有版本的 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)
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)
小智 0
如果您的意思是使用 Management Studio 的“新建数据库”选项,那么它会默认某些值。但 CREATE DATABASE 的 T-SQL 仍然需要路径。您可以通过转到管理工作室,选择“新建数据库”,输入新名称,然后单击“脚本”按钮来查看这一点。此按钮将为您提供 SQL Server 将运行的 T-SQL。该过程实际上并不运行,因此您可以取消新建数据库向导。
恢复时也有一个类似的按钮。因此,如果您已经拥有所有信息并且只需要 T-SQL,请通过 Management Studio 进行恢复,但不要单击“确定”来运行该过程,而是单击“脚本”按钮,该按钮将为您生成默认的 T-SQL价值观。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
10409 次 |
| 最近记录: |