通过备份/恢复创buildSQL Server数据库的克隆

所以我试图通过备份模板来克隆SQL Server数据库,然后将其恢复为新名称。 但是,有一些我缺less的东西或者我不了解的备份。 这是我到目前为止:

DECLARE @now DATETIME2(0) = GETDATE() -- so backup file will be in C:\backupdirectory\TemplateDb_20120111145230.bak DECLARE @backupName NVARCHAR = N'C:\backupdirectory\TemplateDb_' + CAST(DATEPART(year, @now) AS VARCHAR) + CAST(DATEPART(month, @now) AS VARCHAR) + CAST(DATEPART(day, @now) AS VARCHAR) + CAST(DATEPART(hour, @now) AS VARCHAR) + CAST(DATEPART(minute, @now) AS VARCHAR) + CAST(DATEPART(second, @now) AS VARCHAR) + '.bak' BACKUP DATABASE TemplateDb TO DISK = @backupName RESTORE DATABASE ClonedDb FROM @backupName 

但是,备份文件不会被创build,并且restore命令将失败

备份设备“C”不存在

为什么它试图find一个名为“C”的设备,而不是完整的path? 我的备份在哪里? 我错过了什么?

编辑:

现在正在根据需要创build文件,但是restore命令仍在抱怨备份设备不存在:

备份设备“C:\ backupdirectory \ TemplateDb_2012111125632.bak”不存在。 要查看现有备份设备,请使用sys.backup_devices目录视图。 要创build新的备份设备,请使用sp_addumpdevice或SQL Server Management Studio。

我应该添加什么作为备份设备? 我需要为每个备份创build一个特定的备份设备吗?

 RESTORE DATABASE ClonedDb FROM @backupName WITH MOVE 'TemplateDb' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\ClonedDb.mdf', MOVE 'TemplateDb_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\ClonedDb_log.ldf' 

您需要为@backupName声明一个长度。 如果您在声明中closures长度,则默认为1个字符。 这就是为什么你看到一个截断的path。

 DECLARE @backupName NVARCHAR(250) = N'C:\....... 

您还需要修复您的RESTORE 。 例如:

 RESTORE DATABASE ClonedDb FROM DISK=@backupName WITH MOVE 'MyDB_Data' TO 'C:\SQLData\MyDB2.mdf', MOVE 'MyDB_Log' TO 'C:\SQLLogs\MyDB2.ldf'; 

您需要根据您的环境更换逻辑和物理文件名称。 WITH MOVE指令是必需的,因为您的源数据库将仍然在线并使用原始物理文件。 如果你的源数据库不在线,那么你可以逃脱你的东西。