我有一堆文件:两个备份和一个事务日志列表。
备份称为:
- FB20241125_233033.bak
- FB20241126_233040.bak
(文件名与备份的日期/时间相对应。)
事务日志被称为(命令行摘录):
Prompt>dir *.trn
Directory of C:\...\Transaction_Logs
25/11/2024 23:45 5.758.464 20241125224500.trn
26/11/2024 00:00 5.560.832 20241125230001.trn
26/11/2024 00:15 5.692.928 20241125231501.trn
...
26/11/2024 15:00 5.822.976 20241126140001.trn
26/11/2024 15:15 5.955.072 20241126141501.trn
26/11/2024 15:30 5.889.536 20241126143000.trn
27/11/2024 12:15 5.626.368 20241127111501.trn
(文件名的原因相同。)
然后我使用以下属性恢复该目录(获取两个备份文件和所有事务日志文件):
这是我收到的错误消息:
System.Data.SqlClient.SqlError: 此备份集中的日志开始于 LSN 33845000000619000001,该日志太新,无法应用于数据库。可以恢复包含 LSN 33816000000750400001 的早期日志备份。(Microsoft.SqlServer.SmoExtended)
我自己想“但这很明显:我最近的备份是在 2024 年 11 月 26 日 23 时 30 分 40 秒进行的,而最新的事务日志的日期是后一天,所以我们不要在恢复中包含该事务日志。 ”,但这没有帮助。
有人知道我该怎么做才能恢复包含最新事务日志的最新备份?
编辑1:“*.trn”文件中的LSN怎么样?
同时,我对提到的*.trn
文件运行了以下SQL查询:
RESTORE HEADERONLY FROM DISK = 'C:\...\20241125224500.trn';
RESTORE HEADERONLY FROM DISK = 'C:\...\20241125230001.trn';
...
以下是第一批结果:
FirstLSN LastLSN
---------------------- --------------------
33758000001254200001 33759000000515900001
33759000000515900001 33759000001579300001
33759000001579300001 33760000000835100001
33760000000835100001 33761000000090800001
33761000000090800001 33761000001176400001
33761000001176400001 33762000000412500001
33762000000412500001 33762000001492100001
33762000001492100001 33763000000648100001
33763000000648100001 33763000001722200001
如您所见,有相当多的*.trn
文件,其第一个日志序列号(LSN)为3375...
和3376...
,那么为什么错误消息说此备份集中的日志开始于LSN 3384...
?
提前致谢
GUI 所做的就是为您创建一堆 T-SQL 命令。特别是恢复对话框,它非常难理解。当我教书时,我可以在大约 30 分钟内解释备份和恢复(包括命令),然后我会花 3 个小时解释这个对话框中的细微差别。
即,当它不能完成您想要的操作、GUI 的复杂性太高、难以理解或者 GUI 中存在令人讨厌的错误时,能够独立于 GUI 工作是一个好主意。
因此,您可以使用脚本按钮来编写由 SSMS 生成的 RESTORE 命令脚本,并使用这些脚本 RESTORE 命令来匹配您拥有的文件以及您想要恢复的文件。
在我的示例中,以及我使用恢复对话框的方式中,脚本命令如下所示。(请注意,SSMS 向备份命令添加了一些垃圾,这些垃圾是无关紧要的、无操作的,不应该存在。但这种情况不太可能改变。)
希望您不会缺少“中间”的日志备份文件,因为丢失的文件之前的那个文件将是您可以恢复的最后一个文件。