LDF文件丢失, 如何仅用MDF文件恢复数据库呢?

笔者的一个大小为2 TB的SQL Server的database的LDF文件在玩存储盘映射的过程当中莫名其妙的丢失了. 好在MDF文件还在. 笔者慌了, Bruce Ye告诉笔者, 不用着急, 光用MDF也能够把数据库弄回来的. 笔者就问Bruce, 假设我能够容忍LDF中信息的丢失的话, 那么该如何恢复这个数据库呢?php

 

咱们执行了下面的步骤:sql

1. 在SQL Server Management Studio中删除状态为Recovery Pending的(即丢失了LDF的)问题数据库.数据库

2. 重命名老的MDF文件.session

3. 重建一个新的数据库, 名字跟刚刚删除的数据库彻底同样. 注意, 新的MDF的位置跟咱们老的MDF的文件的位置相同. 这里的LDF文件的位置选在你想要存放的最终位置上(这个就是你所要的被恢复的LDF文件了).wordpress

4. 停掉SQL Server服务, 将新的MDF重命名掉, 老的MDF命名回原来的名字.ui

5. 启动SQL Server服务, 这时这个数据库的状态会变为Recovery Pending. 咱们开始执行下面的脚本.code

alter database contentdb1 set emergency
alter database contentdb1 set single_user with rollback immediate
alter database contentdb1 rebuild log on (name=ContentDB1_log, filename='E:\CDBLOG\contentdb1log.ldf')
ALTER DATABASE contentdb1 SET MULTI_USER with rollback immediate

 

5. 这时数据库的状态就应该恢复正常了.orm

 

问题解决.server

 

笔者在运行上面的脚本的时候, 遇到了一个报错. 在运行了命令alter database contentdb1 set single_user with rollback immediate以后, 运行alter database contentdb1 rebuild log on 的时候说数据库在single user mode, 个人当前用户没法执行命令.ci

我使用了命令exec sp_who2, 发现个人contentdb1上有个suspend的session, 执行命令kill XY 杀掉这个死掉的session以后, 问题解决.

 

参考资料

=====================

SQL – Get Exclusive Lock – Fix for The database could not be exclusively locked to perform the operation error

http://robbamforth.wordpress.com/2009/11/13/sql-get-exclusive-lock-fix-for-the-database-could-not-be-exclusively-locked-to-perform-the-operation-error/

Rebuilding Transaction Log in SQL Server 2000, 2005, 2008

http://database-wiki.com/2011/03/06/rebuilding-transaction-log-in-sql-server-2000-2005-2008/

CHecking SQL Acitivity

http://networking.ringofsaturn.com/SQL/sql-activity.php

How to recover database from MDF in SQL Server 2005?

http://stackoverflow.com/questions/773059/how-to-recover-database-from-mdf-in-sql-server-2005

相关文章
相关标签/搜索