致力于数据库管理和维护

混迹天涯

   :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

昨天SQL数据库服务器突然断电,造成MSSQLSERVER无法启动,提示:

1\本地计算机上的MSSQLSERVER服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的,例如“性能日志和警报“服务"。

通过事件查看器,查看发现系统文件系统揭损坏,尝试使用CHKDSK修复,

http://bbs.winos.cn/thread-95824-1-1.html

重启后修复成功,仍无法启动MSSQLSERVER服务.

http://topic.csdn.net/u/20080520/12/31f2d0f3-6ac8-4c75-8444-fb72af536d29.html

 

尝试了网上N种办法,仍然无法启动,狠下心后重新安装SQL.

重新安装后,附加原来的数据库文件,出现823错误.按照网上介绍的方法进行附加,

http://www.cnblogs.com/fxllx82/archive/2008/05/22/1204712.html

http://tech.ddvip.com/2009-05/1241490303117649.html

 

代码
sqlserver附加数据库错误823的解决方案

一、SQL
-Server附加数据库时失败。
1、异常情况:服务器在正常运行的情况下突然断电,导致数据库文件损坏,具体表现是:数据库名后面有“(置疑)”字样。
2、异常分析:关于823错误的 SQL-SERVER 中的帮助:
================================

错误
823
严重级别
24
消息正文
在文件 "
%4!" 的偏移量 %3! 处的 %2! 过程中,检测到 I/O 错误 %1!。

解释
Microsoft SQL Server 在对某设备进行读或写请求时遇到 I
/O 错误。该错误通常表明磁盘问题。但是,错误日志中在错误 823 之前记录的其它核心消息应指出涉及了哪个设备。
3、解决办法:
在SQL
-Server企业管理器中,新建同名数据库(这里假设为Test)后,停止数据库,把损坏的数据库文件Data.mdf和 Test_log.LDF覆盖刚才新建数据库目录下的Data.mdf和Test_log.LDF,同时删除Test_log.LDF文件;启动数据库服务,发现数据库名Test后面有“置疑”字样。不要紧,打开SQL自带查询分析器,分别执行如下SQL语句:
第一、
exec sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE /* 打开修改系统表的开关 */
第二、
update sysdatabases set status=32768 where name='数据库名' /* 设置数据库状态 */
第三、
DBCC REBUILD_LOG ('数据库名','D:\database\Test_Log.LDF') /* 重建LDF文件 */
第四、
update sysdatabases set status=0 where name='数据库名' /* 重置数据库状态 */
第五、
restore database 数据库名 WITH RECOVERY /* 恢复数据库 */
第六、
exec sp_configure 'allow updates',0 RECONFIGURE WITH OVERRIDE /* 关闭打开修改系统表的开关 */
按照此方法操作,应该能修复数据库正常访问了。如果问题依然存在,最笨的一个方法就是新建另一个数据库,把原数据库(Test)各个表的数据导出到新建数据库表中。
============================================================
补充说明:用上面的六步把数据库置疑的问题解决了,但是数据库表里还有损坏的表(inf_gdscode),把坏表导出的时候也不成功。最后在查询分析器里运行:

USE nmgbt_hcxuexipos (数据库名)
GO
DBCC CHECKTABLE ('inf_gdscode',REPAIR_ALLOW_DATA_LOSS)
GO

按照上述方法进行仍然附加失败,进行日志创建时出错.

 

最后没有办法只能通过完整备份数据库文件和日志文件进行数据库恢复.

http://blog.csdn.net/lzy6871143/archive/2009/03/28/4031257.aspx

 

代码
SQL Server2000的事务备份与恢复,数据库的备份与恢复,还原点恢复 收藏

情况介绍

针对服务器出现崩溃,系统需要重装的这种情况。我们可以通过SQL SERVER2000恢复数据库。

恢复过程

