关键词不能为空

当前您在: 主页 > 英语 >

SQL置疑REPAIR_REBUILD修复

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-07 09:59
tags:

-

2021年2月7日发(作者:bucket是什么意思)






寒山


sql


数据库修复中心



/






出错状态


:







现象


1























< br>系

















1---- -----------------------------------------


错误


: 823


,严重度


: 24


,状态


: 2







I/O


error


23(







(



< br>冗





)



)


detected


during


read


at


offset


0x00


in


file


'D:


< br>作


2008datatest_'.




2--------------------------------- ------------


错误


: 3313


,严重度


: 21


,状态


: 2







恢复数据库



''


的日志中记录的操作时出错。出错位置在日志记录



ID (274:377:2)









错误


3------------- --------------------------------


错误


: 3313


,严重度


: 21


,状态


: 2







Error while redoing logged operation in database 'test'. Error at log record ID (274:377:2).







数据库可以分离,但分离后无法附 加,附加时出现“


823


”号错误。








--------------------------- -------------------------------------------------- --------------------------------


< p>




SQL

< p>
联机从书解释


:







错误



823


严重级别



24







消息正文



在文件



''%4!''


的偏移量



%3!


处的



%2!


过程中,


检测到



I/O


错误



%1!












Microsoft?


SQL


Server?


在对某设备进行读或写请求时遇到



I/O


错误。该错误通常表明


磁盘问 题。


但是,


错误日志中在错误



823


之前记录的其它核心消息应指出涉及了哪个设备。



对策








检查该 设备的可访问性和状态。如果可能,执行硬件诊断并纠正问题。



从最新的数据


库备份还原损坏的文件。从数据库备份中还原应始终是修复已损坏数据库 的首选方法。








如果没 有备份或者检测到的错误是孤立的,




DBCC CHECKDB


的修复功能可能很有用。


然而,比起从备份中还原损坏的文件,可能使用



DBCC


CHECKDB


消耗的时 间更多,且可能


无法恢复全部数据。








注意


??


如果使用修复子句运行

< p>


DBCC


CHECKDB

< br>时,问题没有得到纠正,或者不知道该


过程将如何影响数据,

请与主要的支持提供者联系。



出错原因

< br>:


通常这个问题是由于硬盘空


间不够

/


硬盘读写错误


/


忽然断电


(


停电


/


死机


),SQL


系统异常。








1.


日志文件被破坏


823


错误



----------------------







日志文件被破坏的数据库文件,


通过如下方法附加上去后,


数据库里所有的表都不能访


问,提示错误


832


,请问要如何解决??



use master go







sp_configure 'allow updates',1 go







reconfigure with override go







/*


注意输正确,如果输入后执行此 语句,并且下面显示








DBCC


执行完毕。如果



DBCC


输出了错误信息,请与系统管理员联系。



已将配置选项



'allow updates'




0


改为



1


。请运行



RECONFIGURE


语句以安装。








说明执行正确,如果不显示以上信息,请检查是否有输错!


< /p>


此语句是的作用是:设置


数据库允许直接操作系统表。

< p>







*/







update sysdatabases set


status=-32768 where dbid=DB_ID('icyqshsf') /*


设置数据库为紧急


修复模式。


*/ go







dbcc


