SQL Server数据库置疑的解决方法文档格式.docx
《SQL Server数据库置疑的解决方法文档格式.docx》由会员分享,可在线阅读,更多相关《SQL Server数据库置疑的解决方法文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
置疑的数据库名'
Go
sp_dboption'
'
singleuser'
true'
DBCCCHECKDB('
)
updatesysdatabasessetstatus=28wherename='
sp_configure'
allowupdates'
0reconfigurewithoverride
Go
false'
6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用数据库的脚本创建一个新的数据库,并将数据导进去就行了。
SQLServer数据库文件恢复技术:
SQLServer数据库备份有两种方式,一种是使用BACKUPDATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式。
下面将主要讨论一下后者的备份与恢复。
本文假定您能熟练使用SQLServerEnterpriseManager(SQLServer企业管理器)和SQLServerQuweyAnalyser(SQLServer查询分析器)
1、正常的备份、恢复方式
正常方式下,我们要备份一个数据库,首先要先将该数据库从运行的数据服务器中断开,或者停掉整个数据库服务器,然后复制文件。
卸下数据库的命令:
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′
使用此方法可以正确恢复SQLSever7.0和SQLServer2000的数据库文件,要点是备份的时候一定要将mdf和ldf两个文件都备份下来,mdf文件是数据库数据文件,ldf是数据库日志文件。
例子:
假设数据库为test,其数据文件为test_data.mdf,日志文件为test_log.ldf。
下面我们讨论一下如何备份、恢复该数据库。
卸下数据库:
sp_detach_db'
test'
连接数据库:
sp_attach_db'
'
C:
\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\test_data.mdf'
\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\test_log.ldf'
sp_attach_single_file_db'
2、只有mdf文件的恢复技术
由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了。
如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库,但是会出现类似下面的提示信息
设备激活错误。
物理文件名'
\ProgramFiles\MicrosoftSQLServer\MSSQL\data\test_Log.LDF'
可能有误。
已创建名为'
\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\test_log.LDF'
的新日志文件。
但是,如果您的数据库文件是从其他计算机上复制过来的,那么很不幸,也许上述办法就行不通了。
你也许会得到类似下面的错误信息
服务器:
消息1813,级别16,状态2,行1
未能打开新数据库'
。
CREATEDATABASE将终止。
d:
\test_log.LDF'
怎么办呢?
别着急,下面我们举例说明恢复办法。
A.我们使用默认方式建立一个供恢复使用的数据库(如test)。
可以在SQLServerEnterpriseManager里面建立。
B.停掉数据库服务器。
C.将刚才生成的数据库的日志文件test_log.ldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_data.mdf。
D.启动数据库服务器。
此时会看到数据库test的状态为“置疑”。
这时候不能对此数据库进行任何操作。
E.设置数据库允许直接操作系统表。
此操作可以在SQLServerEnterpriseManager里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。
也可以使用如下语句来实现。
usemaster
go
1
go
reconfigurewithoverride
F.设置test为紧急修复模式
updatesysdatabasessetstatus=-32768wheredbid=DB_ID('
此时可以在SQLServerEnterpriseManager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表
G.下面执行真正的恢复操作,重建数据库日志文件
dbccrebuild_log('
执行过程中,如果遇到下列提示信息:
消息5030,级别16,状态1,行1
未能排它地锁定数据库以执行该操作。
DBCC执行完毕。
如果DBCC输出了错误信息,请与系统管理员联系。
[brown][/i]
说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQLServerEnterpriseManager打开了test库的系统表,那么退出SQLServerEnterpriseManager就可以了。
正确执行完成的提示应该类似于:
警告:
数据库'
的日志已重建。
已失去事务的一致性。
应运行DBCCCHECKDB以验证物理一致性。
将必须重置数据库选项,并且可能需要删除多余的日志文件。
此时打开在SQLServerEnterpriseManager里面会看到数据库的状态为“只供DBO使用”。
此时可以访问数据库里面的用户表了。
H.验证数据库一致性(可省略)
dbcccheckdb('
一般执行结果如下:
CHECKDB发现了0个分配错误和0个一致性错误(在数据库'
中)。
I.设置数据库为正常状态
dbouseonly'
如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。
J.最后,我们需要将步骤E中设置的“允许对系统目录直接修改”一项恢复。
因为平时直接操作系统表是一件比较危险的事情。
当然,我们可以在SQLServerEnterpriseManager里面恢复,同时也可以使用下面的语句来完成。
0
sqlserver2000数据库置疑的解决方法
选择自smilegw的Blog
关键字
sqlserver2000数据库置疑的解决方法
出处
先分离数据库
企业管理器--右键suspect的数据库--所有任务--分离数据库
然后备份你的suspect数据库的文件,再按下面的步骤处理:
1.新建一个同名的数据库
2.再停掉sqlserver
3.用suspect数据库的文件覆盖掉这个新建的同名数据库
4.再重启sqlserver
5.此时打开企业管理器时新建的同名数据库会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)
his222'
6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用
数据库的脚本创建一个新的数据库,并将数据导进去就行了.
如果这样改不加数据库状态,你就把数据库导成一个新库来代替旧库吧
企业管理器--右键你的数据库--所有任务--导出数据
--目标标数据库选择新建
--选择"
在两个sql数据库之间复制对象和数据"
--把"
包含扩展属性"
选上,其他的根据需要选择
--最后完成
*****************************************************************
*这类故障是一般是由于磁盘读写问题造成的。
*下面的语句是修复总部数据库的SQL,如需要修复分部的数据库,请将'
hbposv5'
改为'
hbposv5_branch'
*超市之星系统直接执行
*快捷通、进销存系列,请将'
改为'
isd2001v3'
,如果是分部,改为'
isd2001v3_branch'
*商务通系列,请将'
isd2001v4'
isd2001v4_branch'
******************************************************************/
--请在查询分析器中执行下列语句.执行前断开其它所有数据库连接,最好是断开网线
USEmaster
--单用户模式
EXECsp_dboption'
TRUE'
--数据库检查
DBCCCHECKDB('
)
--如果返回结果出现了红色的提示文字,说明数据库中存在错误,需要修复
--数据库修复
repair_rebuild)
--再次数据库检查,如果返回结果中没有了红色的提示文字,说明修复成功;
--否则意味着还需要更高级别的修复;
尝试将上面修复语句的'
repair_rebuild'
换为'
repair_allow_data_loss'
再试,之后再次检查数据库。
--如果还有错误未修复,
--退出前请一定要执行以下语句返回到多用户模式
FALSE'
数据库置疑处理方法
步骤1:
创建一个新的数据库,命名为原来数据库的名字。
步骤2:
停止SQLServer
步骤3:
把老数据库的MDF文件替换新数据库的相应的MDF文件,并把LDF文件删除。
步骤4:
重新启动SQLServer服务,然后运行如下命令:
UseMaster
1
begintran
updatesysdatabasessetstatus=32768wherename='
--Verifyonerowisupdatedbeforecommitting
committran
步骤5:
停止SQL然后重新启动SQLServer服务,然后运行如下命令:
DBCCTRACEON(3604)
DBCCREBUILD_LOG('
db_name'
c:
\mssql7\data\hbposv5_log.ldf'
步骤6:
停止SQL然后重新启动SQLServer服务,然后运行:
updatesysdatabasessetstatus=8wherename='
0
步骤7:
运行dbcccheckdb(hbposv5)检查数据库的完整性
注:
都要替换成真实的数据库名字。
在表中酸出错误的商品
useisd2001v4_branch
delete
frombi_t_item_infowhereitem_no='
6911988010193'
?
SQLServer2000数据库置疑的解决方法
出处:
天极网 作者:
X 2006-09-1409:
53 评论
字体大小:
大|中|小
先分离数据库
企业管理器--右键suspect的数据库--所有任务--分离数据库
然后备份你的suspect数据库的文件,再按下面的步骤处理:
1.新建一个同名的数据库
2.再停掉sqlserver
3.用suspect数据库的文件覆盖掉这个新建的同名数据库
4.再重启sqlserver
5.此时打开企业管理器时新建的同名数据库会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)
USEMASTER
GO
SP_CONFIGURE'
UPDATESYSDATABASESSETSTATUS=32768WHERENAME='
Go
sp_dboption'
DBCCCHECKDB('
updatesysdatabasessetstatus=28wherename='
sp_configure'
6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用
数据库的脚本创建一个新的数据库,并将数据导进去就行了.
如果这样改不加数据库状态,你就把数据库导成一个新库来代替旧库吧
企业管理器--右键你的数据库--所有任务--导出数据
--目标标数据库选择新建
--选择"
--把"
--最后完成