数据恢复咨询热线:400-666-3702  

欢迎访问南京兆柏数据恢复公司,专业数据恢复15年

兆柏数据恢复公司

 行业新闻

 当前位置: 主页 > 行业新闻

sql 数据库文件损坏怎么修复?

浏览量: 次 发布日期:2019-11-27 16:52:44

sql 数据库文件损坏怎么修复?

致MDF文件损坏的其他可能原因还包括:病毒攻击、硬盘故障、系统异常关机和突然断电等。
    用DBCC CHECKDB来修复受损MDF文件的步骤
    DBCC CHECK (name_of_corrupt_database, repair_fast)
    注意:您也可以为DBCC CHECKDB定义诸如no_infomsgs和infomsgs的选项参数。
    .MDF文件所在存储介质的损坏。
    ?4 Text tree page A text page that holds large chunks of LOB values from a single column value.
    .元数据的损坏错误。
    .如果用户将SQL数据库存储在一个压缩的文件夹中,那么MDF文件就可能因此而被损坏。
    DBCC CHECK (name_of_corrupt_database, repair_rebuild)
    -1: 显示全部IAM页,数据页, 索引页 也包括 LOB 和row-overflow 数据页。
    SQL数据库受损的背后原因
    2、即使MDF文件被部分覆盖,未被覆盖部分的表数据依然可以恢复
    -2: 显示全部IAM页。
    主数据文件是数据库的起点。除了存储系统以及用户数据以外,主数据文件还存储了数据库中的所有辅助数据文件以及重做日志文件的路径、名称、大小等信息。SQL Server通过读取主数据文件得到其他数据文件及重做日志文件的信息,这个功能与Oracle控制文件相似。每个数据库都有一个主数据文件。主数据文件的推荐文件扩展名是 .mdf。
    1、该程序从硬盘上扫描所有MDF文件碎片并保存为文件
    DBCC CHECK (name_of_corrupt_database, repair_allow_data_loss)
    第三个参数是一个非聚集索引ID或者 1, 0, 1, or 2. 值的含义:
    要找出SQL Server给一个表分配的页有哪些,要用到非文档的命令DBCC IND。DBCC IND 命令用于查询一个存储对象的内部存储结构信息,该命令有4个参数, 前3个参数必须指定。它的语法如下:
    第二个参数是数据库中的对象名或对象ID,对象可以是表或者索引视图。
    因此,如果MDF文件被损坏,那么SQL数据库就会变得不可访问。另外,如果用户试图去访问已损坏的数据库,则可能会看到一些错误提示消息。下面我们列出了一些最常见的错误消息:
    DBCC Page ({dbid|dbname},filenum,pagenum[,printopt])
    因此在本文中,我们将和您讨论修复受损SQL数据库的最佳解决方法。不过在开始之前,让我们先来了解一下SQL数据库受损的背后原因。
    dbcc page 命令读取数据页结构的命令DBCC Page。
    3:输出缓冲区的标题、页面标题(分别输出每一行),以及行偏移量表;每一行
    除主数据文件以外的所有其他数据文件都是次要数据文件,次数据文件一般只存储用户数据。某些数据库可能不含有任何次要数据文件,而有些数据库则含有多个次要数据文件。次要数据文件的推荐文件扩展名是 .ndf。
    .用户可能对数据进行错误地删除。
    情况1:如果索引ID>1,则立刻丢弃它、并重新创建。
    ?17 BCM page 有关每个分配单元中自最后一条 BACKUP LOG 语句之后的大容量操作所修改的区的信息
   SQL Server 数据库具有三种类型的文件
1 主数据文件
    主数据文件是数据库的起点。除了存储系统以及用户数据以外,主数据文件还存储了数据库中的所有辅助数据文件以及重做日志文件的路径、名称、大小等信息。SQL Server通过读取主数据文件得到其他数据文件及重做日志文件的信息,这个功能与Oracle控制文件相似。每个数据库都有一个主数据文件。主数据文件的推荐文件扩展名是 .mdf。
 