rebuild_log('icyqshsf','e:Program


FilesMicrosoft


ServerMSSQLDataicyqshsf_') /*


重新数据库日志


(ldf)


文件。








下面显示


:



SQL






警告


:


数据库



'test'


的日志已重建。


已失去事务的一致性。


应运行



DBCC CHECKDB


以验


证物理一致性。








将必须重置数据库选项,并且可能需要删除多余的日志文件。


*/ go







dbcc checkdb('icyqshsf')/*


现在 检查有没有错误,再输入语法








下面显示








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 /*


打开修改系统表的


开关



*/







update sysdatabases set status = 32768 where name = '


数据库名


' DBCC REBUILD_LOG ('



据库名


', 'E: dzzdatabase dzz1204_' ) update sysdatabases set status = 0 where name = '



据库名


' restore database


数据库名



WITH RECOVERY







EXEC sp_configure 'allow


updates',0 RECONFIGURE WITH OVERRIDE /*


关闭打开修改系统


表的开关



*/







3


因为停 电等原因造成


MSSQL


数据库


,


提示


823


错误



---------------------- 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


如果还不行,可以采用允许丢失数据


的方式修复,如下:



USE MASTER 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 FILELISTONL


Y from disk='F:' ALTER DATABASE wgy SET OFFLINE


WITH


ROLLBACK


IMMEDIATE


restore


database


wgy


from


disk='F:'


with


replace,







MOVE 'Syb_Data' TO 'D:', MOVE 'Syb_Log' TO 'D:'







ALTER DATABASE wgy SET ONLINE WITH ROLLBACK IMMEDIATE


方法一:








1.


新建一个同名的数据库



2.


再停掉


sql server







3.



md f



ldf


数据库的文件覆盖掉这个新 建的同名数据库



4.


再重启


sql server







5.


此时打开企业管理器时新建的同 名数据库会出现置疑,先不管,执行下面的语句(注


意修改其中的数据库名


)







USE MASTER GO







SP_CONFIGURE


'ALLOW


UpdateS',1


RECONFIGURE


WITH


OVERRIDE


GOUpdate


SYSDATABASES SET STATUS =32768 Where NAME='aaa' Go







sp_dboption 'aaa', 'single user', 'true' Go







DBCC CHECKDB('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.



md f



ldf


数据库的文件覆盖掉这个新 建的同名数据库



4.


再重启


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',


ServerMSSQLDataaaa_' )



'C:Program


FilesMicrosoft


SQL






Go







update sysdatabases set status = 0 where name = 'aaa' Go







restore database aaa WITH RECOVERY







--


如果表有错的话用


DBCC CHECKTABLE


来进行修复



go







DBCC CHECKDB('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.


完成 后一般就可以访问数据库中的数据了


,


这时

,


数据库本身一般还要问题


,


解决 办法是


,


利用








数据库的脚本创建一个新的数据库


,


并将数据导进去就行了


.


方法三:








.


非置疑数据库修复技术


:







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_dboption 'aaa', 'single user', 'false' Go







方法四:


/*--


重置置疑状态

< p>


系统方法


:







如果



sql


server


因为磁盘驱动器不再有可用空间,而不能完成数据库的恢复,



那么



microsoft? sql server? 2000


会返回错误



1105







并且将



sysdatabases


中的



status


列设为置疑。按下面的步骤解决这个问题:



执行



sp_resetstatus




语法为:








sp_resetstatus 'aaa' sp_resetstatus '


数据库名


'









alter database


向数据库添加一个数据文件或日志文件。



停止并重新启动



sql serve r



用新的数据文件或日志文件所提供的额外空间,

< p>
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 '


正在进行事务处理


,< /p>


操作不能进行


' else if suser_id()!=1







print


'









(s a),









'


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 status = status ^ 256 where name = @dbname if


@@error != 0 or @@rowcount != 1 rollback tran else begin







commit tran







print '


操作成功


,

< p>
请重新启动


SQL' end end go







sp_configure 'allow updates', 1 reconfigure with override go







sp_resetstatus lqgs


方法六:重置置疑状态








如果



SQL Server


因为磁盘驱动器不再有可用空间,而不能完成数据库的恢复,那么








Microsoft? SQL Server? 2000


会返回错误



1105


并且将



sysdatabases


中的



status







列设为置疑。按下面的步骤解决这个问题:



1..


执行



sp_resetstatus









2..




Alter


DATABASE


向数据库添加一个数据文件或日志文件。



3..


停止并重新启动



SQL Server









用新的数据文件或日志文件所提供的额外空间,


SQL Server


应该能完成数据库的恢



复。








4..


释放磁盘空间并且重新运行恢复操作。








sp_resetstatus


关 闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。








注意



只有 在您的主要支持提供者指导下或有疑难解答建议的做法时,才可以使用








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 aaa







下面的例子将关闭



PRODUCTION


数据库的置疑标志。



sp_resetstatus


PRODUCTION



面是结果集:








Database 'PRODUCTION' status reset!







WARNING: You must reboot SQL


Server prior to accessing this


database! sp_resetstatus



储过程代码



-


-


-


-


-


-


-


-



本文更新与2021-02-07 09:59,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/607881.html

SQL置疑REPAIR_REBUILD修复的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文