如何修复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

一般有两种方法,一种是用命令把日志文件压缩清空,一种就是直接删除日志文件:

1、命令行实现

第一步:清空日志DUMP TRANSACTION databasename WITH NO_LOG -- 第二步:截断事务日志BACKUP LOG databasename WITH NO_LOG -- 第三步:收缩数据库DBCC SHRINKDATABASE(databasename)

2、直接删除日志文件方法:

a分离数据库:

企业管理器--服务器--数据库--右键--分离数据库

b在我的电脑中找到数据库文件的路径,删除LOG文件

c附加数据库:

企业管理器--服务器--数据库--右键--附加数据库

这样将生成新的LOG文件,大小只有500多K

sql数据库质疑是设置错误造成的,解决方法为:

1、通过DBCC CHECKCB('DBName') 来检测数据库异常的原因,如果可以检测到数据库的异常,其中红色部分即时数据目前存在的问题,我们也在检测结果最后看到数据的总体的错误情况的汇总。

2、如果数据库的整体结果没有问题,只是部分表的数据结构、索引、存储出现异常,可以通过DBCC CheckTable('DBNamedbotablename')来进行检测。

3、通过sql命令或者 *** 作,将数据库设置为“单用户”模式,然后打开查询分析器,准备进行修改。

4、打开查询分析器器,选择Master数据库,通过DBCC CheckDB('DBName',REPAIR_ALLOW_DATA_LOSS)命令,进行数据库的全面修复,该命令可能会导致数据库中的数据丢失,请注意。

5、处理之后,我们还需要将用户模式恢复为多用户模式,可以选择命令,可以是所使用使用数据库管理工具,进行多用户回复:命令: ALTER DATABASE DBName SET MULTI_USER。

6、重启数据库服务,查看数据库异常是否修复,在控制面板找到sql服务进行重启,如果为sql2000,点击屏幕有下家的数据库服务器工具,进行重新启动。

前提条件

-- 将 数据库的恢复模式(Recovery mode)设置为  “完整(Full)”

-- 此 *** 作可以在  SQL Server Management Studio 中, 选择数据库, 鼠标右键, 属性后,在 选项 标签中进行设置。

USE [master]

GO

ALTER DATABASE [test] SET RECOVERY FULL WITH NO_WAIT

GO

-- 完整备份数据库

backup database test to disk='e:\test_20130704dat'

GO

已为数据库 'test',文件 'Test' (位于文件 1 上)处理了 376 页。

已为数据库 'test',文件 'Test_log' (位于文件 1 上)处理了 3 页。

BACKUP DATABASE 成功处理了 379 页,花费 1151 秒(2571 MB/秒)。

 测试数据 

USE [test]

GO

-- 创建测试表

CREATE TABLE test_br_table (

  ID   int,

  VAL  VARCHAR(10),

  PRIMARY KEY(ID)

);

GO

INSERT INTO test_br_table  VALUES (1, 'TEST1');

INSERT INTO test_br_table  VALUES (2, 'TEST2');

INSERT INTO test_br_table  VALUES (3, 'TEST3');

GO

SELECT GETDATE()

GO

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

2013-07-04 16:44:12393

(1 行受影响)

-- 假设误 *** 作, 删除所有的数据了

DELETE FROM test_br_table

GO

(3 行受影响)

 恢复  

USE [master]

GO

-- 步骤1 备份当前数据库的事务日志:

BACKUP LOG [Test] TO disk= N'e:\test_log' WITH NORECOVERY

GO

已为数据库 'Test',文件 'Test_log' (位于文件 1 上)处理了 9 页。

BACKUP LOG 成功处理了 9 页,花费 0046 秒(1486 MB/秒)。

-- 步骤2 恢复一个误删除之前的完全备份:

RESTORE DATABASE [Test] FROM DISK = N'e:\test_20130704dat' WITH NORECOVERY,  REPLACE

GO

已为数据库 'Test',文件 'Test' (位于文件 1 上)处理了 376 页。

已为数据库 'Test',文件 'Test_log' (位于文件 1 上)处理了 3 页。

RESTORE DATABASE 成功处理了 379 页,花费 0828 秒(3574 MB/秒)。

-- 步骤3 将数据库恢复至误删除之前的时间点:

RESTORE LOG [Test] FROM  DISK = N'e:\test_log' WITH  STOPAT = N'2013-07-04 16:44:12393' , RECOVERY

GO

已为数据库 'Test',文件 'Test' (位于文件 1 上)处理了 0 页。

已为数据库 'Test',文件 'Test_log' (位于文件 1 上)处理了 9 页。

RESTORE LOG 成功处理了 9 页,花费 0013 秒(5258 MB/秒)。

 核对数据 

use [Test]

GO

SELECT  FROM test_br_table

GO

ID          VAL

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

          1 TEST1

          2 TEST2

          3 TEST3

(3 行受影响)

上面为 SQL Server  2008 下面 *** 作的记录,  SQL 2000 下面, 不知道行不行了

以上就是关于如何修复sql数据库数据不一致全部的内容,包括:如何修复sql数据库数据不一致、SQL2000数据库备份文件SDBackup.bak日志文件过大不要了怎么恢复备份。、sql数据库质疑的原因及解决办法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/sjk/10163854.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存