sql数据库质疑的一般处理命令
SQL数据库置疑解决方案(原因分析、预防措施、修复方法)附图

SQL数据库置疑解决方案一、数据库置疑产生的原因1、SQL Server所在分区空间是否够?数据库文件大小是否达到最大文件限制?FAT32的格式只支持4G以内的文件。
2、数据库文件损坏或被非正常删除时出现这种情况。
3、病毒防火墙的扫描也会引起数据库置疑。
4、当SQL Server启动时,将会尝试获得对数据库文件的排他访问权,如果此时该文件被其他程序占用,或者遗失,数据库将会被标记为置疑。
5、电脑非法关机也会造成数据库置疑。
6、电脑磁盘有坏道有可能造成数据库置疑。
二、数据库置疑的预防1、数据库存放的盘符,空间是否够大,经常检查盘符的空间。
2、数据库存放的盘符的格式设置为NTFS格式。
3、进行病毒清除时,尽量把SQL服务停掉,再进行检查。
4、尽量减少非正常关机。
5、建议客户购买后备电源。
6、给客户实施软件之后一定要做好自动备份。
7、建议客户每隔一定时间手动备份一次。
三、数据库置疑的修复1、正常的备份、SQL数据库恢复方式正常方式下,我们要备份一个数据库,首先要先将该数据库从运行的数据服务器中断开,或者停掉整个数据库服务器,然后复制文件。
卸下数据库的命令:Sp_detach_db 数据库名连接数据库的命令:Sp_attach_db或者sp_attach_single_file_dbs_attach_db [@dbname =] ′dbname′, [@filename1 =] ′filename_n′[,...16]sp_attach_single_file_db [@dbname =] ′dbname′, [@physname =] ′physical_name′使用此方法可以正确恢复SQL Sever7.0和SQL Server 2000的数据库文件,要点是备份的时候一定要将mdf和ldf两个文件都备份下来,mdf文件是数据库数据文件,ldf是数据库日志文件。
例子:假设数据库为pdm,其数据文件为pdm_data.mdf,日志文件为pdm_log.ldf。
sql server 数据库质疑(挂起)修复步骤

数据库修复步骤
1.将已破坏的老数据库更名如Baddb_Data.Mdf ==>Baddb_Data.Md_ ,并在原来位置新建一同
名数据库如Baddb_Data.Mdf .
2. 停止SQL, 将新数据库更名(Baddb_Data.Mdf ==> Baddb_Data.Md2),
待修复老数据库更名为原先名称Baddb_Data.Md_ ==> Baddb_Data.Mdf
3.启动SQL , 并进入查询分析器中, 执行如下命令:
USE MASTER
sp_configure 'allow', 1
reconfigure with override
update sysdatabases set status = 32768 where name = 'Baddb'
4. 把LDF文件改名,再执行
DBCC REBUILD_LOG ('Baddb', 'E:\posdb\Baddb_Log.LDF' )
5. 恢复数据库紧急模式
update sysdatabases set status = 0 where name = 'Baddb'
6. 执行
restore database Baddb WITH RECOVERY
sp_configure 'allow', 0
reconfigure with override
7. 检查数据库看看有没有错误, 应该可以看到数据了
DBCC CHECKDB ('Baddb')
如以上还是不行,试把数据库设为紧急模式,再把数据导出到一个新的数据库(如有坏区)。
sql数据库质疑修复

Sql数据库质疑处理方法1.首先停止sql服务、将质疑的数据库文件复制到其他盘进行备份、备份完之后将质疑数据库删除掉然后启动sql服务重新安装建立一个新的数据库。
2.停止sql服务然后用备份出来的数据库后缀名为MDF的文件替换新的MDF文件。
且删除掉后缀名为LDF的文件3.启动sql服务4.执行下列语句:Use Mastergosp_configure 'allow updates', 1reconfigure with overridegobegin tranupdate sysdatabases set status = 32768 where name = '数据库名'--Verify one row is updated before committingcommit trango5.停止sql再重新启动sql服务,然后运行下列语句:use mastergoDBCC TRACEON(3604)DBCC REBUILD_LOG('数据库名称','D:\Program Files\Microsoft SQL Server\MSSQL\Data\数据库名称_log.ldf')--(注:在这里输入自己的数据库路径)Go6.停止sql然后重新启动sql服务,然后运行下列语句:use mastergoupdate sysdatabases set status = 8 where name = '数据库名称'gosp_configure 'allow updates', 0reconfigure with overridego7. 运行dbcc checkdb(db_name) 检查修复好的质疑数据库是否正常。
SQL2000数据库质疑语句

