dot*_*ewb 3 sql-server-2008 sql-server restore
我正在尝试按照以下帖子中的说明进行操作:
总结; 我正在构建逻辑文件列表然后恢复数据库:
RESTORE FILELISTONLY
FROM DISK = 'C:\KeltieCochrane_v220120220.BAK';
RESTORE DATABASE KeltieCochrane_v2
FROM DISK = 'C:\KeltieCochrane_v220120220.BAK'
WITH
MOVE 'KeltieCochrane_v2' TO 'C:\Program Files\...\KeltieCochrane_v2.mdf',
MOVE 'KeltieCochrane_v2' TO 'C:\Program Files\...\KeltieCochrane_v2_1.ldf';
Run Code Online (Sandbox Code Playgroud)
我没有.MDF
或.LDF
在目标文件夹中,并且知道它们包含在.BAK
备份文件中。
当我将数据库恢复到一个空的新数据库时,它指出:
The backup set holds a backup of a database other than the existing 'KCDB'.
当我尝试使用脚本 (KeltieCochrane_v2) 中的实际数据库名称进行恢复时,我得到 There are conflicting file locations specified for the file.
如果我尝试简单地恢复数据库,我会收到一个标准的 15105 错误并且操作系统无法获取此错误的文本。
我究竟做错了什么?
您收到第一个错误,因为kdcb
已经存在。并且备份的数据库不是同一个数据库。如果你想覆盖现有的、单独的数据库(这是不一样的。你不需要指定替换),你需要包含REPLACE
选项:
RESTORE DATABASE KeltieCochrane_v2
FROM DISK = 'C:\KeltieCochrane_v220120220.BAK'
WITH
MOVE 'KeltieCochrane_v2' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\KeltieCochrane_v2.mdf',
MOVE 'KeltieCochrane_v2' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\KeltieCochrane_v2_1.ldf',
REPLACE
Run Code Online (Sandbox Code Playgroud)
警告!!!您需要非常小心并通过指定REPLACE
. 以下是BOL 关于REPLACE
以下内容的确切摘录:
替换期权影响
REPLACE 应该很少使用,并且只有在仔细考虑之后才能使用。恢复通常可以防止意外地用不同的数据库覆盖数据库。如果 RESTORE 语句中指定的数据库已存在于当前服务器上,并且指定的数据库系列 GUID 与备份集中记录的数据库系列 GUID 不同,则不会还原该数据库。这是一个重要的保障。
REPLACE 选项会覆盖恢复正常执行的几个重要安全检查。被覆盖的检查如下:
使用另一个数据库的备份恢复现有数据库。
使用 REPLACE 选项,restore 允许您用备份集中的任何数据库覆盖现有数据库,即使指定的数据库名称与备份集中记录的数据库名称不同。这可能会导致不同的数据库意外覆盖数据库。
使用完整或大容量日志恢复模型恢复数据库,其中未进行尾日志备份且未使用 STOPAT 选项。
使用 REPLACE 选项,您可能会丢失已提交的工作,因为最近写入的日志尚未备份。
覆盖现有文件。
例如,错误可能允许覆盖错误类型的文件,例如 .xls 文件,或者其他未联机数据库正在使用的文件。如果现有文件被覆盖,则任意数据丢失是可能的,尽管恢复的数据库是完整的。
归档时间: |
|
查看次数: |
5314 次 |
最近记录: |