2

每当我尝试使用 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 上。

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

4

1 回答 1

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上的 Microsoft 文档:

在 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 的输出将显示文件中的一个备份,而第二个的输出应显示文件中有两个备份。

于 2013-01-02T15:57:32.193 回答