2012-12-05 39 views
2

每当我尝试使用BACKUP和RESTORE命令创建数据库的副本时,副本都会创建,但不包含任何数据。我正在运行以下命令,并返回成功状态:SQL Server - 使用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). 

我是否缺少一个步骤?我发现的所有例子都使用这种方法。 Even on StackOverflow。这是在SQL Server 2005上。

更新:我将数据库备份到一个新文件,并使用它恢复,一切正常。我不知道我的原始文件是否损坏,或其他奇怪的事情正在发生。

+1

我讨厌问清楚,但你能否确认源数据库中有数据? – swasheck

+0

在这一点上,我都是白痴检查。源数据库有1行1行,仅用于测试。 – kyork

+1

我刚才测试了你的代码。创建一个名为'SomeDB'的数据库,有一个表和一行。运行代码进行备份和恢复。当我打开'SomeDB_Copy'时,它有一个如预期的一行。有没有可能你可以将'SomeDB.bak'上传到某个文件共享站点?你使用的是什么版本的SQL Server?什么版本的SSMS(或者你如何运行查询)?如果您使用用户界面进行备份还原而不是通过代码执行,它的工作原理是否相同? – mellamokb

回答

1

我意识到这个话题是旧的,但我想扩大usr在他对多文件备份集的评论中所说的话,尽管我会称之为多备份设备。事实上,您的备份命令处理了161页,但恢复处理了162页让我觉得您的设备/文件中有多个备份。您可以使用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

的盘片装置不必存在于在BACKUP语句中指定的 之前。如果物理设备存在,并且在BACKUP语句中未指定INIT选项 ,则备份将附加到 设备。

您应该能够使用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

谢谢,我没有像上面那样的问题,但我已经写了多个备份到相同的文件没有意识到它,所以你的答案指出我在正确的方向! –

相关问题