SQL Server 日志备份 + 日志还原(日志传送 / 日志增量还原)

一、第一步:源库设置(必须做)

1. 把数据库改成完整恢复模式

USE master;
GO
ALTER DATABASE 你的库名 SET RECOVERY FULL;
GO

2. 立即做一次完整备份(基础备份)

BACKUP DATABASE 你的库名
TO DISK = 'D:\Backup\库名_Full_20260419.bak'
WITH INIT, COMPRESSION;
GO

这是后续所有日志还原的基础,没有它日志无法还原。

二、第二步:在目标服务器还原(关键)

1. 先还原完整备份,并且 不恢复(NORECOVERY)

RESTORE DATABASE 你的同步库名
FROM DISK = 'D:\Backup\库名_Full_20260419.bak'
WITH
    MOVE '逻辑数据文件名' TO 'D:\Data\同步库名.mdf',
    MOVE '逻辑日志文件名' TO 'D:\Log\同步库名.ldf',
    NORECOVERY;  -- 关键!必须加这个
GO

执行后,目标库会显示:“正在还原...” (Restoring...)这是正常的,说明它准备好接收日志了。

三、第三步:源库持续生成日志备份

以后在源库定期执行日志备份:

BACKUP LOG 你的库名
TO DISK = 'D:\Backup\Log\库名_Log_20260419_01.trn'
WITH INIT, COMPRESSION;
GO
  • 可以每 5/10/15 分钟执行一次

  • 文件名按时间递增,不要覆盖

四、第四步:在目标库还原日志(实现同步)

.trn 日志文件拷贝到目标服务器,执行:

RESTORE LOG 你的同步库名
FROM DISK = 'D:\ReceiveLog\库名_Log_20260419_01.trn'
WITH NORECOVERY;  -- 继续保持还原状态
GO

每来一个日志,就还原一次,同步就实现了

五、如果你想:让同步库 “可读”(备用库模式)

如果你希望目标库既能同步,又能偶尔查询,用:

RESTORE LOG 你的同步库名
FROM DISK = 'xxx.trn'
WITH STANDBY = 'D:\Standby\UNDO.dat';

效果:

  • 库处于 Standby / Read-Only 可读状态

  • 下次还原日志时会自动继续同步


六、高级:自动日志同步(日志传送 Log Shipping)

SQL Server 2014 自带日志传送,可以全自动:

  1. 源库自动备份日志

  2. 自动拷贝到目标

  3. 自动在目标库还原

配置路径(SSMS)

  1. 右键数据库 → 任务

  2. Ship Transaction Logs(日志传送)

  3. 勾选:启用日志传送

  4. 配置备份共享文件夹

  5. 添加目标服务器和目标库

  6. 设置复制、还原频率(如 1 分钟)

全程界面化,不用写脚本。


白俊遥博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论