怎么在vc代码中检查mysql数据库中的一个表是否损坏_检查修复数据库常用方法...

A、检查数据库常用方法:

隔一定时间或计算机经常死机、突然掉电、软件经常连接不上数据库时,需要进行检查数据库的完整性和正确性。

一、进入sqlserver“查询分析器”,选中“消费数据库”后输入检测数据库命令:

DBCC CHECKDB ('消费数据库名称', NOINDEX)

二、Sqlserver开始检查“消费数据库”的完整性和正确性。

检查结果:

1、如果为“0个分配性错误,0个一致性错误”,消费数据库正常。退出。

2、否则“消费数据库”需要进行恢复。

步骤:

1、把“查询分析器”的当前数据库改为master数据库。

2、在查询分析器里面依次执行下面命令:

A、SP_DBOPTION '消费数据库名称','SINGLE USER',TRUE

B、DBCC CHECKDB('消费数据库名称',REPAIR_ALLOW_DATA_LOSS)

C、SP_DBOPTION '消费数据库名称','SINGLE USER',FALSe

3、最后重复步骤一再次检查数据库正确性

B、LOG文件损坏处理方法:

1、停止服务,copy mdf与ldf文件到别处(不要做sp_detach_db分离数据库)

2、建立一个新数据库

3、将你复制出去的 mdf文件改名字,替换刚刚新建的数据库的mdf文件(此时你再刷新数据库仍为置疑状态,可以不管)

4、进入查询分析器,运行以下语句

USE MASTER

GO

SP_CONFIGURE 'ALLOW UPDATES',1

GO

RECONFIGURE WITH OVERRIDE

GO

UPDATE SYSDATABASES SET STATUS=-32768 WHERE NAME='数据库名称'

5、重建LOG

DBCC REBUILD_LOG('数据库名称','C:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL\DATA\数据库名称_LOG.LDF')

如果提示“文件已存在”的话,请在相应目录下把原来的LOG文件删除

6、DBCC检查 DBCC CHECKDB('数据库名称')

7、设置数据库为正常状态

UPDATE SYSDATABASES SET STATUS =28 WHERE NAME='数据库名称'

GO

8、不允许对系统目录直接修改

SP_CONFIGURE 'ALLOW UPDATES',0

GO

RECONFIGURE WITH OVERRIDE

GO

9、以上步骤执行完毕后应该就可以进入系统了,但有可能数据库还是有错误,这时可以使用A中的方法对数据库进行修复

10、如在执行“SP_DBOPTION '消费数据库名称','SINGLE USER',TRUE”报错“服务器: 消息 5070,级别 16,状态 2,行 1

如果其他用户正使用数据库 'elong',则数据库状态不能更改 服务器: 消息 5069,级别 16,状态 1,行 1 ALTER DATABASE 语句失败。 sp_dboption 命令失败。”

就进行以下步骤: 进入查询分析器 执行以下语句(注意数据库名称)

use master

go

--kill所有会话

Declare @tblConnectedUsers Table (SPID int)

Declare @vcSQLText varchar(200),@iSPID int

Insert into @tblConnectedUsers

Select p.spid

from master.dbo.sysprocesses p (nolock)

join master..sysdatabases d (nolock) on p.dbid = d.dbid

Where d.[name] = '数据库名称'

While 1 = 1

Begin

Select top 1 @iSPID = SPID

From @tblConnectedUsers

Where SPID > IsNull(@iSPID, 0)

order by SPID asc

If @@RowCount = 0

Break

Set @vcSQLText = 'Kill ' + Convert(varchar(10), @iSPID)

Exec(@vcSQLText)

End

11、再重新操作A中的步骤修复数据库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值