记录SQL Server2008日志文件损坏的恢复过程

记录SQL Server2008日志文件损坏的恢复过程:

环境:系统Windows Server2003

数据库SQL Server2008

故障原因:通过mstsc链接同一服务器时,用户界面不一致。决定重启服务器,未正确关闭应用程序的情况下(程序在访问数据库),导致数据库日志文件损坏,自然也就无法访问mdf文件!(都是微软自家的产品,重启服务器为什么不能检查数据库的状态,将数据库设置在安全状态后在重启呢??所以,要养成良好的习惯。关闭现有数据库链接,再重启服务器)

故障表现:无法访问数据文件,就像下面JD_2数据库一样。

解决方案:

1:将数据库JD_2删除、或者分离(这里可能会提示无法删除或分离数据库,可以重启对应的数据库实例后再次尝试)

2:新建数据库,日志文件和数据文件名称和要恢复对应文件一样命名。

3:将新建的数据库设置为脱机模式,找到新建数据库的物理路径,将要恢复的mdf文件拷贝覆盖现有的mdf文件。

4:设置数据库为联机模式,刷新数据库,可以看到并没有什么卵用。

5:执行alter database JD_2 set emergency  将数据库设置为紧急模式。

执行:

use master

declare @databasename varchar(255)

set @databasename=‘JD_2‘ 
                                                                 
ALTER DATABASE WisdomAgriculturePlatform SET SINGLE_USER   //将目标数据库置为单用户状态

dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)

dbcc checkdb(@databasename,REPAIR_REBUILD)

ALTER DATABASE WisdomAgriculturePlatform SET MULTI_USER //将目标数据库置为多用户状态

6:刷新后数据库处于紧急模式,数据基本恢复。当前数据局处于紧急模式,无法对数据库备份。所以我们要恢复紧急模式为正常模式

7:执行 select * from sys.master_files 查看数据库基本信息和状态信息

8:执行 select * from sysdatabases 查看所有数据库的信息如下:

Status状态码含义:http://blog.csdn.net/nemo2011/article/details/9233777

执行:

方案1:

sp_configure ‘allow updates‘,1
reconfigure with override
update sysdatabases set status=0 where name=‘JD_New‘

更改数据库状态码,提示不允许更改=>sql server2008不支持对系统表的修改

方案2:

对于正常未损坏的数据库可以使用

ALTER DATABASE dbname SET EMERGENCY

ALTER DATABASE dbname SET ONLINE

在紧急模式和普通模式间切换。但是对于损坏过的数据,经验证此方法行不通。

参考了一些网上的办法,都没能解决问题!请朋友不吝赐教~~

时间: 2024-10-06 01:19:16

记录SQL Server2008日志文件损坏的恢复过程的相关文章

Mysql数据文件损坏如何恢复至最新状态

准备环境: 两台主机:A: 192.168.1.6   数据损坏B: 192.168.1.7   数据恢复 搭建步骤: 主机A(192.168.1.6): 完全备份数据库 mysqldump -A -F --single-transaction --master-data=1 > /backup/fullbak`date +%F`.sql Mysql数据文件损坏如何恢复至最新状态 原文地址:http://blog.51cto.com/9980200/2130012

简单记录一次REDO文件损坏报错 ORA-00333重做日志读取块出错

一.故障描述 首先是实例恢复需要用到的REDO文件损坏 二.解决方法 1.对于非当前REDO或者当前REDO但是无活动事务使用以下CLEAR命令: 用CLEAR命令重建该日志文件SQL>alter database clear logfile group 3: 如果是该日志组还没有归档,则需要用SQL>alter database clear unarchived logfile group 3: 因为是当前实例恢复需要用的REDO,且未归档,使用是CLEAR命令不行的. 2.没备份,有备份可

【恢复】Redo日志文件丢失的恢复

第一章 Redo文件丢失的恢复 1.1  online redolog file 丢失 联机Redo日志是Oracle数据库中比较核心的文件,当Redo日志文件异常之后,数据库就无法正常启动,而且有丢失据的风险,强烈建议在条件允许的情况下,对Redo日志进行多路镜像.需要注意的是,RMAN不能备份联机Redo日志文件.所以,联机Redo日志一旦出现故障,则只能进行清除日志了.清除日志文件即表明可以重用该文件. 1.1.1  数据库归档/非归档模式下inactive redo异常ORA-00316

SQL Server日志文件庞大收缩方法(实测好用)

原文:SQL Server日志文件庞大收缩方法(实测好用) 这两个命令连续执行,间隔时间越少越明显(可多次运行),直到达到效果 --截断 BACKUP LOG CloudMonitor TO DISK='NUL' --收缩 DBCC SHRINKFILE('CloudMonitor_log') 以后就可以采用常规的定期备份日志(比如一小时一次)来防止日志文件无限增长. SQL Server日志文件庞大收缩并非易事, 文章中提到: 由于首日志.尾日志和空间重复利用的原因,当备份日志后产生了日志截断

SQL Server日志文件过大 大日志文件清理方法 不分离数据库

SQL Server日志文件过大    大日志文件清理方法 ,网上提供了很多分离数据库--〉删除日志文件-〉附加数据库 的方法,此方法风险太大,过程也比较久,有时候也会出现分离不成功的现象.下面的方式是不需要做数据库分离和附加操作的. SQL 2008收缩清空日志方法: 1.在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完整模式,一定必务要再改回完整模式,不然数据库就不支持时间点备份了.1).选择数据库–属性-选项-恢复模式–选择简单.2).收缩数据库后,再调回完整.2

SQL server 日志文件收缩 与日志文件备份

在完整恢复模式下,SQL server需要定期备份日志,否则,日志文件会一直扩大,直到占满硬盘大小,在进行一次完整备份之后,可以定期备份日志文件 脚本如下: DECLARE @strbackup NVARCHAR(100) --改为日期加时间的 SET @strbackup = 'F:\bak\Test_bak_log_' + REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120), '-', ''), ' ', ''), ':', ''

SQL Server 日志文件增长原因定位

方法 1.sys.databases; ---------------------------------------------------------------------------------------------------------------------------------------------------------- 日志文件增长原因: 1.数据库的恢复不是simple.但是又长时间没有进行备份. 2.数据库中有一个很长时间没有提交的事务. 3.数据库有一个很大的事

mongodb文件损坏的恢复--无可恢复数据

1.mongodb 启动异常error code 100,检查日子文件损坏 2 检查collection-15-6548623434943640018.wt 可恢复数据,为空,不存在恢复的数据 3.使用wt删除该文件,会将collection和table同步删除,不可手动删除 4.重启mongodb,则mongodb正常 原文地址:https://www.cnblogs.com/CaesarLinsa/p/9822200.html

mysql 断电多次,日志文件损坏,无法启动的问题

断电引起的mysql无法启动的问题: 1.报错 shell>  mysql.server start                                                                                                    Starting MySQL .....................................................................................