USE master
GO பைடு நூலகம்
sp_configure 'allow updates', 1
GO
RECONFIGURE WITH OVERRIDE
GO
--修改系统数据库为可以修改,只有这样数据库的系统表才能修改
--第二步
GO
--执行上述语句后,80%会返回如下的消息:
--警告: 数据库 ‘UFDATA_001_2003’ 的日志已重建。已失去事务的一
--致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库
--选项,并且可能需要删除多余的日志文件。
--此时该数据库的状态应该是处于DBO ONLY的状态.
reconfigure with override
update sysdatabases set status = 32768
where name = 'UFDATA_001_2005'
--将该数据库状态设置为紧急状态(32768)
--第三步
--停止数据服务,把原来的LDF文件改名(不能删除),然后再
--第四步(在master库中执行)
update sysdatabases set status = 4194316 where name = 'UFDATA_001_2005'
--修改为正常状态
--最后
--修改系统数据库状态为不可写:
sp_configure 'allow', 0
reconfigure with override
解决SQLServer 2008 数据库质疑

解决SQLServer2008数据库质疑(挂起)问题Step1.执行语句,改变数据库状态EXEC SP_RESETSTATUS'Your DBName'GOStep2:重置数据库状态之后,我们就应该对质疑的数据库执行DBCC CHECKDB命令,查看下为什么数据库会出现质疑状态.DBCC CHECKDB('Your DBName')WITH NO_INFOMSGS,ALL_ERRORMSGSGoStep3:找到原因之后,那么就好解决了.看报错信息中,已说明了PK中存在重复值.首先,将每个索引的脚本导出为sql文件.之后再将表中主键栏位里的duplicate的行删除掉Step4:现在最好再立即执行下DBCC CHECKDB命令确认下是否还有错误信息.之后确认没有,那么再将之前索引的脚本创建进去.Step5:在Index创建完毕之后,立即执行下DBCC CHECKDB命令确认下是否还有错误信息.确认无误,那么就需要立即对数据库执行一次完全备份作业.针对SQL2000挂起情况进行修复Step1:设置数据库为紧急模式Use Mastersp_configure'allow updates',1reconfigure with overrideGOUPDATE sysdatabases SET status=32768where name='TEST'GOStep2:停止数据库服务通过Windows服务或者SQLServer管理器.Step3:把原始数据库的数据文件DBNAME_DAT.MDF,DBNAME_LOG.LDF移走Step4:启动SQL Server服务Step5.重新建立一个同名的数据库TEST;USE masterGOCREATE DATABASE TESTON(NAME=DBNAME_DAT,FILENAME='C:',SIZE=10,FILEGROWTH=5)LOG ON(NAME='DBNAME_LOG',FILENAME='g:',SIZE=5MB,FILEGROWTH=5MB)GOStep6:设置数据库运行在单用户的模式:USE MASTERGOALTER DATABASE TEST SET SINGLE_USERGOStep7:停掉SQL服务Step8:把原来的数据文件再覆盖回来Step9:启动SQL Server服务Step10:设置数据库为紧急模式Use Mastersp_configure'allow updates',1reconfigure with overrideGOUPDATE sysdatabases SET status=32768where name='TEST'GOStep11:修复数据库错误DBCC CHECKDB('TEST',REPAIR_ALLOW_DATA_LOSS)Step12.恢复数据库为多用户模式USE MASTERGOALTER DATABASE TEST SET MULTI_USERGOStep13.恢复SQLSERVER原始的配置USE MATERGOUPDATE sysdatabases SET status=4194320where name='TEST'GOStep14:配置SQLSERVER不允许更新系统表USE MASTERGOsp_configure'allow updates',0reconfigure with overrideGOStep15:重新启动MSSQLSERVER服务,最好重新启动操作系统.Step16:备份数据库特殊情况:不知道为什么,质疑修复后,数据库恢复正常了。
SQL2000数据库置疑的恢复方法

