网站开发主要框架 后端,php语言网站开发公司北京,网站建设飠金手指科杰十五,优化防控工作的二十条措施异常关机后#xff0c;金蝶帐套突然无法访问#xff0c;发现数据库置疑#xff0c;使用此方案解决#xff1a;注意#xff1a;在做任何修复操作之前#xff0c;请务必备份.mdf/.ndf以及.ldf文件。一般情况下这样可以解决#xff1a;1、将数据库设置为应急状态ALTER DATA…异常关机后金蝶帐套突然无法访问发现数据库置疑使用此方案解决注意在做任何修复操作之前请务必备份.mdf/.ndf以及.ldf文件。一般情况下这样可以解决1、将数据库设置为应急状态ALTER DATABASE AIS20150723104254 SET emergency2、将数据库设置为单用户模式ALTER DATABASE AIS20150723104254 SET SINGLE_USER3、对数据库进行检查修复DBCC CheckDB (AIS20150723104254, REPAIR_ALLOW_DATA_LOSS)REPAIR_ALLOW_DATA_LOSS代表若此错误不能修复时系统将直接删除相关数据。DBCC checkdb (AIS20150723104254, REPAIR_REBUILD)尝试直接修复数据库错误使用上面两个语句进行数据库检查修复如果返回结果中没有了红色的提示文字说明修复成功此数据库执行CHECKDB的过程中发现一些表的索引被破坏于是针对具体的表进行重建索引的操作DBCC DBREINDEX(表名)完成后可以运行dbcc checkdb(db_name)检查数据库的完整性.4、最后取消单用户模式即可。exec sp_dboption AIS20150723104254, Nsingle, NfalseALTER DATABASE AIS20151130094910 SET MULTI_USER日志文件损坏或丢失时可以尝试此方法方法一先停止数据库服务备份数据文件(MDF/LDF)A 我们使用默认方式建立一个供恢复使用的数据库(如AIS20131106110002)。可以在SSQL Server Management Studio里面建立。B 停掉数据库服务器。C 将刚才生成的数据库的日志文件AIS20131106110002_log.ldf删除用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件AIS20131106110002_data.mdf。D 启动数据库服务器。此时会看到数据库AIS20131106110002的状态为“置疑”。这时候不能对此数据库进行任何操作。E 设置数据库允许直接操作系统表。此操作可以在SQL Server Management Studio里面选择数据库服务器按右键选择“属性”在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。use mastergosp_configure allow updates,1goreconfigure with overridegoF 设置AIS20131106110002为紧急修复模式alter database AIS20131106110002 set emergency此时可以在SQL Server Management Studio里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表但是仅仅有系统表G 下面执行真正的恢复操作重建数据库日志文件dbcc rebuild_log( AIS20131106110002 , D:\MSSQL2008\Data\AIS20131106110002_log.ldf )SQL 2012版本以后版本时alter database AIS20131106110002 Rebuild Log on (nameAIS20131106110002_log,filenameD:\MSSQL2008\AIS20131106110002_log.ldf)执行过程中如果遇到下列提示信息服务器: 消息 5030级别 16状态 1行 1未能排它地锁定数据库以执行该操作。DBCC 执行完毕。如果 DBCC 输出了错误信息请与系统管理员联系。打开单用户模式即可ALTER DATABASE AIS20131106110002 SET SINGLE_USER或alter database AIS20131106110002 set SINGLE_USER with ROLLBACK IMMEDIATE警告: 数据库 AIS20131106110002 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。DBCC 执行完毕。如果 DBCC 输出了错误信息请与系统管理员联系。此时可以访问数据库里面的用户表了。H 验证数据库一致性(可省略)dbcc checkdb( AIS20131106110002 )一般执行结果如下CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 AIS20131106110002 中)。DBCC 执行完毕。如果 DBCC 输出了错误信息请与系统管理员联系。如果发现出问题可使用下面方法尝试修复一、dbcc checkdb(AIS20131106110002,REPAIR_ALLOW_DATA_LOSS)dbcc checkdb(AIS20131106110002,REPAIR_REBUILD)二、使用Repair_Allow_Data_Loss选项修复数据库。优点 可能可以恢复尽量多的数据缺点a) 不一定能够将全部错误修复还有可能越修越多。同时需要大量时间需要经过多次执行修复命令十几次甚至数十次修复时间不能预估b) 就算我们将所有错误修复我们也不能保证数据在应用程序逻辑这一层次上的数据正确性您需要找您的应用程序提供商来检查数据在程序逻辑层次是否正确。dbcc checkdb (‘’, REPAIR_ALLOW_DATA_LOSS) go—此命令可能需要运行多次才能完全修复。三、通过BCPDTSselect into等方式将好的表或者表中好的数据导出来。建议使用BCP的方法这样可以最大限度的回复数据BCP会停在出错的纪录上但是前面的数据就能成功导出使用DTS或Select into的话, 我们很难判断最大限度能导出的记录数优点导出来的数据保证在应用程序逻辑这一层次的正确性缺点不会修复数据库中存在的错误丢失的数据量会比较大取决于第7步的运行结果。二和三摘自I 设置数据库为正常状态exec sp_dboption AIS20131106110002, Nsingle, NfalseALTER DATABASE AIS20131106110002 SET MULTI_USER如果没有出错那么恭喜现在就可以正常的使用恢复后的数据库啦。J 最后一步我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接操作系统表是一件比较危险的事情。当然我们可以在SQL Server Management Studio里面恢复也可以使用如下语句完成use mastergosp_configure allow updates,0goreconfigure with overridego注意SQL2012后系统无sp_dboption这个存储过程可以用附件文本的方式在MASTER中创建此存储过程即可。方法二1、把问题数据库文件备份到其它目录停掉SQLSERVER服务,把服务器上出问题的数据库, 假设名称为 ErrorDB的数据库文件及日志文件备份复制到其他目录,然后直接将其删除,把其数据库文件及日志文件也删除2、新建同名数据库启动SQLSERVER服务,新建同名数据库ErrorDB,文件目录和文件名和原来一致3、用备份的数据库文件替换新的数据库文件停掉SQLSERVER服务,把备份的数据库文件替换新的数据库文件(只替换数据库文件不替换日志文件)启动SQLSERVER服务,打开数据库这时数据库应该是不能访问的-------------------设置应急模式、单用户模式、检查修复数据取消单用户模式----------------------4、将数据库设置为应急状态alter database ErrorDB set emergency执行后为了保险起见重新停止、开启的SQLSERVER服务再打开数据库已经可以看到里面的内容了如表视图存储过程等数据库名称后有紧急标志能看到数据库结构但无法进行备份等操作5、将数据库设置为单用户模式ALTER DATABASE ErrorDB SET SINGLE_USER6、对数据库进行检查修复dbcc checkdb(ErrorDB,REPAIR_ALLOW_DATA_LOSS)dbcc checkdb(ErrorDB,REPAIR_REBUILD)操作后仍然停止启动SQLSERVER服务(不确定是否需要我只是为了想无干扰查看执行后的数据库状况)7、取消单用户模式即可exec sp_dboption ErrorDB, Nsingle, NfalseALTER DATABASE ErrorDB SET MULTI_USER