2 次要数据文件
    除主数据文件以外的所有其他数据文件都是次要数据文件,次数据文件一般只存储用户数据。某些数据库可能不含有任何次要数据文件,而有些数据库则含有多个次要数据文件。次要数据文件的推荐文件扩展名是 .ndf。
 
3 日志文件
    日志文件包含着用于恢复数据库的所有日志信息。每个数据库必须至少有一个日志文件,当然也可以有多个。日志文件的推荐文件扩展名是 .ldf。
 
    SQL Server 不强制使用 .mdf、.ndf 和 .ldf 文件扩展名,但使用它们有助于标识文件的各种类型和用途。
?? 在 SQL Server 中,数据库中所有文件的位置都记录在数据库的主文件和 master 数据库中。大多数情况下,SQL Server 数据库引擎使用 master 数据库中的文件位置信息。
    在下列情况下,数据库引擎使用主文件的文件位置信息初始化 master 数据库中的文件位置项:
    .使用带有 FOR ATTACH 或 FOR ATTACH_REBUILD_LOG 选项的 CREATE DATABASE 语句来附加数据库时。
    .从 SQL Server 2000 版或 7.0 版升级时。
    .还原 master 数据库时。
 
二 数据页
    SQL Server用8KB 的页来存储数据,并且在SQL Server里磁盘 I/O 操作在页级执行。也就是说,SQL Server 读取或写入所有数据页。页有不同的类型,像数据页,GAM,SGAM等。
    SQL Server把数据记录存在数据页(Data Page)里。数据记录是堆表里、聚集索引里叶子节点的行。
    数据页由3个部分组成。页头(标头),数据区(数据行和可用空间)及行偏移数组。
 
    要找出SQL Server给一个表分配的页有哪些,要用到非文档的命令DBCC IND。DBCC IND 命令用于查询一个存储对象的内部存储结构信息,该命令有4个参数, 前3个参数必须指定。它的语法如下:
    第一个参数是数据库名或数据库ID。
    第二个参数是数据库中的对象名或对象ID,对象可以是表或者索引视图。
    第三个参数是一个非聚集索引ID或者 1, 0, 1, or 2. 值的含义:
 0: 只显示对象的in-row data页和 in-row IAM 页。
 1: 显示对象的全部页, 包含IAM 页, in-row数据页, LOB 数据页row-overflow 数据页 . 如果请求的对象含有聚集所以则索引页也包括。
 -1: 显示全部IAM页,数据页, 索引页 也包括 LOB 和row-overflow 数据页。
 -2: 显示全部IAM页。
     Nonclustered index ID:显示索引的全部 IAM页, data页和索引页,包含LOB和 row-overflow数据页。
     为了兼容sql server 2000,第四个参数是可选的,该参数用于指定一个分区号.如果不给定值或者给定0, 则显示全部分区数据。
    和DBCC PAGE不同的是, SQL Server运行DBCC IND不需要开启3604跟踪标志.
 
    关于数据库页类型如下所示:
?1 Data page 堆表和聚集索引的叶子节点数据
 
?2 Index page 聚集索引的非叶子节点和非聚集索引的所有索引记录
 
?3 Text mixed page  A text page that holds small chunks of LOB values plus internal parts of text tree. These can be shared between LOB values in the same partition of an index or heap.
 
?4 Text tree page A text page that holds large chunks of LOB values from a single column value.
 
?7 Sort page 排序时所用到的临时页,排序中间操作存储数据用的。
 
?8 GAM page 全局分配映射(Global Allocation Map,GAM)页面 这些页面记录了哪些区已经被分配并用作何种用途。
 
?9 SGAM page 共享全局分配映射(Shared Global Allocation Map,GAM)页面 这些页面记录了哪些区当前被用作混合类型的区,并且这些区需含有至少一个未使用的页面。
 
