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 / 问题 / 51636
Accepted
sa555
sa555
Asked: 2013-10-17 16:03:43 +0800 CST2013-10-17 16:03:43 +0800 CST 2013-10-17 16:03:43 +0800 CST

恢复损坏的 SQL Server 2005 数据库

  • 772

我正在使用以下命令将 SQL Server 2005 数据库还原到 SQL Server 2008 R2 实例:

RESTORE DATABASE SampleDB FROM DISK= 'C:\SampleProject\SampleDB.bak' WITH REPLACE,
MOVE 'sampledb' TO 
'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\SampleDB.mdf', 
MOVE 'sampledb_log' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\SampleDB_log.ldf',
CONTINUE_AFTER_ERROR, STATS = 10;

输出是:

10 percent processed.
20 percent processed.
30 percent processed.
40 percent processed.
50 percent processed.
60 percent processed.
70 percent processed.
80 percent processed.
90 percent processed.
100 percent processed.
Msg 3242, Level 16, State 2, Line 3
The file on device 'C:\SampleProject\SampleDB.bak' is not a valid Microsoft Tape Format backup set.
Msg 3013, Level 16, State 1, Line 3
RESTORE DATABASE is terminating abnormally.

为什么处理的百分比达到100%,然后异常终止?

即使数据损坏,如何恢复此数据库备份?错误后继续似乎没有任何区别。

sql-server restore
  • 2 2 个回答
  • 1715 Views

2 个回答

  • Voted
  1. Best Answer
    Sebastian Meine
    2013-10-17T19:58:06+08:002013-10-17T19:58:06+08:00

    恢复备份分三个阶段运行。

    1. 创建文件并将它们归零。(日志文件始终归零,数据文件取决于服务器设置)
    2. 读取页面并将它们写入新文件中的位置
    3. 前滚(尚未到达检查点的已提交事务)然后返回(未提交事务)。

    百分比计数器仅测量第 2 阶段。如果您正在恢复一个非常大的日志备份,则在完成百分比计数器处于 100% 的情况下,第三阶段实际上可能比第二阶段花费的时间要长得多。

    每个完整的数据库备份始终包含一部分日志。如果您在该备份文件中存在逻辑不一致,SQL Server 直到它处于第 3 阶段才会发现。这就是你看到 100% 的原因。


    处理 SQL Server 损坏的最佳资源是sqlskills.com。更有可能的是,您会发现您无法使用内置方法获取数据。如果问题确实出在日志部分,您也许可以使用外部供应商工具来读取备份,例如 red-gate SQL 数据比较。还有一些工具可以帮助从损坏的数据库中恢复数据,例如 apexsql recover,但我不确定其中是否有任何工具可以真正读取备份。

    • 3
  2. Milena Petrovic
    2013-10-24T00:30:13+08:002013-10-24T00:30:13+08:00

    就像 Sebastian 所说,ApexSQL Recover可用于从损坏中恢复,但在这种情况下它似乎不是一个正确的解决方案。从损坏的数据库或 MDF 文件中恢复的选项仅读取联机数据库和分离的 MDF 文件。它不会读取损坏的数据库备份

    ApexSQL Recover 中还有另一个选项可以读取损坏的备份,即从数据库备份中恢复表数据。但是请注意,它只恢复表数据并创建一个 INSERT 脚本,因此它不能用于将整个数据库移动到更新的 SQL Server 版本

    还有其他 ApexSQL 工具可以提供帮助,因为它们可以读取数据库备份 - ApexSQL Diff和A​​pexSQL Data Diff。由于备份没有严重损坏,他们可能能够读取它。这两种工具都可以读取在线数据库和数据库备份,如果您有一个在线 SQL Server 2005 数据库并且您想要升级到 SQL Server 2008 R2,也可以使用它们

    ApexSQL Diff 是一种 SQL Server 数据库比较和同步工具,可检测实时数据库和版本化数据库、备份、快照和脚本文件夹中的数据库对象之间的差异。将您的实时 SQL Server 2005 数据库或数据库备份与空白 SQL Server 2008 目标进行比较,创建了源中存在的 SQL 对象(即 SQL Server 2005 数据库)

    恢复数据库结构后,使用 ApexSQL Data Diff 恢复数据

    您可以在此处找到推荐的步骤:

    将 SQL Server 数据库迁移到较新版本的 SQL Server

    从备份创建数据库脚本而不还原它

    免责声明:我作为支持工程师在 ApexSQL 工作

    • 0

相关问题

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

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

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

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

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

Sidebar

Stats

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

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

    • 3 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

    授予用户对所有表的访问权限

    • 5 个回答
  • 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
    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
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +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