使用SQL Server Management Studio 2012,我正在尝试创建本地数据库的副本。我发现了一些解决方案的变种。其中之一 - 备份和恢复数据库为新的 - HERE。
目前创建名为Rewards2_bak
的数据库备份。此文件副本放入系统目录C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\
下一步 - 创建查询以将数据库还原为现有数据库的副本
GO
use master
RESTORE FILELISTONLY
FROM Rewards2_bak
RESTORE DATABASE Rewards2_Copy
FROM Rewards2_bak
WITH RECOVERY,
MOVE 'Rewards2_data' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\Rewards2_copy.mdf',
MOVE 'Rewards2_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\Rewards2_log_copy.ldf'
GO
收到错误,我没有备用设备Rewads2_backup
。我是正确的理解在这种情况下像设备我可以使用文件,还有文件位置?想想失踪的东西......
创建备份使用下一个查询(全部OK)
USE Rewards2;
GO
BACKUP DATABASE Rewards2
TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\Rewards2_bak.bak'
WITH FORMAT,
MEDIANAME = 'SQLServerBackups',
NAME = 'Full Backup of Rewards2';
GO
还尝试使用SQL Server 2012 Task --> Backup
和Task --> Restore
中的工具,但出现错误 - 无法创建备份。 (启动了具有管理员权限的程序)
这是我配置如何恢复复制
的屏幕
但我有错误,我无法覆盖数据库文件Rewards2
。这就是问题 - 如果我添加数据库Rewards2
的新名称,为什么要覆盖Rewards2_copy
。或者我理解错了什么?
舒尔,这是制作数据库副本的一些可能的变种,但真的很想找到这个解决方案的问题。我犯错误/忘记或不理解的地方。
答案 0 :(得分:3)
从备份还原数据库时,它将使用与原始数据库相同的文件名。 您需要在还原期间更改这些文件名。
在还原窗口中,转到Files
标签。在此窗口中,您有一个名为Restore As
的列。
在您看到的每个文件的“还原为”列中更改路径末尾的文件名。
答案 1 :(得分:2)
我认为您正在尝试覆盖您要复制的数据库中的逻辑文件名...猜测一下但尝试一下 - 如果您不需要立即编写脚本,请在SSMS中尝试:
请记住在第三点中更改选项选项卡中的逻辑文件名 - 否则您将尝试覆盖Rewards2文件。
周围有很多指南:
通过SQL确定您可以使用的逻辑文件名:filelistonly
restore filelistonly from disk='enter backup file path here'
然后使用报告的文件名构建恢复查询,就像您已经尝试过的那样
答案 2 :(得分:0)
这是将备份和还原DB到另一台服务器的VBS脚本。它假定每个服务器都有" Backup"文件共享。该脚本可以从任何位置运行。
sFrom = "\\server1\Backup"
sTo = "\\server2\Backup"
Set fso = CreateObject("Scripting.FileSystemObject")
CopyDb "Db1"
CopyDb "Db2"
MsgBox "Done!"
Sub CopyDb(sDB)
If fso.FileExists(sFrom & "\" & sDB & ".bak") Then
fso.DeleteFile sFrom & "\" & sDB & ".bak"
End If
ExecuteSql "server1", "BACKUP DATABASE " & sDB & " TO DISK = '" & sFrom & "\" & sDB & ".bak'"
fso.CopyFile sFrom & "\" & sDB & ".bak", sTo & "\" & sDB & ".bak"
ExecuteSql "server2", "ALTER DATABASE " & sDB & " SET SINGLE_USER WITH ROLLBACK IMMEDIATE"
ExecuteSql "server2", "RESTORE DATABASE " & sDB & " FROM DISK = N'" & sTo & "\" & sDB & ".bak'"
ExecuteSql "server2", "EXEC " & sDB & ".dbo.sp_change_users_login 'Update_One', 'user1', 'user1'"
End Sub
Sub ExecuteSql(sServer, sSql)
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=" & sServer
cn.Execute sSql
cn.Close
End Sub