SQL Server - 使用RESTORE复制数据库,生成的副本没有数据

时间:2012-12-05 16:23:27

标签: sql sql-server sql-server-2005

每当我尝试使用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).

我错过了一步吗?我发现的所有例子都使用这种方法。 Even on StackOverflow。这是在SQL Server 2005上。

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

1 个答案:

答案 0 :(得分: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文档:

  

磁盘设备在a中指定之前不一定存在   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的输出将在文件中显示一个备份,而第二个的输出应显示文件中有两个备份。