MS (DBCC CHECKDB)Sql Server 数据库或表修复
- 格式:doc
- 大小:35.00 KB
- 文档页数:6
DBCC CHECKDB 数据库或表修复MS Sql Server 提供了很多数据库修复的命令,当数据库质疑或是有的无法完成读取时可以尝试这些修复命令。
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 (表名,’’) 修复此表所有的索引。
dbcc checkdb语句
DBCC CHECKDB语句是用于对SQL Server数据库进行完整性检查和诊断的命令。
该命令检查数据库中的所有对象,并查找任何潜在的问题或损坏。
它可以帮助数据库管理员检测并修复数据文件中的错误,以及检查表、索引、约束等对象的一致性。
使用DBCC CHECKDB语句可以检查数据库的物理和逻辑完整性。
它会扫描数据库中的所有分配的页,并对每个分配的页执行一些检查。
数据库管理员可以指定是否要修复任何发现的错误。
DBCC CHECKDB语句的一些常见的选项和参数包括:
1. REPAIR_ALLOW_DATA_LOSS:该选项用于指定在修复过程中是否允许删除数据,可能会导致数据丢失。
在执行此选项之前,务必进行备份以防数据丢失。
2. ALL_ERRORMSGS:该选项用于在检查过程中显示所有错误消息。
3. NO_INFOMSGS:该选项用于在检查过程中禁止显示信息消息。
4. PHYSICAL_ONLY:该选项用于仅检查数据库的物理完整性,而不执行逻辑检查。
这可以提高检查速度。
DBCC CHECKDB语句是维护和管理SQL Server数据库的重要工具之一。
它提供了对数据库完整性的全面检查,并能够帮助管理员及时发现并修复潜在的问题。
建议定期运行该命令,以确保数据库的健康和稳定性。
请注意,在使用DBCC CHECKDB语句之前,务必进行适当的准备工作,如备份数据库和查看相关文档。
此外,建议在以生产环境中使用此命令之前,在测试环境中先进行测试以避免意外情况的发生。
SQL Server数据库异常是常见的技术问题,以下是一些可能的解决方法:
检查错误日志:SQL Server的错误日志是解决问题的关键。
出现异常时,首先应查看错误日志,了解详细的错误信息。
备份和恢复:定期备份数据库是预防数据丢失的有效方法。
如果出现数据损坏或丢失,可以尝试使用备份进行恢复。
检查数据库连接:确保应用程序能够正常连接到SQL Server。
如果连接出现问题,可以检查网络连接、防火墙设置、SQL Server配置等。
优化查询性能:如果查询性能下降,可能是因为表结构不合理、索引失效、数据量过大等。
可以考虑优化查询语句、重建索引、清理历史数据等。
检查磁盘空间:SQL Server数据库需要足够的磁盘空间。
如果磁盘空间不足,可能导致数据库无法正常运行。
需要定期检查服务器磁盘空间,并及时清理不必要的文件。
更新和修复:如果是SQL Server的bug导致的异常,可能需要安装最新的补丁或升级到新版本。
同时,也可以考虑使用修复工具来修复数据库损坏。
联系技术支持:如果自己无法解决问题,可以联系Microsoft的技术支持或社区寻求帮助。
在处理SQL Server数据库异常时,应保持冷静,根据错误信息进行排查。
同时,预防总比治疗更重要,平时应做好数据库的维护和管理,避免出现异常。
SQLSERVER数据库修复⽅法(数据库变为可疑)
在使⽤SQL Server 2008数据库时发现数据库被标记为可疑,查看⽹上的资料终于找到了解决办法,接下来我们就来介绍解决⽅法。
解决⽅法:
当数据库发⽣这种操作故障时,可以按如下操作步骤可解决此⽅法,打开数据库⾥的Sql 查询编辑器窗⼝,运⾏以下的命令。
1、修改数据库为紧急模式
ALTER DATABASE数据库名称SET EMERGENCY
2、使数据库变为单⽤户模式
ALTER DATABASE数据库名称SET SINGLE_USER
3、修复数据库⽇志重新⽣成,此命令检查的分配,结构,逻辑完整性和所有数据库中的对象错误。
当您指
定“REPAIR_ALLOW_DATA_LOSS”作为DBCC CHECKDB命令参数,该程序将检查和修复报告的错误。
但是,这些修复可能会导致⼀些数据丢失。
DBCC CheckDB (数据库名称 , REPAIR_ALLOW_DATA_LOSS)
4、使数据库变回为多⽤户模式
ALTER DATABASE数据库名称SET MULTI_USER
也可以这样做:
1:重新建⽴⼀个,⼀样的数据库,路径名称,⽂件都⼀样。
2:关掉SQL Server服务;
3:把源⽂件COPY过来;
4:开启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数据库修复中心/由于种种原因,我们如果当时仅仅备份了mdf 文件,那么恢复起来就是一件很麻烦的事情了。
如果您的mdf 文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db 或者sp_attach_single_file_db 可以恢复数据库,但是会出现类似下面的提示信息设备激活错误。
物理文件名'C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Log.LDF' 可能有误。
已创建名为'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.LDF' 的新日志文件。
但是,如果您的数据库文件是从其他计算机上复制过来的,那么很不幸,也许上述办法就行不通了。
你也许会得到类似下面的错误信息服务器: 消息1813,级别16,状态2,行 1 未能打开新数据库'test'。
CREATE DATABASE 将终止。
设备激活错误。
物理文件名'd:\test_log.LDF' 可能有误。
怎么办呢?别着急,下面我们举例说明恢复办法。
A.我们使用默认方式建立一个供恢复使用的数据库(如test)。
可以在SQL Server Enterprise Manager 里面建立。
B.停掉数据库服务器。
C.将刚才生成的数据库的日志文件test_log.ldf 删除,用要恢复的数据库mdf 文件覆盖刚才生成的数据库数据文件test_data.mdf。
D.启动数据库服务器。
此时会看到数据库test 的状态为“置疑”。
这时候不能对此数据库进行任何操作。
E.设置数据库允许直接操作系统表。
此操作可以在SQL Server Enterprise Manager 里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。
SQL Server数据库修复语句在SQL Server中,数据库可能会遇到各种问题,比如损坏、不一致或者出现其他错误,这时就需要使用修复语句来修复数据库。
本文将介绍一些常见的SQL Server数据库修复语句,帮助大家解决数据库问题。
1. 使用DBCC CHECKDB命令检查数据库的一致性DBCC CHECKDB是SQL Server中用于检查数据库一致性的命令。
可以使用以下命令来检查指定数据库的一致性问题:```DBCC CHECKDB('数据库名')```这个命令会检查数据库对象的物理和逻辑一致性,包括索引、数据页、数据链路等内容。
如果发现问题,会输出错误信息并尝试修复。
需要说明的是,在运行此命令之前,建议先备份数据库,以免造成数据丢失。
2. 修复损坏的数据页如果DBCC CHECKDB命令检查出了数据页损坏的问题,可以使用以下语句修复:```DBCC PAGE('数据库名', 1, 数据页号, 数据页修复选项)```其中,数据页号是需要修复的数据页的页号,数据页修复选项包括3种:0表示不执行修复,1表示尝试逻辑级别的修复,2表示尝试物理级别的修复。
根据实际情况选择修复选项。
3. 使用修复命令修复数据库如果数据库无法自动修复,可以使用修复命令手动修复数据库。
修复数据库的命令如下:```DBCC CHECKDB('数据库名', REP本人R_REBUILD)```修复操作会尝试重建损坏或不一致的索引,并进行一些其他的一致性检查和修复。
但需要注意的是,该操作可能会导致数据丢失或者数据库不一致,使用前务必确认已经备份了数据库。
4. 使用备份和还原来修复数据库如果数据库问题较为严重,以上方法无法修复,可以尝试使用备份和还原来修复数据库。
需要备份数据库:```BACKUP DATABASE 数据库名 TO 磁盘路径```将备份文件还原到一个新的数据库中:```RESTORE DATABASE 新数据库名 FROM 磁盘路径```这种方法可以将数据库还原到一个较为稳定的状态,但需要注意备份和还原的时机,避免数据丢失。
SQL Server 日志损坏造成整个数据库损坏的修复版本:V1.0作者:知行合一邮箱:409629442@时间:2014/9/29一、问题说明由于用户的数据库某张表比较大,大约有1000万条记录,数据库管理员在非业务时间对这个表进行删除清理,删除操作持续了1个小时左右,到工作时间,仍然没有正常结束。
前端用户反应应用系统比较慢后,数据库管理员对删除操作进行终止,终止时仍然无法正常终止。
最后,数据库管理员不得已对数据库进行重启,重启后发现数据库已经无法正常打开。
由于用户比较急,就用一个比较老的备份进行了恢复。
我们赶赴现场后,原先的数据库已经被删除,但用户已经针对原先的数据库文件和日志文件进行了拷贝。
我们把备份的数据库文件拷贝到异机进行附加,总是报错,提示无法读取日志文件。
具体报错如下:The log cannot be rebuilt because there were open transactions/users when the database was shutdown, no checkpoint occurred to the database, or the database was read-only. This error could occur if the transaction log file was manually deleted or lost due to a hardware or environment failure.Msg 1813, Level 16, State 2, Line 2通过上面的报错可知,数据库的日志文件发生了损坏,这时已经不能通过简单的附加方式进行恢复,也无法通过无日志附加的方式进行附加,因为这时数据库处在一个不一致的状态。
二、环境介绍操作系统:Windows 2008 R2SQL server: SQL Server 2008 SP1数据文件路径:注:数据文件后面为数据文件的file_id,file_id 可以通过sys.master_files进行查看三、处理过程由于这时数据库已经无法正常打开(已经没有对应的数据库,或数据库状态错误,查看不了任何属性信息),所以我们必须重新创建同名的数据库,然后用备份的数据文件覆盖新创建的数据文件。
sqlserver数据库修复语句
嘿,朋友们!咱今天就来讲讲 SQL Server 数据库修复语句那些事儿。
你知道吗,这数据库就好比是一个大宝藏,有时候可能会出点小毛病,这时候就得靠修复语句来拯救啦!比如说,当数据库出现一些奇怪的
错误提示,就好像一个人突然生病了一样,得赶紧想办法治好呀!
“DBCC CHECKDB”,这可是个厉害的家伙呢!就像医生手里的听
诊器,能帮我们找出数据库的问题所在。
比如说,“DBCC CHECKDB (your_database_name)”,这就像是在对数据库进行一次全面的体检。
还有“ALTER DATABASE SET SINGLE_USER”,这就像是给数据
库这个大房间上了一把锁,让其他人暂时不能进来,我们好专心地给
它疗伤呀!然后再进行修复操作。
哎呀呀,这修复语句可真是太重要啦!想象一下,如果没有这些语句,那我们的数据库出了问题可咋办呀?就像人病了没有药一样难受呢!我们得好好掌握这些语句,就像战士握紧手中的武器一样,随时
准备应对数据库的各种状况。
总之,SQL Server 数据库修复语句就是我们的得力助手,能让我们
的数据库一直健康地运行下去。
所以呀,一定要认真学习和运用这些
语句哦!。
SQLserver2000数据库修复办法总结Praymid 戴华倪总结步骤如下:1、检测数据库,使用命令(Dbcc checkdb)拿到数据库后附加到本地SQLserver使其运行,打开企业管理器,查看它。
同时打开查询分析器,在里面输入Dbcc checkdb 检测数据库命令然后回车即可以看到数据库的分析资料看到问题,评注:拿到问题先不要盲目的卸载SQLServer,本次因为新手,上手后就把数据库卸载,这样就耗费了一天的时间,过没有任何作用,测试服务器的完整性可以拿一个好的数据库做对比,自己可以建一个“test”,如果测试数据库运行正常,则不需要对服务器做任何改动。
千万不要改动系统,麻烦会更大。
提示:错误会以红色显示。
2、简单修复:命令:dbcc checkdb输入以下两句尝试修复。
DBCC CHECKDB('AIS20110120172605',repair_allow_data_loss)DBCC CHECKDB('AIS20110120172605',repair_rebuild)不管他究竟哪里错了,先用这两句试试一般的索引系统文件丢失,SQLserver 都可以解决这个问题,基本就差不多了。
但是对于主键索引损坏,这个命令基本修不好,所以对一个满身是伤的数据库,他可以修复70%。
注:修复时系统提示必须要在单用户模式下才可以生效,用户可以去企业管理器,对要修理的数据库:右击属性—选项—限制访问—单用户。
也可以使用以下语句实现:ALTER DATABASE AIS20110420091143 SET single_USERGO 改为单用户ALTER DATABASE AIS20110420091143 SET MULTI_USERGO 改为多用户。
继续使用dbcc checkdb检测,如果继续报错。
再次运行:DBCC CHECKDB('DataBasename') with NO_INFOMSGS,PHYSICAL_ONLY然后再运行:DBCC CHECKDB(' DataBasename ',repair_allow_data_loss) WITH TABLOCK 再次运行:DBCC CHECKDB('DB name') 系统显示修复成功,说明本次问题主要由索引等数据库系统本身问题引起,这样的修复可能会导致数据丢失,但是绝对不会是大批丢失,基本没有影响。
MS Sql Server 数据库或表修复(DBCC CHECKDB)MS Sql Server提供了很多数据库修复的命令,当数据库质疑或是有的无法完成读取时可以尝试这些修复命令。
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', 1 RECONFIGURE WITH OVERRIDE2、修改数据库Master中的表:sysdatabases将status字段数值更改为43、再执行如下SQL:EXEC sp_configure 'allow updates', 0 RECONFIGURE WITH OVERRIDE。