SQL SERVER数据库日志文件被删后的恢复方法
来源:互联网 发布:非典阴谋知乎 编辑:程序博客网 时间:2024/04/29 04:38
前段时间我在清理服务器,看系统日志有错,我看C盘,原因C盘空间不足,于是我想删除一些文件,找了一下,发现一个数据库的日志文件非常大,好像有几个G,于是我就把SQL SERVER给停了,然后把这个日志文件给删除了,然后再开启SQL SERVER服务,但这时我发现数据库中的那个数据库出错了,找不到日志文件,成了“脱机”状态。网站上的行情数据一下全部停止更新,我一下吓着了。前年行情出错,罚了我50元,这次要是还不处理好,说不定一个月工资没有了。
网上搜了一下,大多数是你抄我,我抄他的,牛头不对马嘴。最后经过两个小时的寻找,再把网上找到的一些资料多次拼凑然后再尝试,终于把数据库给恢复了。后来我又有意在本地删除一个数据库的日志文件,用同样的方法也照样成功,看来这个方法成功率还是挺高的,具体操作如下:
1.我们使用默认方式建立一个数据库,和原数据库同名(如quote)。
2.停掉数据库服务器。
3.将刚才建立的数据库的日志文件quote_log.ldf删除。然后把原来那个无法打开的数据库文件mdf文件覆盖刚才生成的数据库数据文件quote_data.mdf
4.启动数据库服务器。此时会看到数据库quote的状态为“置疑”。
5.设置数据库允许直接操作系统表。此操作可以在“SQL企业管理器”里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
6.设置quote为紧急修复模式
update sysdatabases set status=-32768 where dbid=DB_ID('quote') (quote也就是数据库名)
此时可以在“SQL 企业管理器”里面看到该数据库处于“只读/置疑/脱机/紧急模式”可以看到数据库里面的表了。高兴呀~~
7.下面执行真正的恢复操作,重建数据库日志文件
dbcc rebuild_log('quote','数据库绝对路径/quote_log.ldf')
执行过程中,如果遇到下列提示信息:
服务器: 消息 5030,级别 16,状态 1,行 1
未能排它地锁定数据库以执行该操作。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系
说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用Sql企业管理器打开了quote库的系统表,那么退出Sql企业管理器就可以了。为了一防万一,我把所有的联接此数据库的程序都关了:)。把SQL SERVER的服务也给关了再重启。然后再执行上面的语句,这时他会告诉我quote_log.ldf已经存在了。这个时间我就非常放心了。
正确执行完成的提示应该类似于:
警告: 数据库 'quote' 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
此时打开在SQL企业管理器里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。
8.验证数据库一致性(可省略)
dbcc checkdb('quote')
我的结果是一串非常长的字符,一排挨一排的。说什么0错误的。
9.设置数据库为正常状态
sp_dboption 'quote','dbo use only','false'
出现结果说:有1行受影响的结果数。那就是成功了呀。
10.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接操作系统表是一件比较危险的事情(只知道很危险,到底怎么危险程度我没试过)。当然,我们可以在SQL企业管理器里面恢复,也可以使用如下语句完成
sp_configure 'allow updates',0
go
reconfigure with override
go
网上搜了一下,大多数是你抄我,我抄他的,牛头不对马嘴。最后经过两个小时的寻找,再把网上找到的一些资料多次拼凑然后再尝试,终于把数据库给恢复了。后来我又有意在本地删除一个数据库的日志文件,用同样的方法也照样成功,看来这个方法成功率还是挺高的,具体操作如下:
1.我们使用默认方式建立一个数据库,和原数据库同名(如quote)。
2.停掉数据库服务器。
3.将刚才建立的数据库的日志文件quote_log.ldf删除。然后把原来那个无法打开的数据库文件mdf文件覆盖刚才生成的数据库数据文件quote_data.mdf
4.启动数据库服务器。此时会看到数据库quote的状态为“置疑”。
5.设置数据库允许直接操作系统表。此操作可以在“SQL企业管理器”里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
6.设置quote为紧急修复模式
update sysdatabases set status=-32768 where dbid=DB_ID('quote') (quote也就是数据库名)
此时可以在“SQL 企业管理器”里面看到该数据库处于“只读/置疑/脱机/紧急模式”可以看到数据库里面的表了。高兴呀~~
7.下面执行真正的恢复操作,重建数据库日志文件
dbcc rebuild_log('quote','数据库绝对路径/quote_log.ldf')
执行过程中,如果遇到下列提示信息:
服务器: 消息 5030,级别 16,状态 1,行 1
未能排它地锁定数据库以执行该操作。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系
说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用Sql企业管理器打开了quote库的系统表,那么退出Sql企业管理器就可以了。为了一防万一,我把所有的联接此数据库的程序都关了:)。把SQL SERVER的服务也给关了再重启。然后再执行上面的语句,这时他会告诉我quote_log.ldf已经存在了。这个时间我就非常放心了。
正确执行完成的提示应该类似于:
警告: 数据库 'quote' 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
此时打开在SQL企业管理器里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。
8.验证数据库一致性(可省略)
dbcc checkdb('quote')
我的结果是一串非常长的字符,一排挨一排的。说什么0错误的。
9.设置数据库为正常状态
sp_dboption 'quote','dbo use only','false'
出现结果说:有1行受影响的结果数。那就是成功了呀。
10.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接操作系统表是一件比较危险的事情(只知道很危险,到底怎么危险程度我没试过)。当然,我们可以在SQL企业管理器里面恢复,也可以使用如下语句完成
sp_configure 'allow updates',0
go
reconfigure with override
go
- SQL SERVER数据库日志文件被删后的恢复方法
- MS sql server 数据库日志文件清除(压缩)和恢复日志文件的方法
- sql server 没有日志文件只有数据文件(.mdf) 的数据库恢复方法
- 恢复日志文件损坏的SQL Server 2005数据库
- Sql Server 数据库恢复和日志文件的详细介绍
- Sql Server 数据库恢复和日志文件的详细介绍
- SQL Server日志文件丢失的恢复方法
- SQL Server日志文件丢失的恢复方法
- SQL Server 2000日志文件丢失的恢复方法
- SQL Server 2005日志文件损坏的恢复方法
- SQL Server 2005数据库日志文件损坏的情况下如何恢复数据库
- SQL Server 2005数据库日志文件损坏的情况下如何恢复数据库
- SQL Server 2005数据库日志文件损坏的情况下如何恢复数据库
- SQL Server数据库的文件恢复技术
- sql server 2008误操作 恢复数据库的方法--日志尾部备份
- 缩减SQL Server数据库日志的方法
- 从日志中恢复SQL Server数据库
- SQL Server:无日志恢复数据库
- (转贴)【简介】如何编写linux下nand flash驱动
- 网络目录和搜索引擎有什么区别?
- 为ASP.NET控件添加常用的JavaScript操作
- 产能过剩令中国进退两难
- 票据交换
- SQL SERVER数据库日志文件被删后的恢复方法
- Apache2.2.9+Subversion1.5.5在windows下的配置与权限设置
- UC桌面1.3Patch 发布了
- 关于#define new DEBUG_NEW
- ClientAbortException: java.net.SocketException: Broken pipe
- 落花虽有意,流水本无情
- 解决Google App Engine的中文乱码问题
- SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 s
- 项目计划书格式