如何修复sql数据库数据不一致

如何修复sql数据库数据不一致,第1张

修复sql2000数据置疑在实际的 *** 作中由于突然断电或者突然断网造成数据库置疑(在企业管理器中数据库后面出现置疑两个字),下面我们通过以下方法来进行修复置疑的数据库。A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQLServerEnterpriseManager里面建立。B停掉数据库服务器。C将刚才生成的数据库的日志文件test_logldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_datamdf。D启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何 *** 作。E设置数据库允许直接 *** 作系统表。此 *** 作可以在SQLServerEnterpriseManager里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。usemastergosp_configure'allowupdates',1goreconfigurewithoverridegoF设置test为紧急修复模式updatesysdatabasessetstatus=-32768wheredbid=DB_ID('test')此时可以在SQLServerEnterpriseManager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表G下面执行真正的恢复 *** 作,重建数据库日志文件dbccrebuild_log('test','C:\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\test_logldf')执行过程中,如果遇到下列提示信息:服务器:消息5030,级别16,状态1,行1未能排它地锁定数据库以执行该 *** 作。DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQLServerEnterpriseManager打开了test库的系统表,那么退出SQLServerEnterpriseManager就可以了。正确执行完成的提示应该类似于:警告:数据库'test'的日志已重建。已失去事务的一致性。应运行DBCCCHECKDB以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。此时打开在SQLServerEnterpriseManager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。H验证数据库一致性(可省略)dbcccheckdb('test')一般执行结果如下:CHECKDB发现了0个分配错误和0个一致性错误(在数据库'test'中)。DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。I设置数据库为正常状态sp_dboption'test','dbouseonly','false'如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。J最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接 *** 作系统表是一件比较危险的事情。当然,我们可以在SQLServerEnterpriseManager里面恢复,也可以使用如下语句完成sp_configure'allowupdates',0goreconfigurewithoverridego

先使用“无日志附加”的方法进行附加数据后,对数据库做DBCC检测,然后针对错误进行修复

。一般如果数据库正在进行读写 *** 作,突然断电,会导致数据库无法回写正常的数据,这样就会导致数据库索引及其它错误,常见的有“并闫锁页错误”、“表错误:

分配单元ID

169144,页(1:XXXX)。测试(IS_OFF

(BUF_IOERR,

pBUF->bstat))失败。”,可以先用DBCC先进行修复

,命令:

DBCC

CHECKDB(DBName,REPAIR_FAST)

--不丢失数据

DBCC

CHECKDB(DBName,REPAIR_REBUILD)--不丢失数据

DBCC

CHECKDB(DBName,REPAIR_ALLOW_DATA_LOSS)--会丢失数据

如果还是修复不好,就找专业的数据恢复公司做修复吧,可以找北亚数据恢复修复

,他们修复SQL数据库很厉害。。。

以前没有备份吗?

没有的话看看这个,或许对你有用。。。

SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式。下面将主要讨论一下后者的备份与恢复。本文假定您能熟练使用SQL Server Enterprise Manager(SQL Server企业管理器)和SQL Server Quwey Analyser(SQL Server查询分析器)

1、正常的备份、SQL数据库恢复方式

正常方式下,我们要备份一个数据库,首先要先将该数据库从运行的数据服务器中断开,或者停掉整个数据库服务器,然后复制文件。

卸下数据库的命令:Sp_detach_db 数据库名

连接数据库的命令:Sp_attach_db或者sp_attach_single_file_db

s_attach_db [@dbname =] ′dbname′, [@filename1 =] ′filename_n′ [,16]

sp_attach_single_file_db [@dbname =] ′dbname′, [@physname =] ′physical_name′

使用此方法可以正确恢复SQL Sever70和SQL Server 2000的数据库文件,要点是备份的时候一定要将mdf和ldf两个文件都备份下来,mdf文件是数据库数据文件,ldf是数据库日志文件。

例子:

假设数据库为test,其数据文件为test_datamdf,日志文件为test_logldf。下面我们讨论一下如何备份、恢复该数据库。

