一、MSSQL 官方对suspect(‘置疑’,SQL2005中文为‘可疑’)状态的解释:“至少主文件组可疑或可能已损坏。在 SQL Server 启动过程中无法恢复数据库。数据库不可用。需要用户另外执行操作来解决问题。”
二、SQL Server 数据库置疑通常由于以下几种情况导致:
1、 因SQL服务意外退出导致数据库置疑,例如突然断电导致数据库日志文件损坏,下次启动后数据库变为置疑状态。
2、 数据库文件所在的磁盘分区没有可用空间,导致恢复数据库的操作不能完成,数据库变为置疑状态。
3、 数据库文件组已满,这种情况通常发生在MSDE或SQL 2005 Express,因为它们对数据库文件限制了大小,不超过2G或4G;当单个的数据库文件接近2G或4G很容易出现数据库置疑的情况;
另外,当数据库文件所在磁盘分区格式为FAT32时,也有可能出现这种情况,FAT32格式的磁盘分区单个文件不能超过4G,当单个的数据库文件接近4G很容易出现数据库置疑的情况。
4、 数据库文件设置为不自动增长,或设置为自动增长但限制了文件大小。
5、 此外,其它非法的操作也有可能导致数据库置疑。
三、以下提供几种解决V3数据库置疑的办法:
解决客户那里出现数据库置疑通常使用第一或第二种方法,解决问题时请根据实际情况处理
提示:按以下方法修复数据库后,还需要用户密切观察一下V3服务器是否能正常运行、服务器是否有出错;查看服务器是否有出错可以右击服务管理器-‘工具’-‘日志’,在弹出的事件日志窗口中,查看应用程序日志中是否有OSERVER3的错误信息;如果有出错信息可能会出现数据收集不完整等问题,请即时联系我们解决。
问题一:SQL 2005 数据库置疑的解决方法
SQL SERVER 2005,数据库置疑,可以尝试通过以下办法解决:
--第一步:新建查询,执行以下SQL 语句;
USE master
GO
SP_CONFIGURE 'ALLOW UPDATE',1
GO
RECONFIGURE WITH OVERRIDE
GO
ALTER DATABASE OCULAR3 SET EMERGENCY --设置OCULAR3为紧急模式
GO
SP_DBOPTION 'OCULAR3','SINGLE USER', 'TRUE' --设置OCULAR3为单用户模式
GO
--第二步:继续执行以下SQL语句
DBCC CHECKDB('OCULAR3') --检查数据库的结构完整性,可能需要比较长时间
GO
--第三步:继续执行以下SQL语句
DBCC CHECKDB('OCULAR3','REPAIR_ALLOW_DATA_LOSS') --修复数据库,可能需要比较长时间;执行到这一步,如果提示需要在单用户模式下运行,那么可以重启一下SQL SERVER服务再执行;
GO
--第四步:
SP_DBOPTION 'OCULAR3','SINGLE USER', 'FALSE' --设置OCULAR3为多用户模式
GO
ALTER DATABASE OCULAR3 SET ONLINE --设置OCULAR3为正常模式
GO
SP_CONFIGURE 'ALLOW UPDATE',0
GO
RECONFIGURE WITH OVERRIDE
GO
--第五步:继续执行以下SQL语句
DBCC CHECKDB('OCULAR3') –再次检查数据库的结构完整性
GO
问题二: SQL SERVER 2000,因为断电导致数据库被破坏而置疑,可以通过以下办法解决:
--第一步:新建查询,执行以下SQL 语句;
USE master
GO
SP_CONFIGURE 'ALLOW UPDATE',1
GO
RECONFIGURE WITH OVERRIDE
GO
--设置数据库为紧急模式
UPDATE sysdatabases SET status = 32768 WHERE name = 'OCULAR3'
GO
SP_DBOPTION 'OCULAR3','SINGLE USER', 'TRUE' --设置OCULAR3为单用用户模式
GO
--第二步:继续执行以下SQL语句
DBCC REBUILD_LOG('OCULAR3','d:\ocular3_log_log.ldf') --重建日志文件,
--通常重建的日志文件放在与其它数据库文件相同目录下。比如OCULRA3数据库文件是保存在D盘,日志文件为ocular3_log.ldf,现重建一日志文件为d:\ocular3_log_log.ldf
--第三步:继续执行以下SQL语句
DBCC CHECKDB('OCULAR3') --检查数据库的结构完整性
GO
--如果以上语句执行完成后,提示提示数据库有错误,则还需执行下面这两句:
DBCC CHECKDB('OCULAR3','REPAIR_ALLOW_DATA_LOSS') --修复数据库
GO
--第四步:
SP_DBOPTION 'OCULAR3','SINGLE USER', 'FALSE' --设置OCULAR3为多用户模式
GO
UPDATE sysdatabases SET status = 0 where name = 'OCULAR3'
GO
SP_CONFIGURE 'ALLOW UPDATE',0
GO
RECONFIGURE WITH OVERRIDE
GO
问题三:SQL SERVER 2000 数据库因为其数据库文件所在磁盘可用空间不足导致出现置疑该怎么恢复?
答:OCULAR3数据库出现置疑的问题很可能是因为其数据库文件所在磁盘可用空间不足导致的,请首先检查数据库文件所在磁盘空间是否已满(或查看事务日志中有相关的提示信息);
以下提供因为数据库磁盘可用空间不足导致数据库置疑的解决办法:
1、在查询分析器中执行以下SQL语句:
USE master
GO
--修改系统表,启动系统表更新
sp_configure 'allow updates', 1
GO
RECONFIGURE WITH OVERRIDE
GO
--关闭OCULAR3数据库置疑标志
sp_resetstatus 'OCULAR3'
GO
--OCULAR3增加一个数据库日志文件
ALTER DATABASE OCULAR3
ADD FILE
( NAME = OCULAR3_LOG2,
FILENAME = 'E:\数据库名_log2.Ldf', /*设置增加的日志文件的磁盘物理路径,需要放在另一个磁盘可用空间足够的磁盘*/
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB )
GO
--运行恢复操作
DBCC DBRECOVER(OCULAR3)
--关闭系统表更新
sp_configure 'allow updates', 0
GO
RECONFIGURE WITH OVERRIDE
GO
2、停止并重新启动 SQL Server。 (用新的数据文件或日志文件所提供的额外空间,SQL Server 应该能完成数据库的恢复)。
3、释放磁盘空间;由于IPGUARD需要存储的数据量比较大,当出现磁盘可用空间占满后,释放磁盘空间需要根据客户的实际需要做处理。
问题四:SQL SERVER 2000附加数据库失败该怎么恢复数据库中的数据?
答:出现这样的问题,通常是由于转移数据库时没有正常分离数据库所致,建议以后转移数据库时先分离数据库再拷贝数据库文件
1. 新建一个同名的数据库,(可以我们给客户提供一个空的OCULAR3数据库将其导入,来代替该步骤)
2. 再停止sql 服务器
3. 用附加失败的数据库文件覆盖这个新建的同名数据库
4. 再重启sql server
5. 此时打开企业管理器时新建的同名数据库会出现置疑,先不管,执行下面的语句
USE master
GO
sp_configure 'allow updates', 1
GO
RECONFIGURE WITH OVERRIDE
GO
--设置数据库为紧急模式
UPDATE sysdatabases SET status = 32768 WHERE name = 'OCULAR3'
GO
--恢复
RESTORE DATABASE ocular3 WITH RECOVERY
GO
--恢复数据库紧急模式
UPDATE sysdatabases SET status = 0 where name = 'OCULAR3'
GO
sp_configure 'allow updates', 0
GO
RECONFIGURE WITH OVERRIDE
GO
6. 完成后通常就可以访问数据库中的数据了,但是此时该数据库还不能完全正常使用;因此需要把该数据库中需要的数据导出到一个新的数据库中;
可以在企业管理器中右键OCULAR3数据库-‘所有任务’-‘导出数据’,将需要的数据导入一个新建的数据库中;
此时可以分离现有的OCULAR3数据库
再创建一个空的OCULAR3数据库(附加我们提供的空的OCULAR3数据库),该数据库就是将要用来维护V3服务器正常运行的数据库;从新创建的数据库中导入数据;
7. 启动V3服务器;
问题五:SQL SERVER 2000,数据库文件包含两个日志文件,但现在丢失一个日志文件,导致附加数据库时附加失败;该怎么恢复数据库中的数据?
答:可按以下提示尝试恢复数据库,此方法也适用于对因断电导致置疑的数据库的修复。
1.将我们提供的空数据库附加成名为OCULAR3的数据库
2.停止SQL Server 服务器
3.用附加失败的数据库文件(注意,只需要所有*.mdf,*.ndf的数据库文件)覆盖新建的OCULAR3数据库的文件;
4.重启SQL Server 服务器
5.在企业管理器查看OCULAR3数据库出现置疑,先不管,退出企业管理器,
在查询分析器中执行下面的语句(并保存执行结果消息,以免有出错的情况,方便查原因 ):
USE MASTER
GO
SP_CONFIGURE 'ALLOW UPDATES', 1
GO
RECONFIGURE WITH OVERRIDE
GO
--设置数据库为紧急模式
UPDATE SYSDATABASES SET STATUS = 32768 WHERE NAME = 'OCULAR3'
GO
--恢复
RESTORE DATABASE ocular3 WITH RECOVERY
GO
SP_DBOPTION 'OCULAR3','SINGLE USER','TRUE'
GO
-- 修改OCULAR3数据库的LDF文件名,这里原来是OCULAR3_LOG.LDF,现改为OCULAR3_LOG_BAK.LDF
DBCC REBUILD_LOG('OCULAR3','G:\TESTDATABASE1\OCULAR3_LOG_BAK.LDF')
GO
SP_DBOPTION 'OCULAR3','SINGLE USER','FALSE'
GO
--恢复数据库紧急模式
UPDATE SYSDATABASES SET STATUS = 0 WHERE NAME = 'OCULAR3'
SP_CONFIGURE 'ALLOW UPDATES', 0
GO
RECONFIGURE WITH OVERRIDE
GO
DBCC CHECKDB('OCULAR3')
GO
6.以上SQL语句执行完成后,启动V3服务器,观察服务器运行是否正常,并在应用程序日志中查看有没有关于OSERVER3的错误日志。
7.此时V3服务器还是不能正常启动,或应用程序日志中有关于OSERVER3的错误日志,请与我们的技术人员联系!