情况假设:服务器上的SQL Server2000整个损坏了,然后重装了SQL Server2000,之前的数据库newgyhis没有了,对newgyhis的维护计划也没有了,但是你必须将数据库恢复到“2008年8月9日14点45分“这个状态,之前你有对数据库newgyhis做了两份完整备份,而且你的数据库的故障还原类型是“完全”,是“完全”这种类型才能对事务日志进行还原和备份。

,还有几份事务日志备份

,有了这些东西你就可以将数据库恢复最近的状态,看着事务日志的备份时间,你可以恢复到最近一个小时的数据。


1.新建数据库

控制台根目录-工具-向导-数据库-创建数据库向导

操作步骤如图

点击完成,就建好了数据库newgyhis

系统继续问你要不要建立数据库维护计划,点确定。
2、数据库维护计划

点击完成,就会弹出询问你是否启动SQLServerAgent这个服务,这个服务用来自动调动作业,就是用来执行数据库维护计划用的,所以它必须开启。

右击SQL Server代理,点击启动。

3.数据库属性的配置

右击数据库-属性-选项

将故障还原的模型选择为“完全”

点击确定,就完成对数据库的属性配置。
4.还原数据库

右击数据库newgyhis-所有任务-还原数据库

选择还原途径,选择“从设备”,还原设备组的类型选为“数据库-完全”

点击选择设备

点击“添加”

到这一步,点击选项,必须注意的地方就在这里了

在这里,要注意“移至物理文件名”这一项,这里选择”D:\newgyhis.mdf”系统自动生成newgyhis.mdf这个文件,路径选”D:\”是因为这条路径一定存在,也可以自己重新选择路径。

“恢复完成状态”必须选择“使数据库不再运行,但能还原其他事务日志”或“使数据库为只读,当能还原其它事务日志”,这样选才能恢复你为数据库newgyhis备份的事务日志,如果选第一项“使数据库可以继续运行,但无法还原其它事务日志”,那么你就无法还原你的事务日志。

点击确定

此时的数据库状态为“正在装载”,这表示你的数据库还原工作还未完成,应继续还原,这时就可以还原事务日志文件(以trn为后缀的文件名)

5.还原事务日志

继续右击“newgyhis”-所有任务-还原数据库

选择还原途径,选择“从设备”,还原设备组的类型选为“事务日志”

点击“选择设备”

在这里选择“newgyhis_tlog_200808091400.TRN”是因为它的备份日期与最近一次完全备份“newgyhis_db_200808091300.BAK”的日期最相近,为什么不选“newgyhis_tlog_200808091300.TRN”,因为它是在“newgyhis_db_200808081300.BAK”备份之前做的事务日志备份,要知道“newgyhis_db_200808091300.BAK”这名字代表什么意思,其中“newgyhis”代表数据库名称,”db”代表数据库也就是database的缩写,200808091338是指日期“2008年8月9日13点00分”。事务日志的命名也是如此。

点击确定

点击确定,选择“选项”

如果你只是想还原这一个事务日志的备份“newgyhis_tlog_200808091400.TRN”,而不需要还原“newgyhis_tlog_200808091500.TRN”就可以像上图一样选择“使数据库可以继续运行,但无法还原其它事务日志“。但是你要将数据库恢复到14点45分这个状态,你必须还原” newgyhis_tlog_200808091500.TRN“,所以你只能选择” 使数据库不再运行,但能还原其他事务日志。”

点击确定

此时你的数据库依然处于“正在装载”,你要继续还原“newgyhis_tlog_200808091500.TRN”事务日志,同上,到这一步的时候,

恢复完成状态,选择第一项就行了。当前你的数据库的状态就恢复到2008年08月09日15点00分这个状态了,可是你要恢复到“
1445”才对。此时

数据库的状态已经恢复正常了,这种状态才能接受连接。
6.数据库还原点

继续右击newgyhis-所有任务-还原数据库

选择“常规”将“时点还原”打勾,将弹出一个选择具体时间的点

将时间调为“2008年8月9日14点45分”

此时数据库newgyhis就处于”2008年8月9日14点45分”这个状态了。

 

 

posted on 2010-09-24 13:18  老杨~  阅读(10316)  评论(0编辑  收藏  举报