Sql-Server

通過備份/恢復創建 SQL Server 數據庫的複製

  • April 13, 2017

所以我試圖通過備份模板來“複製”一個 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指令是必要的,因為您的源數據庫仍將線上並使用原始物理文件。如果您的源數據庫不再線上,那麼您可以擺脫現有的。

引用自:https://serverfault.com/questions/348881