?10 IAM page  有关每个分配单元中表或索引所使用的区的信息
 
?11 PFS page  有关页分配和页的可用空间的信息
 
?13 boot page 记录了关于数据库的信息,仅存于每个数据库的第9页
 
?15 file header page 记录了关于数据库文件的信息,存于每个数据库文件的第0页
 
?16 DCM page 记录自从上次全备以来的数据改变的页面,以备差异备份
 
?17 BCM page 有关每个分配单元中自最后一条 BACKUP LOG 语句之后的大容量操作所修改的区的信息
 
三 DBCC命令
现在我们来看看79号类型为1的数据页里存放的数据,这个就要用到DBCC PAGE命令,它的语法如下:
 
dbcc page 命令读取数据页结构的命令DBCC Page。
 该命令为非文档化的命令,具体如下: 
   DBCC Page ({dbid|dbname},filenum,pagenum[,printopt])
  具体参数描述如下:
   dbid 包含页面的数据库ID
  dbname 包含页面的数据库的名称
   filenum 包含页面的文件编号
   pagenum 文件内的页面
   printopt 可选的输出选项;选用其中一个值:
   0:默认值,输出缓冲区的标题和页面标题
   1:输出缓冲区的标题、页面标题(分别输出每一行),以及行偏移量表
   2:输出缓冲区的标题、页面标题(整体输出页面),以及行偏移量表
   3:输出缓冲区的标题、页面标题(分别输出每一行),以及行偏移量表;每一行
   后跟分别列出的它的列值
   要想看到这些输出的结果,还需要设置DBCC TRACEON(3604)
    1: 显示对象的全部页, 包含IAM 页, in-row数据页, LOB 数据页row-overflow 数据页 . 如果请求的对象含有聚集所以则索引页也包括。
    至此为确保修复了所有损坏,请再次运行DBCC CHECKDB。如果在name_of_your_corrupt_database中显示为0个分配错误和0个一致性错误,则大功告成
    主要用于以下情况:
    另一种可能修复和复原受损SQL数据库的方式是使用数据库控制台命令,例如:DBCC CHECKDB。该命令对于修复SQL Server数据库中的轻度损坏问题是非常有效的。
    情况2:如果索引ID为0或1,则使用适当的修复选项,如:repair_rebuild、repair_fast或repair_allow_data_loss,来再次运行DBCC CHECKDB。
    要想看到这些输出的结果,还需要设置DBCC TRACEON(3604)
    二 数据页
    ?13 boot page 记录了关于数据库的信息,仅存于每个数据库的第9页
    2 次要数据文件
    3、误格式化或分区导致MDF文件丢失。
    ?7 Sort page 排序时所用到的临时页,排序中间操作存储数据用的。
    2、打开以前扫描好的碎片文件
    用户可以使用SQL Server的NDF文件(一些日志文件)来进行恢复。但是在大多数损坏的案例中,单凭日志文件是不足以恢复数据库的。因为有时候在一些被严重损坏的情况下,其对应的备份文件也同样遭到了破坏。
    在此之后,您就需要开始检查索引ID了。
    1.DBCC CHECKDB (Name_of _corrupt _database)
    4、开始组合MDF文件
    SQL Server 数据库具有三种类型的文件
    ?1 Data page 堆表和聚集索引的叶子节点数据
    3、从列表选择扫描得到的文件
    printopt 可选的输出选项;选用其中一个值:
    ?? 在 SQL Server 中,数据库中所有文件的位置都记录在数据库的主文件和 master 数据库中。大多数情况下,SQL Server 数据库引擎使用 master 数据库中的文件位置信息。
    dbname 包含页面的数据库的名称
    使用教程:
    ?9 SGAM page 共享全局分配映射(Shared Global Allocation Map,GAM)页面 这些页面记录了哪些区当前被用作混合类型的区,并且这些区需含有至少一个未使用的页面。
 
相关推荐