如何修复置疑SQL数据库

来源:本站
导读:目前正在解读《如何修复置疑SQL数据库》的相关信息,《如何修复置疑SQL数据库》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《如何修复置疑SQL数据库》的详细说明。
简介:如果 SQL Server 因为磁盘可用空间不足,而不能完成数据库的恢复,那么 SQL Server 2000 会返回错误 1105 并且将 sysdatabases 中的 status 列设为置疑。 本文主要讲解了其修复方法。

下面是修复的步骤和收缩日志的步骤:

1.在命令提示符下运行以下命令启动SQLServer:

SQLSERVER-f-m

备注:-m开关以单用户模式启动SQLServer。在单用户模式下,只能成功建立一个连接。请注意是否有任何其他客户机或服务可能会在您通过SQLServer查询分析器建立连接前使用那个连接。

2.重置置疑数据库的状态。

sp_resetstatus'database_name'

下面是结果集:

Database'database_name'statusreset!

WARNING:YoumustrebootSQLServerpriortoaccessingthisdatabase!

3.用ALTERDATABASE向数据库添加一个数据文件或日志文件:

USEmaster

GO

CREATEDATABASEdb_nameON

(

NAME=dbname_dat1,

FILENAME='D:MSSQLDatadbname_dat1.ndf',

SIZE=1000MB,

FILEGROWTH=50MB

)

GO

--更改该数据库以添加一个2GB大小的新数据文件

ALTERDATABASEdb_name

ADDFILE

(

NAME=dbname_dat2,

FILENAME='F:MSSQLDATAdbname_dat2.ndf',

SIZE=2000MB,

FILEGROWTH=50MB

)

GO

--更改该数据库以添加一个1GB大小的新日志文件

ALTERDATABASEdb_name

ADDLOGFILE

(NAME=db_name_log2,

FILENAME='F:MSSQLDatadb_name_log2.ldf',

SIZE=1000MB,

FILEGROWTH=20MB),

GO

4.停止并重新启动SQLServer:

用新的数据文件或日志文件所提供的额外空间,SQLServer应该能完成数据库的恢复。

5.释放磁盘空间并且重新运行恢复操作,按照下面的步骤收缩日志。

sp_resetstatus关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。

为从根本上解决这样的问题,你可以按下面的操作配置SQLSERVER2000:

a.如果不需要恢复到指定的时间点,你可以将数据库的恢复模式配置为简单,这样

UPDATE,DELETE,SELECT就不会记录日志,日志就不会增加的很大:

USEMASTER

GO

ALTERDATABASEDB_NAMESETRECOVERYSIMPLE

b.如果你的恢复模式是全部,你一定要配置日志字段收缩:

USEMASTER

GO

sp_dboption'databasename','trunc.logonchkpt.',true

sp_dboption'databasename','autoshrink',true

c.通过每日备份将日志收缩:

BACKUPDATABASEDATABASE_NAMETOBACKUP_DEVICES

BACKUPLOGDATABASE_NAMETOLOG_DEVICES

OR

BACKUPLOGDATABASE_NAMEwithtruncate_only

**检查日志的容量:DBCCSQLPERF(LOGSPACE)这时日志并没有收缩!

d.每天在备份数据库完成之后,重新启动MSSQLSERVERSERVICE.

USEDATABASE_NAME

go

DBCCSHRINKFILE(2,truncateonly)

**检查日志的容量:DBCCSQLPERF(LOGSPACE)这时日志已经收缩!

e.手动快速收缩日志:

/*runbelowscript,youwillshrinkyoudatabaselogfiles

immediately,inmyexperience,youneedtorunthescriptfor3or

4minutesbeforestoppingitmanually*/

usedatabasename

dbccshrinkfile(2,notruncate)

dbccshrinkfile(2,truncateonly)

createtablet1(char1char(4000))

go

declare@iint

select@i=0

while(1=1)

begin

while(@i<100)

begin

INSERTINTOT1VALUES('A')

SELECT@I=@I+1

END

TRUNCATEtableT1

BACKUPLOGyoudatabasenamewithtruncate_only

end

GO

注意只有在您的主要支持提供者指导下或有疑难解答建议的做法时,才可以使用

sp_resetstatus。否则,可能会损坏数据库。

由于该过程修改了系统表,系统管理员必须在运行sp_resetstatus这个过程前,启用系统表更新。要启用更新,使用下面的过程:

USEmaster

GO

sp_configure'allowupdates',1

GO

RECONFIGUREWITHOVERRIDE

GO

过程创建后,立即禁用系统表更新:

sp_configure'allowupdates',0

GO

RECONFIGUREWITHOVERRIDE

GO

只有系统管理员才能执行sp_resetstatus。执行该过程后,立即关闭SQLServer

提醒:《如何修复置疑SQL数据库》最后刷新时间 2024-03-14 01:01:28,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《如何修复置疑SQL数据库》该内容的真实性请自行鉴别。