Sql-Server
通過備份/恢復創建 SQL Server 數據庫的複製
所以我試圖通過備份模板來“複製”一個 SQL Server 數據庫,然後將其恢復為新名稱。但是,要麼我缺少一些東西,要麼我不明白關於製作備份的一些東西。這是我到目前為止所得到的:
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
但是,不會創建備份文件,並且還原命令失敗並顯示
備份設備“C”不存在
為什麼它試圖找到一個名為“C”的設備,而不是完整路徑?我的備份實際上要去哪裡?我錯過了什麼?
編輯:
它現在根據需要創建文件,但恢復命令仍然抱怨備份設備不存在:
備份設備“C:\backupdirectory\TemplateDb_2012111125632.bak”不存在。要查看現有備份設備,請使用 sys.backup_devices 目錄視圖。要創建新的備份設備,請使用 sp_addumpdevice 或 SQL Server Management Studio。
我應該添加什麼作為備份設備?我是否需要為我所做的每個備份創建一個特定的備份設備?
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
. 如果您在聲明中關閉長度,則預設為 1 個字元。這就是為什麼你會看到一條截斷的路徑。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
指令是必要的,因為您的源數據庫仍將線上並使用原始物理文件。如果您的源數據庫不再線上,那麼您可以擺脫現有的。