SQL 2000 数据库置疑修复语句

SQL 2000 数据库置疑修复语句
SQL 2000 数据库置疑修复语句

数据库置疑及修复

?数据库置疑处理

提要:在数据库置疑或者修复的处理过程中,须先将文中的数据库更改为真实的数据库名称. 数据库置疑修复处理完成后,需执行第二步骤,使用DBCC语句对数据库进行检测并修复错误.

对于损坏的数据库,可参照数据库修复处理方法进行处理.

步骤1:

停止SQL服务管理器,将原数据文件拷贝出来进行备份,然后将原数据库删除,使用思迅数据库安装程序创建一个新的数据库。

步骤2:

停止SQL Server 服务管理器

步骤3:

用备份出来的老数据库的MDF文件替换新数据库相应的MDF文件,并把LDF文件删除。

步骤4:

重新启动SQLServer服务,然后运行如下命令:

Use Master

Go

sp_configure 'allow updates', 1

reconfigure with override

Go

begin tran

updatesysdatabases set status=32768where name='issfoodv6_b ranch'

--Verify one row is updated beforecommitting

committran

步骤5:

停止SQL然后重新启动SQLServer服务,然后运行如下命令:

DBCC TRACEON(3604)

DBCCREBUILD_LOG('issfoodv6_branch','C:\ProgramFiles\Microsoft SQLServer\MSSQL\Data\issfoodv6_branch_log.ldf')

Go

--注:此处的db_name一定要更换为需要修复的数据库名称,比如此实例中的issfoodv6_branch

步骤6:

停止SQL然后重新启动SQL Server服务,然后运行:

usemaster

update sysdatabasesset status=8wherename= 'issfoodv6_branch'Go

sp_configure'allow updates',0

reconfigurewithoverride

Go

步骤7:

运行dbcccheckdb(issfoodv6_branch)检查数据库的完整性

?数据库修复

/*****************************************************************

* 本语句可以多次执行,一直到没有红色文字出现,则修复成功

* 这类故障是一般是由于磁盘读写问题造成的。

*'issfoodv6_branch'代表要修复的数据库

*下面的语句是修复总部数据库的SQL,如需要修复分部的数据库,请将'issfoodv6_branch' 改为'issfoodv6_branch_branch'

******************************************************************/ --请在查询分析器中执行下列语句.执行前断开其它所有数据库连接,最好是断开网线

USE master

Go

--单用户模式

EXEC sp_dboption 'issfoodv6_branch', 'single user', 'TRUE'

go

--数据库检查

DBCC CHECKDB ('issfoodv6_branch')

Go

--如果返回结果出现了红色的提示文字,说明数据库中存在错误,需要修复

--数据库修复

DBCC CHECKDB ('issfoodv6_branch',repair_rebuild)

Go

--再次数据库检查,如果返回结果中没有了红色的提示文字,说明修复成功;

DBCC CHECKDB ('issfoodv6_branch')

Go

--否则意味着还需要更高级别的修复;尝试将上面修复语句的'repair_rebuild'换为'r epair_allow_data_loss'再试,之后再次检查数据库。

--如果还有错误未修复,

--退出前请一定要执行以下语句返回到多用户模式

EXEC sp_dboption 'issfoodv6_branch', 'single user','FALSE'

Go

?数据库索引修复

损坏后的数据库在通过以上语句修复数据库完后,一般都伴随着索引的损坏。所以务必在数据库修复完后,执行以下语句修复索引。

use 'issfoodv6_branch'--可改成相应的数据库名go

declare@tablenamevarchar(100)

declaretest_cur cursorfor

selectobject_name(id)from syscolumns

where status=128

open test_cur

fetch test_cur into@tablename

while @@fetch_status=0

begin

DBCC CHECKIDENT (@tablename, RESEED)

fetchtest_cur into@tablename

end

close test_cur

deallocate test_cur

go

相关主题
相关文档
最新文档