如何在sql server DB上每天恢复差异

NoN*_*aMe 6 sql-server backup restore

我使用 SQL Server DB,我需要的是我有一个 DB1 和客户端站点与这个 DB 通信,应用程序的报告模块也使用相同的 DB(即在网页中显示不同的报告)客户端想要指向将实例报告给另一个数据库,即 DB2。

我们需要做的是:创建一个新的 DB2,即 DB1 的副本,我们每天都会对 DB1 进行差异备份并将其恢复到 DB2。

为此,我尝试使用此查询对 DB1 进行差异备份,

BACKUP DATABASE [DB1] TO  DISK = N'D:\DB_location\DB1-Diff.bak' 
WITH  DIFFERENTIAL , NOFORMAT, NOINIT,  NAME = N'DB1-Differential Database Backup', 
SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO
Run Code Online (Sandbox Code Playgroud)

并将其恢复到我使用的 DB2

RESTORE DATABASE [DB2] FROM  DISK = N'D:\DB_location\DB1-Diff.bak' 
WITH  FILE = 1,  norecovery,  NOUNLOAD,  STATS = 10
GO
Run Code Online (Sandbox Code Playgroud)

它第一次运行完美,但下次如果给我错误:

Msg 3117, Level 16, State 4, Line 1
The log or differential backup cannot be restored because no files are ready to rollforward.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.
Run Code Online (Sandbox Code Playgroud)

还请告知我是否可以使用事务日志备份,如果这比差异备份更多。 任何人都可以帮我解决这个问题。

提前致谢。

Kin*_*hah 2

根据您希望报告的最新程度,您可以使用

  1. 日志传送:在辅助设备上延迟日志恢复,并在恢复日志时选择辅助设备在断开用户连接的情况下只读。这将允许您从辅助服务器读取。

    您只需要在辅助设备的恢复频率之间取得平衡。

    与您的方法相比,日志传送将更加有效,并且它开箱即用,您甚至可以监视它。另外,您还可以获得一台热备用服务器,如果主服务器出现故障,它将充当灾难恢复(需要注意的是——根据日志恢复的频率,将会有一定量的数据丢失)

  2. 事务复制:如果您的主数据库没有进行架构更改并且您想要近乎实时的报告,则可以使用 T-rep。只需确保您仅复制报告所需的对象即可。初始快照会对您的主数据库产生一些影响。

附带说明一下,根据您使用的 SQL Server 的版本和版本,在 2012 年及更高版本中,您可以利用具有可读辅助服务器的 AlwaysON 将报告卸载到辅助服务器。

如果您需要任何进一步的说明,请告诉我,我将很乐意为您提供帮助。

编辑:

它第一次运行完美,但下次如果给我错误:

原因可能是因为完整备份FirstLSN不会与差异备份的DifferentialBaseLSN==> 匹配,这意味着如果值不匹配,那么您将需要完整备份,然后进行差异备份。

在此输入图像描述