所以我试图通过备份模板来克隆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指令是必需的,因为您的源数据库将仍然在线并使用原始物理文件。 如果你的源数据库不在线,那么你可以逃脱你的东西。