提问人:kyork 提问时间:12/6/2012 最后编辑:Communitykyork 更新时间:1/2/2013 访问量:1756
SQL Server - 使用 RESTORE 复制数据库,生成的副本没有数据
SQL Server - Using RESTORE to copy database, resulting copy has no data
问:
每当我尝试使用 BACKUP 和 RESTORE 命令创建数据库的副本时,都会创建该副本,但不包含任何数据。我正在运行以下命令,并恢复成功状态:
BACKUP DATABASE [SomeDB]
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\SomeDB.bak'
BACKUP DATABASE successfully processed 161 pages in 0.021 seconds (62.805 MB/sec).
RESTORE DATABASE [SomeDB_Copy]
FROM DISK=N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\SomeDB.bak'
WITH MOVE N'SomeDB' TO N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\SomeDB_copy.mdf',
MOVE N'SomeDB_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\SomeDB_copy.ldf'
RESTORE DATABASE successfully processed 162 pages in 0.095 seconds (13.958 MB/sec).
我错过了一步吗?我发现的所有示例都使用这种方法。即使在 StackOverflow 上。这是在 SQL Server 2005 上。
更新:。我将数据库备份到一个新文件,并使用该文件进行恢复,一切正常。我不知道我的原始文件是否已损坏,或者发生了其他奇怪的事情。
答:
1赞
CrimeWire
1/2/2013
#1
我意识到这个话题已经很老了,但我想扩展一下 usr 在他关于多文件备份集的评论中所说的话,尽管我会称它为多备份设备。您的备份命令处理了 161 页,但恢复处理了 162 页,这一事实使我认为您的设备/文件中有多个备份。您可以在 backup 命令上使用 INIT 子句来保证设备中只有一个备份:
BACKUP DATABASE [SomeDB]
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\SomeDB.bak'
with init;
从 http://msdn.microsoft.com/en-us/library/ms186865.aspx 的Microsoft文档中:
磁盘设备在指定之前不必存在 BACKUP 语句。如果物理设备存在,并且 INIT 选项是 未在 BACKUP 语句中指定,则备份将附加到 装置。
您应该能够使用 RESTORE 命令上的 HEADERONLY 选项来检查设备/文件中是否有多个备份。
BACKUP DATABASE [SomeDB]
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\SomeDB.bak'
with init;
RESTORE HEADERONLY
FROM DISK = = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\SomeDB.bak';
BACKUP DATABASE [SomeDB]
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\SomeDB.bak';
RESTORE HEADERONLY
FROM DISK = = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\SomeDB.bak';
第一个 RESTORE HEADERONLY 的输出将显示文件中的一个备份,而第二个的输出应显示文件中有两个备份。
评论
0赞
Stephen Holt
7/2/2014
谢谢,我没有遇到与上述相同的问题,但是我在没有意识到的情况下将多个备份写入了同一个文件,因此您的回答为我指明了正确的方向!
下一个:继续执行而不引发异常
评论
SomeDB
SomeDB_Copy
SomeDB.bak
FILE
FILE