1、将数据库设置为单用户迷失
sp_dboption '你的数据库名', 'single user', 'true'
2、修复表
DBCC CHECKTABLE('表名',repair_allow_data_loss)
3、取消单用户模式
sp_dboption '你的数据库名', 'single user', 'false'
二、重新启动SQL服务器 来自三、建立新数据库文件夹 如:newdat
四、复制空数据库到新建的数据库文件夹
五、在 sql 企业管理器中附加新数据库 如:newdat
六、用SQL的DTS工具将旧库数据全部导入新库
导入时注意:以pb打头的表不要选择导入
七、导入过程中,如发现某个表被损坏不能导入,可用下面的指令恢复后再导入
操作步骤:
一、打开查询分析器,修改被置疑的数据库为强制启动状态
选择 master 数据库,按以下指令顺序逐条执行
sp_configure 'allow updates',1
RECONFIGURE WITH OVERRIDE
update sysdatabases set status=-32768 Where name='被质疑的数据库名'
检查sql数据库是否损坏的语句

一、检查数据库完整性的重要性在数据库管理中,数据库的完整性是非常重要的。
如果数据库损坏或不完整,可能会导致数据丢失或系统崩溃。
定期检查数据库的完整性是保证数据安全和系统稳定性的关键步骤。
二、检查数据库完整性的方法1. 使用DBCC CHECKDB命令DBCC CHECKDB是SQL Server提供的一个用于检查数据库完整性的命令。
它可以检查数据库中所有对象的完整性,包括表、索引、视图等。
可以通过以下语句来运行DBCC CHECKDB命令:DBCC CHECKDB ('database_name');2. 使用DBCC CHECKTABLE命令DBCC CHECKTABLE命令可以用来检查数据库中特定表的完整性。
可以通过以下语句来运行DBCC CHECKTABLE命令:DBCC CHECKTABLE ('table_name');3. 使用DBCC CHECKFILEGROUP命令DBCC CHECKFILEGROUP命令可以用来检查文件组的完整性。
可以通过以下语句来运行DBCC CHECKFILEGROUP命令:DBCC CHECKFILEGROUP ('filegroup_name');4. 使用DBCC CHECKALLOC命令DBCC CHECKALLOC命令可以用来检查分配给数据库对象的存储空间的完整性。
可以通过以下语句来运行DBCC CHECKALLOC命令:DBCC CHECKALLOC;三、检查数据库完整性的注意事项1. 在进行完整性检查之前,应该备份数据库以防止任何意外发生。
2. 在生产环境中进行完整性检查时,应该避免对数据库进行写操作,以免影响正在运行的业务。
3. 对于大型数据库,完整性检查可能需要较长的时间,应该安排在系统负载较低的时段进行。
四、检查数据库完整性的建议1. 定期检查数据库完整性,例如每周或每月进行一次完整性检查。
sql2000中MSDB数据库置疑状态的解决方法

