2022年SQL数据库修复总汇 .pdf
《2022年SQL数据库修复总汇 .pdf》由会员分享,可在线阅读,更多相关《2022年SQL数据库修复总汇 .pdf(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、出错状态:现象 1:数据库后面有“置疑”字样,查看系统事务日记出现以下错误:错误 1-错误:823,严重度:24,状态:2 I/O error 23(数据错误 (循环冗余检查)。)detected during read at offset 捷作 2008datatest_Data.MDF.错误 2-错误:3313,严重度:21,状态:2 恢复数据库 的日志中记录的操作时出错。出错位置在日志记录 ID(274:377:2)。错误 3-错误:3313,严重度:21,状态:2 Error while redoing logged operation in database test.Error a
2、t log record ID(274:377:2).数据库可以分离,但分离后无法附加,附加时出现“823”号错误。-微软公司 SQL联机从书解释:错误 823 严重级别 24 消息正文在文件%4!的偏移量%3!处的%2!过程中,检测到 I/O 错误%1!。解释Microsoft?SQL Server?在对某设备进行读或写请求时遇到 I/O 错误。该错误通常表明磁盘问题。但是,错误日志中在错误 823 之前记录的其它核心消息应指出涉及了哪个设备。对策检查该设备的可访问性和状态。如果可能,执行硬件诊断并纠正问题。从最新的数据库备份还原损坏的文件。从数据库备份中还原应始终是修复已损坏数据库的首选方
3、法。如果没有备份或者检测到的错误是孤立的,则 DBCC CHECKDB 的修复功能可能很有用。然而,比起从备份中还原损坏的文件,可能使用 DBCC CHECKDB 消耗的时间更多,且可能无法恢复全部数据。注意?如果使用修复子句运行 DBCC CHECKDB 时,问题没有得到纠正,或者不知道该过程将如何影响数据,请与主要的支持提供者联系。出错原因:名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 20 页 -通常这个问题是由于硬盘空间不够/硬盘读写错误/忽然断电(停电/死机),SQL系统异常。1.日志文件被破坏 823 错误-日志文件被破坏的数据库文件,通过如下方法附加上去后,数据库
4、里所有的表都不能访问,提示错误832,请问要如何解决?use master go sp_configure allow updates,1 go reconfigure with override go/*注意输正确,如果输入后执行此语句,并且下面显示DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。已将配置选项 allow updates 从 0 改为 1。请运行 RECONFIGURE 语句以安装。说明执行正确,如果不显示以上信息,请检查是否有输错!此语句是的作用是:设置数据库允许直接操作系统表。*/update sysdatabases set status=-32
5、768 where dbid=DB_ID(icyqshsf)/*设置数据库为紧急修复模式。*/go dbcc rebuild_log(icyqshsf,e:Program FilesMicrosoft SQL ServerMSSQLDataicyqshsf_log.ldf)/*重新数据库日志(ldf)文件。下面显示:警告:数据库 test 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。*/go dbcc checkdb(icyqshsf)名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 2
6、0 页 -/*现在检查有没有错误,再输入语法下面显示CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 tiger 中)。那说明第 6 步就建立成功没问题了,下面就可以把SQL恢复模式了*/go sp_dboption icyqshsf,dbo use only,false go sp_configure allow updates,0 go reconfigure with override go-2.附加数据库文件时,提示 823 错误-EXEC sp_configure allow updates,1 RECONFIGURE WITH OVERRIDE/*打开修改系统表
7、的开关 */update sysdatabases set status=32768 where name=数据库名 DBCC REBUILD_LOG(数据库名,E:dzzdatabase dzz1204_Log.LDF)update sysdatabases set status=0 where name=数据库名 restore database 数据库名 WITH RECOVERY EXEC sp_configure allow updates,0 RECONFIGURE WITH OVERRIDE/*关闭打开修改系统表的开关 */3 因为停电等原因造成MSSQL 数据库,提示 823错
8、误-USE MASTER GO sp_dboption databaseName,single user,true Go DBCC CHECKDB(databaseName,REPAIR_REBUILD)Go USE databaseName go exec sp_msforeachtable DBCC CHECKTABLE(?,REPAIR_REBUILD)go sp_dboption databaseName,single user,false Go 名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 20 页 -如果还不行,可以采用允许丢失数据的方式修复,如下:USE MAST
9、ER GO sp_dboption databaseName,single user,true Go DBCC CHECKDB(databaseName,REPAIR_ALLOW_DATA_LOSS)Go USE databaseName go exec sp_msforeachtable DBCC CHECKTABLE(?,REPAIR_REBUILD)go sp_dboption databaseName,single user,false Go=修复方法恢复语句:-drop database wgy-create database wgy-RESTORE FILELISTONLY fro
10、m disk=F:data1218wgy.db ALTER DATABASE wgy SET OFFLINE WITH ROLLBACK IMMEDIATE restore database wgy from disk=F:data1218wgy.db with replace,MOVE Syb_Data TO D:DataNPDFDN.mdf,MOVE Syb_Log TO D:DataNPDFDN.ldf ALTER DATABASE wgy SET ONLINE WITH ROLLBACK IMMEDIATE 方法一:1.新建一个同名的数据库2.再停掉 sql server 3.用 md
11、f 和 ldf数据库的文件覆盖掉这个新建的同名数据库4.再重启 sql server 5.此时打开企业管理器时新建的同名数据库会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)USE MASTER GO SP_CONFIGURE ALLOW UpdateS,1 RECONFIGURE WITH OVERRIDE GO 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 20 页 -Update SYSDATABASES SET STATUS=32768 Where NAME=aaa Go sp_dboption aaa,single user,true Go DBCC CH
12、ECKDB(aaa)Go update sysdatabases set status=28 where name=aaa Go sp_configure allow updates,0 reconfigure with override Go sp_dboption aaa,single user,true Go 6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用数据库的脚本创建一个新的数据库,并将数据导进去就行了.方法二:1.新建一个同名的数据库2.再停掉 sql server 3.用 mdf 和 ldf数据库的文件覆盖掉这个新建的同名数据库4.再重启
13、 sql server 5.此时打开企业管理器时新建的同名数据库会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)USE MASTER GO SP_CONFIGURE ALLOW UpdateS,1 RECONFIGURE WITH OVERRIDE GO Update SYSDATABASES SET STATUS=32768 Where NAME=aaa Go sp_dboption aaa,single user,true Go DBCC REBUILD_LOG(aaa,C:Program FilesMicrosoft SQL ServerMSSQLDataaaa_Log2.L
14、DF)Go update sysdatabases set status=0 where name=aaa Go restore database aaa WITH RECOVERY -如果表有错的话用 DBCC CHECKTABLE来进行修复go DBCC CHECKDB(aaa)名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 20 页 -Go update sysdatabases set status=28 where name=aaa Go sp_configure allow updates,0 reconfigure with override Go sp_dbopt
15、ion aaa,single user,true Go 6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用数据库的脚本创建一个新的数据库,并将数据导进去就行了.方法三:.非置疑数据库修复技术:USE MASTER GO sp_dboption aaa,single user,true Go-无损修复DBCC CHECKDB(aaa,REPAIR_REBUILD)-有损修复-DBCC CHECKDB(ke_2008,repair_allow_data_loss)WITH TABLOCK-如果表有错的话用 DBCC CHECKTABLE来进行修复Go sp_d
16、boption aaa,single user,false Go 方法四:/*-重置置疑状态系统方法:如果 sql server 因为磁盘驱动器不再有可用空间,而不能完成数据库的恢复,那么 microsoft?sql server?2000 会返回错误 1105 并且将 sysdatabases 中的 status 列设为置疑。按下面的步骤解决这个问题:执行 sp_resetstatus。语法为:sp_resetstatus aaa sp_resetstatus 数据库名 用 alter database 向数据库添加一个数据文件或日志文件。停止并重新启动 sql server。名师资料总结-
17、精品资料欢迎下载-名师精心整理-第 6 页,共 20 页 -用新的数据文件或日志文件所提供的额外空间,sql server 应该能完成数据库的恢复。释放磁盘空间并且重新运行恢复操作。sp_resetstatus 关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。-*/方法五:-手工重置置疑状态use master go sp_configure allow updates,1 reconfigure with override go declare dbname varchar(30)set dbname=lqgs if trancount 0 print 正在进行事务处理,操作不能进
18、行 else if suser_id()!=1 print 你不是系统管理员(sa),不能进行此操作 else if not exists(select 1 from master.sysdatabases where name=dbname)print 你要操作的数据库不存在 else if not exists(select 1 from master.sysdatabases where name=dbname and status&256=256)print 你的数据库没有被置疑 else begin begin tran update master.sysdatabases set
19、status=status 256 where name=dbname if error!=0 or rowcount!=1 rollback tran else begin commit tran print 操作成功,请重新启动 SQL end end go sp_configure allow updates,1 reconfigure with override go sp_resetstatus lqgs 方法六:名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 20 页 -重置置疑状态如果 SQL Server 因为磁盘驱动器不再有可用空间,而不能完成数据库的恢复,那么
20、Microsoft?SQL Server?2000 会返回错误 1105 并且将 sysdatabases 中的status 列设为置疑。按下面的步骤解决这个问题:1.执行 sp_resetstatus。2.用 Alter DATABASE 向数据库添加一个数据文件或日志文件。3.停止并重新启动 SQL Server。用新的数据文件或日志文件所提供的额外空间,SQL Server 应该能完成数据库的恢复。4.释放磁盘空间并且重新运行恢复操作。sp_resetstatus 关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。注意 只有在您的主要支持提供者指导下或有疑难解答建议的做法时,才可
21、以使用sp_resetstatus。否则,可能会损坏数据库。由于该过程修改了系统表,系统管理员必须在创建这个过程前,启用系统表更新。要启用更新,使用下面的过程:USE master GO sp_configure allow updates,1 GO RECONFIGURE WITH OVERRIDE GO 过程创建后,立即禁用系统表更新:sp_configure allow updates,0 GO RECONFIGURE WITH OVERRIDE GO 只有系统管理员才能执行 sp_resetstatus。执行该过程后,立即关闭 SQL Server。语法为:sp_resetstatus
22、 aaa 下面的例子将关闭 PRODUCTION 数据库的置疑标志。sp_resetstatus PRODUCTION 下面是结果集:Database PRODUCTION status reset!WARNING:You must reboot SQL Server prior to accessing this database!sp_resetstatus 存储过程代码下面是 sp_resetstatus 存储过程的代码:IF EXISTS(Select*from sysobjects where name=sp_resetstatus)名师资料总结-精品资料欢迎下载-名师精心整理-第
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年SQL数据库修复总汇 2022 SQL 数据库 修复 总汇
限制150内