卸下数据库:sp_detach_db 'test'

连接数据库:sp_attach_db 'test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_datamdf','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_logldf'

sp_attach_single_file_db 'test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_datamdf'

2、只有mdf文件的恢复技术

由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了。(此文章由飞客数据恢复中心搜集>

您好,是这样的:

1首先确认已经备份了mdf和ldf文件。

2 在SQL Server中新建一个同名的数据库,然后停止SQL Server服务。

3 用原有的mdf和ldf文件覆盖新建数据库对应的mdf和ldf文件。

4 重新启动SQL Server服务,这是应该会看到这个数据库处于置疑(Suspect)状态。

5 在SQL查询分析器中执行以下命令,以允许更新系统表:use mastergosp_configure "allow updates",1reconfigurewithoverridego。

6 将这个数据库置为紧急模式:update sysdatabases set status = 32768 where name="db_name"go。

7 使用DBCC CHECKDB命令检查数据库中的错误:DBCC CHECKDB("db_name")GO。

8 如果DBCC CHECKDB命令失败,请转至第10步,否则先将数据库置为单用户模式,再尝试对其进行修复:sp_dboption "db_name","single

user","true"DBCCCHECKDB("db_name",REPAIR_ALLOW_DATA_LOSS)GO

如果在执行DBCCCHECKDB("db_name",REPAIR_ALLOW_DATA_LOSS)命令时提示说数据库未处于单用户模式状态的话,则重新启动SQLServer服务,然后继续尝试。

9 如果DBCCCHECKDB("db_name",REPAIR_ALLOW_DATA_LOSS)命令失败,请转至第10步,否则若成功修复了数据库中的错误:

重新执行DBCC CHECKDB("db_name")命令,确认数据库中已没有错误存在。

清除数据库的置疑状态:sp_resetstatus "db_name"

清除数据库的单用户模式状态:sp_dboption "db_name","single user","false"

重新启动SQL Server服务,如果一切正常的话,则数据库已经成功恢复。

10如果以上步骤都不能解决问题的话,请参考附件中的文档尝试通过重建事务日志来恢复数据库中的数据。如果您只有MDF文件,问题就更加复杂一些,我们需要直接重建事务日志了:

1 在SQL Server中新建一个同名的数据库,然后停止SQL Server服务。

2 用原有的ldf文件覆盖新建数据库对应的mdf文件,将其日志文件(ldf)删除。

3 启动SQL Server服务,并将数据库置为紧急模式(同上: 步骤5和步骤6)。

4 停止并重新启动SQL Server服务。

5 执行以下命令重建数据库日志文件:(下面是个示例,您要用您实际的数据库名)

DBCC REBUILD_LOG("cas_db", "D:\cas_db\cas_db_LogLDF")

6 重新将该数据库置为单用户模式。

7 再次尝试使用DBCC CHECKTABLE或DBCC CHECKDB命令检查并修复数据库中。

数据库置疑一般是由于SQL被重装,但是数据目录被设置在另外一个盘并且没有被删除,而导致的,或者是由于数据库的log文件不存在了,这时你可以使用以下的方法来取消置疑!USE MASTER GO SP_CONFIGURE \'ALLOW UPDATES\',1 RECONFIGURE WITH OVERRIDE GO UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME=\'置疑的数据库名\' Go sp_dboption \'置疑的数据库名\', \'single user\', \'true\' Go DBCC CHECKDB(\'置疑的数据库名\') Go update sysdatabases set status =28 where name=\'置疑的数据库名\' Go sp_configure \'allow updates\', 0 reconfigure with override Go sp_dboption \'置疑的数据库名\', \'single user\', \'false\' Go

以上就是关于如何修复sql数据库数据不一致全部的内容,包括:如何修复sql数据库数据不一致、sql数据库置疑 data里找不到该数据库的数据 怎么办、SQL数据库显示:置疑,我怎么能挽回数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10050032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存