壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1275|回复: 0

[入门资料] SQL数据库置疑解决

[复制链接]
发表于 2012/9/2 20:32:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
一、数据库置疑产生的原因
1、SQL Server所在分区空间是否够?
数据库文件大小是否达到最大文件限制?
FAT32的格式只支持4G以内的文件。
2、数据库文件损坏或被非正常删除时出现这种情况。
3、病毒防火墙的扫描也会引起数据库置疑。
4、当SQL Server启动时,将会尝试获得对数据库文件的排他访问权,如果此时该文件被其他程序占用,或者遗失,数据库将会被标记为置疑。
5、电脑非法关机也会造成数据库置疑。
6、电脑磁盘有坏道有可能造成数据库置疑。
二、数据库置疑的预防
1、数据库存放的盘符,空间是否够大,经常检查盘符的空间。
2、数据库存放的盘符的格式设置为NTFS格式。
3、进行病毒清除时,尽量把SQL服务停掉,再进行检查。
4、尽量减少非正常关机。
5、建议购买后备电源。
6、实施软件之后一定要做好自动备份。
7、建议每隔一定时间手动备份一次。
三、数据库置疑的修复
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 Sever7.0和SQL Server 2000的数据库文件,
要点是备份的时候一定要将mdf和ldf两个文件都备份下来,mdf文件是数据库
数据文件,ldf是数据库日志文件。
例子:
假设数据库为pdm,其数据文件为pdm_data.mdf,日志文件为pdm_log.ldf。下面我们讨论一下如何备份、恢复该数据库。

卸下数据库:
sp_detach_db 'pdm'
连接数据库:
sp_attach_db 'pdm','C:\Program Files\Microsoft SQL Server\MSSQL\Data\pdm_data.mdf','C:\Program Files\Microsoft SQL Server\MSSQL\Data\pdm_log.ldf'
sp_attach_single_file_db 'pdm','C:\Program Files\Microsoft SQL Server\MSSQL\Data\pdm_data.mdf'
2、只有mdf文件的恢复技术
由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件
很麻烦的事情了。
    如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db或者sp_attach_single_file_db 可以恢复数据库,但是会出现类似下面的提示信息
    设备激活错误。物理文件名 'C:\Program Files\Microsoft SQL Server\MSSQL\data\pdm_Log.LDF' 可能有误。

    已创建名为 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\
pdm_log.LDF' 的新日志文件。
但是,如果您的数据库文件是从其他计算机上复制过来的,那么很不幸,也
许上述办法就行不通了。你也许会得到类似下面的错误信息
服务器: 消息 1813,级别 16,状态 2,行 1 未能打开新数据库 'pdm'。
CREATE DATABASE 将终止。
设备激活错误。物理文件名 'd:\pdm_log.LDF' 可能有误。

怎么办呢?别着急,下面我们举例说明恢复办法。现在我从其他机器上拷贝
回来了数据库文件pdm_Data.MDF到本计算机上,存放到了E盘的一个文件夹里
A.我们使用SQL Server企业管理器建立一个供恢复使用的数据库‘pdm’,
存放在E盘
B.停掉数据库服务器。
C.将刚才生成的数据库的日志文件pdm_log.ldf删除,用要恢复的数据库
mdf文件覆盖刚才生成的数据库数据文件pdm_data.mdf。
启动数据库服务器。此时会看到数据库pdm的状态为“置疑”。这时候不
能对此数据库进行任何操作
设置数据库允许直接操作系统表。此操作可以在SQL Server Enterprise
Manager里面选择数据库服务器,按右键,选择属性,在“服务器设置”页
面中将“允许对系统目录直接修改”一项选中。
也可以用‘SQL查询分析器’执行如下语句来实现。
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go

F.设置pdm为紧急修复模式 ,运行‘SQL查询分析器’执行如下语句来实

现。update sysdatabases set status=-32768 where dbid=DB_ID('pdm')
此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读
\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表
G.下面执行真正的恢复操作,重建数据库日志文件
dbcc rebuild_log('pdm','E:\pdm_log.ldf')

执行过程中,如果遇到下列提示信息:
服务器: 消息 5030,级别 16,状态 1,行 1 未能排它地锁定数据库以执
行该操作。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL
Server Enterprise Manager打开了pdm库的系统表,那么退出SQL Server
Enterprise Manager就可以了。
正确执行完成的提示应该类似于.
数据库 'pdm' 的日志已重建。已失去事务的一致性。应运行 DBCC
CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。
    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

    此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。
H.验证数据库一致性(数据库较大时会耗费一些时间,此步可省略)
dbcc checkdb('pdm')
一般执行结果如下:
CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 'pdm' 中)。DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

I.设置数据库为正常状态
sp_dboption 'pdm','dbo use only','false'

如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库



该贴已经同步到 blancet的微博
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/28 23:52 , Processed in 0.014627 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表