数据库异常恢复办法

FILEGROWTH = 20MB), GO 4. 停止并重新启动 SQL Server: 用新的数据文件或日志文件所提供的额外空间,SQL Server 应该能完成数据库的恢复。 5. 释放磁盘空间并且重新运行恢复操作,按照下面的步骤收缩日志。 sp_resetstatus 关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。 为从根本上解决这样的问题,你可以按下面的操作配置SQLSERVER 2000: a.如果不需要恢复到指定的时间点,你可以将数据库的恢复模式配置为简单,这样 UPDATE,DELETE,SELECT就不会记录日志,日志就不会增加的很大: USE MASTER GO ALTER DATABASE DB_NAME SET RECOVERY SIMPLE b.如果你的恢复模式是全部,你一定要配置日志字段收缩: USE MASTER GO sp_dboption 'databasename','trunc. log on chkpt.',true sp_dboption 'databasename','autoshrink',true c.通过每日备份将日志收缩: BACKUP DATABASE DATABASE_NAME TO BACKUP_DEVICES BACKUP LOG DATABASE_NAME TO LOG_DEVICES OR BACKUP LOG DATABASE_NAME with truncate_only **检查日志的容量:DBCC SQLPERF (LOGSPACE) 这时日志并没有收缩! d.每天在备份数据库完成之后,重新启动MS SQLSERVER SERVICE. USE DATABASE_NAME go DBCC SHRINKFILE(2,truncateonly) **检查日志的容量:DBCC SQLPERF (LOGSPACE) 这时日志已经收缩! e.手动快速收缩日志: / *run below script,you will shrink you database log files immediately, in my experience,you need to run the script for 3 or 4 minutes before stopping it manually */ use databasename dbcc shrinkfile(2,notruncate) dbcc shrinkfile(2,truncateonly) create table t1(char1 char(4000)) go declare @i int select @i=0 while(1=1) begin while(@i<100) begin INSERT INTO T1 VALUES ('A') SELECT @I=@I+1 END TRUNCATE table T1 BACKUP LOG youdatabasename with truncate_only end GO 注意 只有在您的主要支持提供者指导下或有疑难解答建议的做法时,才可以使用 sp_resetstatus。否则,可能会损坏数据库。 由于该过程修改了系统表,系统管理员必须在运行 sp_resetstatus这个过程前,启用系统表更新。要 启 用更新,使用下面的过程: USE master GO sp_configure 'allow updates', 1 GO RECONFIGURE WITH OVERRIDE GO 过程创建后,立即禁用系统表更新: sp_configure 'allow updates', 0 GO RECONFIGURE WITH OVERRIDE GO 只有系统管理员才能执行 sp_resetstatus。执行该过程后,立即关闭 SQL Server。 遇到这种数据库置疑情况,就运行下面这个脚本,屡试不爽: ================================================== --before running any script, run the following to set the master database to allow updates USE master GO sp_configure 'allow updates', 1 GO RECONFIGURE WITH OVERRIDE GO --Run the following script UPDATE master..sysdatabases SET status = status ^ 256 WHERE name = 'Database_Name' --Run the following script exec SP_resetstatus Database_Name --stop and start the MSDTC at this stage --After the procedure is created, immediately disable updates to the system tables: exec sp_configure 'allow updates', 0 GO RECONFIGURE WITH OVERRIDE GO ===================================== 从上面可以看出,处理置疑的基本步骤还是我那篇文章中说的(注意我使用的字体颜色): 执行 sp_configure 以允许对系统表进行更新,然后用 RECONFIGURE WITH OVERRIDE 语句强制实施该配置; 数据库重置紧急模式; 执行sp_resetstatus关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项(只有系统管理员才能执行)。执行该过程后,立即重启 SQL Server服务; 执行 sp_configure 以禁止对系统表进行更新,然后用 RECONFIGURE WITH OVERRIDE 语句强制实施该配置。 status ^ 256的意思就是: Constant Value Description SQLDMODBStat_Suspect 256 Database integrity is suspect for the referenced database. 不同的是,有时候丢失了数据库日志文件,额外需要以下步骤: Ø 把应用数据库设置为Single User模式; Ø 做DBCC CHECKDB; 才可以。 但是几位网友的实践结果就是这个DBCC CHECKDB执行失败。一位网友yang说:“但是 DBCC CHECKDB就是执行不了,总是说“该数据库处于回避恢复模式”。我已经试了很多次了,就是改变不了这个状态。” 还有一位Rui执行DBCC CHECKDB时报错:“Server: Msg 943, Level 14, State 1, Line 1 Database 'his_yb' cannot be opened because its version (539) is later than the current server version (515).” 对于Yang,可能他没有一步一步做,。我的切身体会是,把应用数据库设置为Single User模式后就可以做DBCC CHECKDB。之后呢,也许SQL Server重启后自动检查数据库是否正常。但是数据应该是可以读出来的,至少可以被DTS Wizard读出来的。这时候的数据库还存在问题,比如我的组件使用数据库时,报告说:“发生错误:-2147467259,未能在数据库 'XXX' 中运行 BEGIN TRANSACTION,因为该数据库处于回避恢复模式。” 对于Rui,他碰到的那个错误 Server: Msg 943, Level 14, State 1, Line 2 Database 'XXXX' cannot be opened because its version (536) is later than the current server version (515). 这表明Rui正试图: 从一个SQL Server 2000(version 539,536之类的)的数据库备份恢复到一个SQL Server 7.0中 或者 把一个SQL Server 2000(version 539,536之类的)的数据库attach到一个SQL Server 7.0中, 这是不允许的。如果你必须使用这个SQL Server 2000的数据备份,那么请您首先把这个备份倒入SQL Server 2000,最后用DTS把数据库从SQL Server 2000上transfer到SQL Server 7.0上。

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4