关闭

SQL Server 2005日志文件损坏的恢复方法

标签: sql server数据库database服务器user
2252人阅读 评论(1) 收藏 举报
分类:

当SQL Server 2005数据库的日志文件损坏,而数据文件完好的时候,数据库出现质疑状态,怎么恢复呢?

下面就讲一下具体的过程:


1.首先停止服务器: NET STOP MSSQLSERVER

2.把日志文件挪走

3.开启服务器:         NET START MSSQLSERVER

4.修改数据库为紧急模式,并修改数据库为单用户模式

alter database 数据库名 set emergency

go

alter database 数据库名 set single_user

go

5.开始修复

dbcc checkdb(数据库名,REPAIR_ALLOW_DATA_LOSS)

go

dbcc checkdb(数据库,REPAIR_REBUILD)

go

dbcc checkdb(数据库)

go

6.修改数据库为多用户模式

alter database 数据库名 set multi_user


至此数据库恢复正常状态。

下面对修复时设置和一些修复选项做一下介绍:

1.在使用:REPAIR_ALLOW_DATA_LOSS  、REPAIR_REBUILD选项是,数据库必须处于单用户模式,这就是进行上述第4点的原因。

2.REPAIR_ALLOW_DATA_LOS:尝试修复所有错误,但是有可能会有一些数据丢失。

3.REAPIR_REBUILD:执行次要的、快速修复(修复非聚集索引的额外键),耗时的修复(重建索引)。

4.具体的选项说明可以参考:http://msdn.microsoft.com/zh-cn/library/ms176064(v=SQL.90).aspx,写得很详细。


下面是一个具体的例子:

sql查询出问题?
http://bbs.csdn.net/topics/390658107?page=1#post-396242501
1.
数据库是sql2000,有张表数据60多个字段,数据有250万条左右,这几天已通过sql查询分析器来查询就出问题了。查数据少点好像是可以的。
报错是:
服务器: 消息 7987,级别 22,状态 3,行 1
在数据库 'A-bus' 中检测到一个可能的数据库一致性问题。应该对数据库 'A-bus' 运行 DBCC CHECKDB 和 DBCC CHECKCATALOG。

连接中断


我看到网上的方法做
alter database [A-bus] set single_user
 
dbcc checkdb('A-bus',repair_rebuild)
 
alter database [A-bus] set multi_user


但运行了30多分钟了还没有反应。
还有我把A-bus这个数据库里的一张表数据导出到时大概导到240万条时就不动了,一直是这个界面。那可怎么办啊?我把那张表里的某个字段的数据类型从nvarchar 32 改成varchar 10也不行,有提示:
- 无法修改表。  
ODBC 错误: [Microsoft][ODBC SQL Server Driver][SQL Server]SqlDumpExceptionHandler: 进程 51 发生了严重的异常 c0000005 EXCEPTION_ACCESS_VIOLATION。SQL Server 将终止该进程。


[Microsoft][ODBC SQL Server Driver][SQL Server] 
[Microsoft][ODBC SQL Server Driver][SQL Server]Location:logrec.cpp:501
Expression: FALSE
SPID:  51
Process ID: 2812
Description: Invalid switch value


2.
我用dts和bcp导数据都少了4万多条数据,初步分析少了最近一个多月的数据。
但在错误表里精确查询最近的数据是有的,现在怎么把这个4万多条数据导出来。
还有我用dbcc checkdb('A-bus') WITH PHYSICAL_ONLY执行后有报错如下:


服务器: 消息 8928,级别 16,状态 1,行 1
对象 ID 2057058364,索引 ID 0: 未能处理页 (1:346127)。详细信息请参阅其它错误。
服务器: 消息 8944,级别 16,状态 1,行 1
表错误: 对象 ID 2057058364,索引 ID 0,页 (1:346127),行 0。
测试(columnOffsets->offTbl [varColumnNumber] <= (nextRec - pRec))失败。
值为 517 和 501。
服务器: 消息 8928,级别 16,状态 1,行 1
对象 ID 2057058364,索引 ID 0: 未能处理页 (1:346128)。详细信息请参阅其它错误。
服务器: 消息 8939,级别 16,状态 1,行 1
表错误: 对象 ID 2057058364,索引 ID 0,页 (1:346128)。测试(*(((int*) &m_reservedB) + i) == 0)失败。值为 1 和 108。
'A-bus' 的 DBCC 结果。
对象 'bus_info' 有 0 行,这些行位于 0 页中。
CHECKDB 发现了 0 个分配错误和 4 个一致性错误(在表 'bus_info' 中,该表的对象 ID 为 2057058364)。
CHECKDB 发现了 0 个分配错误和 4 个一致性错误(在数据库 'A-bus' 中)。
repair_allow_data_loss 是最低的修复级别(对于由 DBCC CHECKDB (A-bus ) 发现的错误而言)。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。


3.通过repair_allow_data_loss选项修复

