数据库修复系列Part4:重建数据库日志文件

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

我们可能会遇到日志文件损坏或者被不小心删除的问题,导致数据库无法访问。在没有备份的情况下,可以用重建日志文件恢复数据库,但是可能会有数据丢失。 另外本篇文件还通过举例证明了日志文件的重要性(许多人说日志文件是可以删除的,这个是完全错误的)。

 1. select * from Test(有两条记录1,2)

查询结果:

idTest

-----------

1

2

 2. 更新一条记录(将1更改为3),但是不提交事务。

 begin tran

update Test set idTest=3where idTest= 1

 

checkpoint

 select * from Test

查询结果:

idTest

-----------

2

3

 (2 row(s) affected)

 3. 关闭SQL Server服务器

 

4. 删掉ldf文件重启Service,并且访问数据库会得到下面的错误:

 Msg 945, Level 14, State 2,Line 2

Database 'FNDBLogTest' cannotbe opened due to inaccessible files or insufficient memory or disk space. See the SQL Server errorlog for details.

 5. 重建日志文件:

 ALTER DATABASE FNDBLogTestREBUILDLOGON(NAME=FNDBLogTest_Log,

FILENAME='D:\ProgramFiles\Microsoft SQL Server\MSSQL10_50.R2\MSSQL\DATA\FNDBLogTest_Log.ldf')

 Warning: The log for database'FNDBLogTest' has been rebuilt. Transactional consistency has been lost.The RESTORE chain was broken, and the server no longer has context on theprevious log files, so you will need to know what they were. You should run DBCCCHECKDB to validate physical consistency. The database has been put in dbo-onlymode. When you are ready to make the database available for use, you will needto reset database options and delete any extra log files.

 6. 查询test表数据:

 select * from Test

 idTest

-----------

2

3

 (2 row(s) affected)

  注意:这里我们看到数据是3而不是1,跟我们期望的数据是不一致的。因为数据库关闭时事务还没有提交,正确的值应该是1.所以SQL Server的日志文件是非常重要的,不能随便删除。 SQL Server是利用日志文件做REDO/UNDO。重建日志只是建造一个正确的日志结构文件但是数据是空的(查看SQL Server事务可以参考我前面的两篇博客

 所以重建日志文件是在没有备份的情况下才会尝试的方法。

 

最后我们还需要运行DBCC CHECKDB检查数据库完整性:

 USE FNDBLogTest

GO

DBCC CHECKDB WITHNO_INFOMSGS


本文转自 lzf328 51CTO博客,原文链接:

http://blog.51cto.com/lzf328/957241
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
12天前
|
弹性计算 应用服务中间件 Shell
切割 Nginx 日志文件
【4月更文挑战第28天】
20 0
|
2天前
|
SQL 存储 小程序
数据库数据恢复—Sql Server数据库文件丢失的数据恢复案例
数据库数据恢复环境: 5块硬盘组建一组RAID5阵列,划分LUN供windows系统服务器使用。windows系统服务器内运行了Sql Server数据库,存储空间在操作系统层面划分了三个逻辑分区。 数据库故障: 数据库文件丢失,主要涉及3个数据库,数千张表。数据库文件丢失原因未知,不能确定丢失的数据库文件的存放位置。数据库文件丢失后,服务器仍处于开机状态,所幸未写入大量数据。
数据库数据恢复—Sql Server数据库文件丢失的数据恢复案例
|
4天前
|
存储 监控 Apache
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
网易的灵犀办公和云信利用 Apache Doris 改进了大规模日志和时序数据处理,取代了 Elasticsearch 和 InfluxDB。Doris 实现了更低的服务器资源消耗和更高的查询性能,相比 Elasticsearch,查询速度提升至少 11 倍,存储资源节省达 70%。Doris 的列式存储、高压缩比和倒排索引等功能,优化了日志和时序数据的存储与分析,降低了存储成本并提高了查询效率。在灵犀办公和云信的实际应用中,Doris 显示出显著的性能优势,成功应对了数据增长带来的挑战。
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
|
10天前
|
弹性计算 运维 Shell
自动日志文件轮转
【4月更文挑战第30天】
7 0
|
11天前
|
弹性计算 应用服务中间件 Shell
切割Nginx 日志文件
【4月更文挑战第29天】
20 1
|
11天前
|
存储 弹性计算 运维
统计/var/log 有多少个文件
【4月更文挑战第29天】
22 1
|
11天前
|
弹性计算 运维 Shell
|
11天前
|
弹性计算 运维 Shell
清理日志文件
【4月更文挑战第29天】
13 1
|
14天前
|
Java 数据安全/隐私保护 开发者
【SpringBoot】讲清楚日志文件&&lombok
【SpringBoot】讲清楚日志文件&&lombok
22 5
|
17天前
|
NoSQL MongoDB 数据库
MongoDB数据恢复—MongoDB数据库文件被破坏的数据恢复案例
服务器数据恢复环境: 一台Windows Server操作系统服务器,服务器上部署MongoDB数据库。 MongoDB数据库故障&检测: 工作人员在未关闭MongoDB数据库服务的情况下,将数据库文件拷贝到其他分区。拷贝完成后将原MongoDB数据库所在分区进行了格式化操作,然后将数据库文件拷回原分区,重新启动MongoDB服务,服务无法启动。