sql2000中MSDB数据库置疑状态的解决方法问题:我的SQL Server 2000的MSDB数据库,因为不正常关机,造成了置疑状态,请问采用什么方法能够弥补?解决方法一:你可以采用以下的代码进行修复:USE MASTERGOSP_CONFIGURE 'ALLOW UPDATES',1RECONFIGURE WITH OVERRIDEGOUPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='msdb'Gosp_dboption 'msdb', 'single user', 'true'GoDBCC CHECKDB('msdb')Goupdate sysdatabases set status =28 where name='msdb'Gosp_configure 'allow updates', 0reconfigure with overrideGosp_dboption 'msdb', 'single user', 'false'Go解决方法二:MSDB数据库解决过程难点:由于MSDB数据库不能删除,将其文件拷出来,再次附加数据库,但新的附加数据库不能叫MSDB,也就是不能同名,遇到了困难。
1:先停止整个数据库,将该数据库的文件msdbdata.mdf和msdblog.ldf拷贝粘贴出来到另一个目录下。
2:将以上的文件再拷贝到另一个目录下,也就是说复制两次。
3:选择数据库右击鼠标 --》所有任务--》附加数据库将复制出的一个备份文件附加上去,其中,数据库名称叫MSDB1,用户是SA或ADMINISTRATOR。
4:将MSDB1数据库备份,备份成一个文件,当时我的叫MSDB。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
寒山sql数据库修复中心/设置数据库允许直接操作系统表。
此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择"属性",在"服务器设置"页面中将"允许对系统目录直接修改"一项选中。
也可以使用如下语句来实现*/use ais09gosp_configure 'allow updates',1goreconfigure with overridegosp_dboption 'ais09','single user','true'go/*设置为紧急修复模式(操作数据库切记切换为master)1077936153/4194328(正常) -32768(只读\脱机\紧急模式) 32768(紧急模式)*//*select * from sysdatabases*/update sysdatabases set status=-32768 where dbid=DB_ID('ais09')go/*执行真正的恢复操作,重建数据库日志文件*/dbcc checkdb('ais09','REPAIR_REBUILD')/*REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD */gosp_dboption 'ais09','single user','false'go/*设置数据库为正常状态*/sp_dboption 'ais09','dbo use only','false'go/*最后一步,我们要将步骤E中设置的"允许对系统目录直接修改"一项恢复。
因为平时直接操作系统表是一件比较危险的事情*/sp_configure 'allow updates',0goreconfigure with overridego二种模式:use ais19exec sp_dboption ais19,'single user',truedbcc checkdb('ais19','repair_rebuild')exec sp_dboption ais19,'single user',false三种模式:1. DBCC CHECKDB重启服务器后,在没有进行任何操作的情况下,在SQL查询分析器中执行以下SQL进行数据库的修复,修复数据库存在的一致性错误与分配错误。
use masterdeclare @databasename varchar(255)set @databasename='需要修复的数据库实体的名称'exec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户状态dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)dbcc checkdb(@databasename,REPAIR_REBUILD)exec sp_dboption @databasename, N'single', N'false'--将目标数据库置为多用户状态然后执行DBCC CHECKDB('需要修复的数据库实体的名称') 检查数据库是否仍旧存在错误。
注意:修复后可能会造成部分数据的丢失。
2. DBCC CHECKTABLE如果DBCC CHECKDB 检查仍旧存在错误,可以使用DBCC CHECKTABLE来修复。
use 需要修复的数据库实体的名称declare @dbname varchar(255)set @dbname='需要修复的数据库实体的名称'exec sp_dboption @dbname,'single user','true'dbcc checktable('需要修复的数据表的名称',REPAIR_ALLOW_DATA_LOSS)dbcc checktable('需要修复的数据表的名称',REPAIR_REBUILD)------把' 需要修复的数据表的名称'更改为执行DBCC CHECKDB时报错的数据表的名称exec sp_dboption @dbname,'single user','false'3. 其他的一些常用的修复命令DBCC DBREINDEX 重建指定数据库中表的一个或多个索引用法:DBCC DBREINDEX (表名,'') 修复此表所有的索引。
===================================SQL SERVER数据库的检测及修复方法随着K/3产品的推广,要求客户服务人员对SQL SERVER数据库的了解也进一步提高。
在K/3的使用过程中,数据库文件被频繁地使用,由于某些原因,数据库有可能被损坏,本文将针对这种情况的数据库检测及修复方法做一简单讲解。
希望各位在实际工作过程中有新的发现时,及时给我们提供信息,以便做进一步的更新。
1.1 SQL SERVER数据库的检测SQL SERVER提供了数据库检测的命令,可用DBCC CHECKDB对数据库中各个对象的分配及结构的正确性进行检测,并可通过一参数控制,将所有的错误信息显示出来。
其语法如下:DBCC CHECKDB('database_name' [,NOINDEX | { REPAIR_ALLOW_DATA_LOSS| REPAIR_FAST| REPAIR_REBUILD}]) [WITH {ALL_ERRORMSGS | NO_INFOMSGS}]参数说明:'database_name'代表被检测的数据库实体名;NOINDEX指非系统表的非聚族索引不检测;REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST| REPAIR_REBUILD 指直接修复发现的错误,其中REPAIR_ALLOW_DATA_LOSS代表,若此错误不能修复时,系统将直接删除相关数据。
带此三个参数的任一个时,数据库必须处于单用户模式,可在Enterprise Manager中的数据库属性中设置;ALL_ERRORMSGS代表将检测到的错误信息全部显示出来,否则,对于每张表最多只显示200条错误信息;NO_INFOMSGS代表隐藏所有的信息及占用空间的报告。
经过检测,对于错误的对象,将以OBJECT ID的形式报告具体出错的信息,可根据OBJECT ID到系统表sysobjects中查找到相关的表,即NAME。
1.2 SQL SERVER问题数据库的修复经过数据库检测后,可针对出现的问题采取相应的措施进行处理。
如通过检测后,发现对象的物理存放存在问题,可用DBCC CHECKALLOC来进行修复:DBCC CHECKALLOC ('database_name' | REPAIR_REBUILD }] ) [WITH {ALL_ERRORMSGS | NO_INFOMSGS}]若是非系统对象的索引出错,则可用DBCC DBREINDEX进行修复:DBCC DBREINDEX ( [ 'database.owner.table_name' [, index_name [, fillfactor ] ] ] ) [WITH NO_INFOMSGS]以上两种情况,也可直接使用DBCC CHECKDB(‘db_name',repair_rebuild)来修复。
另外一种情况是在进行检测时,提示无法建立数据连接,此时表明,数据库已损坏。
对于这种情况,我们可采取如下措施来尝试修复。
首先,在SQL Enterprise中新建一数据库(如数据库名为test),建好数据库后,停止SQL Server Service Manager,并将客户数据库的MDF文件更名为test _data.mdf(即新建数据库的主文件名),然后用更名后的文件覆盖新建数据库同名文件,接着,启动SQL Server Service Manager。
对Master数据库将系统表设置为可更改状态Use MasterGosp_configure 'allow updates', 1reconfigure with overrideGo将数据库设为紧急状态:update sysdatabases set status = 32768 where database '停止并重新启动SQL Server Service Manager,并重建Log文件:DBCC TRACEON (3604)DBCC REBUILD_LOG(' test ','test _log_ldf')将数据库设置为单用户模式,然后进行检测:sp_dboption ' test ', 'single user', 'true'DBCC CHECKDB(' test ')Go此数据库执行CHECKDB的过程中发现一些表的索引被破坏,于是针对具体的表进行重建索引的操作:DBCC DBREINDEX(表名)如执行以上操作仍然不能解决,若索引破坏的表是临时表或不是关键表,则可从新建账套中引入,若是主表,则可能通过近期的备份来(部份)恢复。
若没有一个备份,则无法修复。
1.3 SQL Server数据库为什么易损坏呢?以下是微软提供的一些可能引起数据库损坏的原因及一些预防措施:操作问题,包括冷起动机器、热拔硬盘、删除一些数据库文件;硬件问题,包括磁盘控制器的问题;操作系统问题,包括与系统相关的一些致命错误。
1.4 预防措施:1、定期/不定期执行CHKDSK(不带参数),以检测硬盘物理结构并修复一些CHKDSK报告的问题;2、常备份数据。
1.5 应用数据库修复举例declare @databasename varchar(255)set @databasename='AIS20021224170730'------一定要手工输入---------执行一般性修复还存在问题时,进行允许数据丢失的修复---------许数据丢失的修复要求在单用户下进行,此时请退出中间层,客户端,sql的其他模块---所有功能退出,在查询分析器master里设置数据库为单用户exec sp_dboption @databasename, N'single', N'true'-----在查询分析器master里,进行修复数据库dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)dbcc checkdb(@databasename,REPAIR_REBUILD)------还原数据库状态exec sp_dboption @databasename, N'single', N'false'第2章数据库日志损坏的修复请遵照如下步骤来试图重建数据库事务日志.注意: 由于事务日志丢失, 数据库可能有没有提交的数据.注:都要替换成真实的数据库名字2.1 步骤1:创建一个新的数据库,命名为原来数据库的名字.2.2步骤2:停止SQL Server2.3步骤3:把老数据库的MDF文件替换新数据库的相应的MDF文件, 并把LDF文件删除2.4步骤4:重新启动SQL Server 服务,然后运行如下命令:复制代码代码如下:Use MasterGosp_configure 'allow updates', 1reconfigure with overrideGobegin tranupdate sysdatabases set status = 32768 where db_name'-- Verify one row is updated before committingcommit tran2.5步骤5:停止SQL然后重新启动SQL Server 服务,然后运行如下命令:DBCC TRACEON (3604)DBCC REBUILD_LOG('db_name','c:\mssql7\data\dbxxx_3.LDF')Go2.6步骤6:停止SQL然后重新启动SQL Server 服务,然后运行:复制代码代码如下:use masterupdate sysdatabases set status = 8 whereGosp_configure 'allow updates', 0reconfigure with overrideGo2.7步骤7:运行dbcc checkdb(db_name)检查数据库的完整性.第3章数据库质疑的一般处理1、执行如下SQL(打开修改系统表的开关):EXEC sp_configure 'allow updates', 1RECONFIGURE WITH OVERRIDE2、修改数据库Master中的表:sysdatabases将status字段数值更改为43、再执行如下SQL:EXEC sp_configure 'allow updates', 0RECONFIGURE WITH OVERRIDE。