我修复好了。
你指的影响是什么?
修复好了这张表还能继续用吗?
要经常用用dbcc checkdb('数据库名')来检测吗?这样检测会对数据有影响吗?

数据的确有丢失。大概有20多条记录。

回复:
影响就是会有少量的数据都是,“修复允许数据丢失”,应该是可以继续用的,你select一下试试,
不过最好是重新导出一份数据。
还有你说的对,确实得经常的dbcc checkdb一下,来检测数据的,
不过这个操作最好是在晚上进行,否则会很慢,如果是晚上 可以加上 with tablock,
那么速度可以提升好几倍。

0
0
查看评论

Oracle系统紧急故障处理(数据文件、日志文件以及表空间损坏的处理)

确实很好,已经用到了。 Oracle系统紧急故障处理(数据文件、日志文件以及表空间损坏的处理) Oracle物理结构故障的处理方法: Oracle物理结构故障是指构成数据库的各个物理文件损坏而导致的各种数据库故障。这些故障可能是由于硬件故障造成的,也可能是人为误操作而引起。所以我们首先要判断问题的起...
  • BrotherDong90
  • BrotherDong90
  • 2015-09-14 20:44
  • 1782

Sql2005以上重建事务日志文件

有时候我们手头上的数据库可能只剩下了mdf文件,而日志文件丢失了或者损坏了, 那么你可以尝试使用以下方法重建事务日志,注意sql 2Q不是这个语句 USE master; GO CREATE DATABASE nuke ON (FILENAME = 'H:\Mdf-BackUp\...
  • jqrsdsy
  • jqrsdsy
  • 2012-02-23 14:06
  • 1562

Sql server 2005日志文件太大,使其减小的方法

Sql server 2005日志文件太大,使其减小的方法   Sqlserver2005日志文件太大,使其减小的方法:  运行下面的三行 dbName为数据库名:  backup log dbNamewith NO_LOG  ...
  • kingmax54212008
  • kingmax54212008
  • 2013-04-12 16:52
  • 10722

SQL Server2005 日志工作模式

  博客首页 注册 建议与交流 排行榜 加入友情链接 推荐 投诉 搜索: 帮助 <!--navHover = function() {var lis = document.get...
  • bigstoneasd
  • bigstoneasd
  • 2008-01-31 13:43
  • 4196

SQL Server 2005日志文件损坏的恢复方法

当SQL Server 2005数据库的日志文件损坏,而数据文件完好的时候,数据库出现质疑状态,怎么恢复呢? 下面就讲一下具体的过程: 1.首先停止服务器: NET STOP MSSQLSERVER 2.把日志文件挪走 3.开启服务器:         N...
  • yupeigu
  • yupeigu
  • 2011-08-08 15:34
  • 2252

SQLserver2005 数据库无日志文件恢复方法

SQLserver 2005数据库日志文件记录了所有对数据库的操作更新信息及数据,是十分重要的文件,每个数据库都有一个对应的日志文件,如果因特殊情况导致了数据库日志文件的损坏,数据库的数据文件是无法进行附加和启动的。本文针对SQLserver 2005数据库日志文件损坏或丢失情况下如何恢复数据库进行...
  • jlclyx
  • jlclyx
  • 2010-06-03 09:38
  • 885

查看sql server 2005安装日志文件和手动启动sql server

<br />SQL2005的安装问题汇总<br />SQL2005 分五个版本,如下所列,<br />  1.Enterprise(企业版), <br />       2.Developme...
  • xkgg
  • xkgg
  • 2010-08-10 15:35
  • 5281

SQL Server 2005无日志文件附加数据库

http://www.cnblogs.com/ATree/archive/2010/05/16/Sqlserver2005-mdf-ldf.html 日志文件超级大,在重装系统的时候,为了省事,就没有备份日志文件,而且是没有分离就把日志文件给删掉了(下次一定要记得先分离再删日志文件...
  • hcwzq
  • hcwzq
  • 2012-07-12 10:13
  • 712

sql server 2005日志文件过大问题解决后分析--针对发布订阅产生的日志问题

机房在四月份改造中对数据库的软硬件进行了升级,具体情况是:原先旧有的数据库是采用主备两台1u的单机,在windows 2000的系统下分别安装好sql server 2000后,在主数据库上做一天一次的完整备份和每隔两小时的差异备份,在完整备份的同时进行发布;
  • smeyou
  • smeyou
  • 2011-07-05 13:44
  • 2213

【日记】SQL SERVER2005 文件大小限制

【问题描述】:    无法为数据库 'smupdb2' 中的对象'dbo.SMBatchSend'.'IX_SMBatchSend_SequenceNumber' 分配空间,因为 'PRIMARY'文件组已满。...
  • dayong501
  • dayong501
  • 2012-12-15 14:32
  • 459
    个人资料
    • 访问:526302次
    • 积分:9035
    • 等级:
    • 排名:第2474名
    • 原创:362篇
    • 转载:14篇
    • 译文:1篇
    • 评论:137条
    博客专栏
    最新评论