[英]How to create copy of database using backup and restore
使用 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
。 我是对的,在这种情况下,我可以使用文件,也可以使用文件位置? 想想少了点什么……
用于创建备份使用下一个查询(一切正常)
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
and Task --> Restore
中的工具,但出现错误 - 无法创建备份。 (以管理员权限启动的程序)
这是我如何配置还原以复制的屏幕
但我有错误,我无法覆盖数据库文件Rewards2
。 这是一个问题 - 如果我输入数据库Rewards2_copy
Rewards2
还是我理解错了?
舒尔,还有更多可能的变体来制作数据库的副本,但真的想为这个解决方案找到问题。 我在哪里犯错/我忘记了什么或不明白什么。
从备份还原数据库时,它将使用与原始数据库相同的文件名。 在还原期间,您需要更改这些文件名。
在还原窗口上,转到“ Files
选项卡。 在此窗口中,有一列称为Restore As
。 在您看到的每个文件的“还原为”列中,更改路径末尾的文件名。
我认为您正在尝试覆盖您要复制的数据库中的逻辑文件名...有点猜测,但请尝试执行此操作-如果现在不需要编写脚本,请在SSMS中进行尝试:
请记住,在第三点中更改选项卡中的逻辑文件名-否则,您将尝试覆盖Rewards2文件。
周围有很多指南:
通过SQL确定可以使用的逻辑文件名:filelistonly
restore filelistonly from disk='enter backup file path here'
然后,请使用已报告的文件名构建您的还原查询,
这是VBS脚本,它将备份数据库并将其还原到另一台服务器。 假定每个服务器都有“备份”文件共享。 该脚本可以从任何位置运行。
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
除了@JodyT 的回答:
在我的情况下,您不仅需要更改逻辑文件名,而且删除选项“在还原前进行尾日志备份”也很重要。 如果选中此选项,那么如果 Rewards2 正在使用中,您将无法恢复到 Rewards2_copy!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.