AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 343927
Accepted
Dominique
Dominique
Asked: 2024-11-29 16:09:05 +0800 CST2024-11-29 16:09:05 +0800 CST 2024-11-29 16:09:05 +0800 CST

为什么我无法恢复我的 SQL-Server 数据库?

  • 772

我有一堆文件:两个备份和一个事务日志列表。

备份称为:

  • 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...?

提前致谢

sql-server
  • 1 1 个回答
  • 59 Views

1 个回答

  • Voted
  1. Best Answer
    Tibor Karaszi
    2024-11-29T17:21:06+08:002024-11-29T17:21:06+08:00

    GUI 所做的就是为您创建一堆 T-SQL 命令。特别是恢复对话框,它非常难理解。当我教书时,我可以在大约 30 分钟内解释备份和恢复(包括命令),然后我会花 3 个小时解释这个对话框中的细微差别。

    即,当它不能完成您想要的操作、GUI 的复杂性太高、难以理解或者 GUI 中存在令人讨厌的错误时,能够独立于 GUI 工作是一个好主意。

    因此,您可以使用脚本按钮来编写由 SSMS 生成的 RESTORE 命令脚本,并使用这些脚本 RESTORE 命令来匹配您拥有的文件以及您想要恢复的文件。

    在此处输入图片描述

    在我的示例中,以及我使用恢复对话框的方式中,脚本命令如下所示。(请注意,SSMS 向备份命令添加了一些垃圾,这些垃圾是无关紧要的、无操作的,不应该存在。但这种情况不太可能改变。)

    USE [master]
    BACKUP LOG [Olf] TO  DISK = N'R:\SqlBackups\Olf_LogBackup_2024-11-29_18-30-16.bak' WITH NOFORMAT, NOINIT,  NAME = N'Olf_LogBackup_2024-11-29_18-30-16', NOSKIP, NOREWIND, NOUNLOAD,  NORECOVERY ,  STATS = 5
    RESTORE DATABASE [Olf] FROM  DISK = N'R:\Olf.bak' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 5
    RESTORE DATABASE [Olf] FROM  DISK = N'R:\Olf.bak' WITH  FILE = 7,  NORECOVERY,  NOUNLOAD,  STATS = 5
    RESTORE LOG [Olf] FROM  DISK = N'R:\Olf.bak' WITH  FILE = 8,  NORECOVERY,  NOUNLOAD,  STATS = 5
    RESTORE LOG [Olf] FROM  DISK = N'R:\Olf.bak' WITH  FILE = 9,  NOUNLOAD,  STATS = 5
    

    希望您不会缺少“中间”的日志备份文件,因为丢失的文件之前的那个文件将是您可以恢复的最后一个文件。

    • 3

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve