无法重建2005/2008数据库日志的原因分析 曾经有客户发Email给我说数据库日志文件损坏了,有没有办法让数据库上线。因为当时没有备份(备份在这种情况下作用就体现出来了,一定要做备份),所以只能尝试重建日志,通过重建日志将数据库恢复了。 但是重建日志功能不是对于所有情况适用用的,要满足两个条件: · A clean shutdown of the database. · All data files (MDF and NDF) must be available. www.2cto.com 下面我举个例子无法重建数据库日志: create database B go USE B GO --创建测试表 create table TEST(NAMEVARCHAR(20)) www.2cto.com ---创建一个事物但是不Commit BEGIN TRAN INSERT INTO testVALUES('KEVIN') CHECKPOINT --执行SHUTDOWN关闭SQLSERVER SHUTDOWN 然后将数据库的日志文件删除,这样我们的A数据库就是在事务没有结束的情况下Log损坏了。下面重建日志文件: USE [master] GO CREATE DATABASE [B]ON ( FILENAME = N'D:\Program Files\Microsoft SQLServer\MSSQL10_50.R2\MSSQL\DATA\B.mdf') FOR ATTACH_REBUILD_LOG GO www.2cto.com 错误信息: File activation failure. Thephysical file name "D:\Program Files\Microsoft SQLServer\MSSQL10_50.R2\MSSQL\DATA\A_log.ldf" may be incorrect. The log cannot be rebuilt because there were open transactions/users whenthe database was shutdown, no checkpoint occurred to the database, or the database wasread-only. This error could occur if the transaction log file was manuallydeleted or lost due to a hardware or environment failure. Msg 1813, Level 16, State 2,Line 1 Could not open new database'A'. CREATE DATABASE is aborted. 所以重建日志不是万能的。 |