ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SQL Server 2005数据库日志丢失的恢复

SQL Server 2005数据库日志丢失的恢复

原创 Linux操作系统 作者:hky87 时间:2011-05-29 15:34:16 0 删除 编辑

网上关于SQL Server 2005数据库日志丢失的处理方法基本上都是修改数据库系统表,但是我测试N多遍都不成功,最后用英文关键字Google了下,发现一个可行方法,折磨了我两天的问题得以解决。。。

 

背景说明:名为testdb的数据库丢失了日志文件,仅有数据文件testdb.mdf

请先不要急于开始操作,如果你真的很急,请直接看我的成功试验方法(*下面的内容)

 

1.新建数据库testdb

 

2.停掉SQL Server服务器

 

3.删除刚刚创建好的testdb的日志文件testdb_log.ldf,将数据文件替换成上面提到的待恢复的数据库的数据文件testdb.mdf

 

4.启动SQL Server服务器,在Management Studio中重新连接,发现testdb数据库仍不可用

 

5.设置数据库的系统表为可修改

sp_configure  'allow updates',1

reconfigure  with   override

 

6.设置TEST为紧急修复模式

update  sysdatabases  set status=-32768  where  dbid=DB_ID('testdb')

訊息259,層級16,狀態1,行1

 

不允許對系統目錄的特定更新。(即不允许更新系统表)

此时需要利用DAC登入SQL Server进行修改,登入方式见http://space.itpub.net/10314474/viewspace-696409

 

设置SQL Serversingle_user 模式

D:\Documents and Settings\USERNAME>net stop "SQL Server (MSSQLSERVER)"

 

D:\Documents and Settings\USERNAME>net start "SQL Server (MSSQLSERVER)" /m

 

本以为到这里就看到了胜利的曙光,谁知又报错

 

訊息4406,層級16,狀態1,行1

由於內含衍生或常數欄位,導致檢視或函數'sys.sysdatabases' 的更新或插入失敗。

这个问题困扰了我很久,我想通过修改系统表的这种方法应该是不可行的了。

 

*******以上方法在网上广为流传,但我自己并未测试成功,不知是否有人成功过*******

 

***********************

以下方法经本人三次测试均成功:

当然方法的宗旨都是一样:重建日志文件

 

1.首先查看下数据库此时的状态

select  name,state,state_desc  from  sys.databases  where  name = 'testdb'

 

name   state state_desc

testdb 3   RECOVERY_PENDING

 

2.设置数据库为紧急模式

ALTER  DATABASE  testdb  SET  EMERGENCY

 

select  name,state,state_desc  from  sys.databases  where  name = 'testdb'

 

name   state state_desc

testdb 5   EMERGENCY

 

3.设置数据库为单用户模式

ALTER  DATABASE  testdb  SET  SINGLE_USER  WITH  ROLLBACK  IMMEDIATE

 

4.重建日志文件

DBCC  CHECKDB('testdb',REPAIR_ALLOW_DATA_LOSS)

 

返回的结果信息:檔案啟動錯誤。實體檔案名稱"D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\testdb_log.ldf" 可能不正確。

警告: 資料庫'testdb' 的記錄已經重建。已遺失交易一致性。RESTORE 鏈已中斷,伺服器已經沒有先前記錄檔的內容,因此您必須知道這些內容。應該執行DBCC CHECKDB 來驗證實體一致性。資料庫已進入僅限DBO 模式。您準備好讓資料庫能供使用後,必須重設資料庫選項,並刪除任何額外的記錄檔。

 

5.检查数据库状态

select  name,state,state_desc  from  sys.databases  where  name = 'testdb'

 

name   state state_desc

TEST   0  ONLINE

 

6.将数据库由单用户模式修改为多用户模式

ALTER  DATABASE  testdb  SET  MULTI_USER

 

数据库此时已可正常使用

  

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10314474/viewspace-696555/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-10-09

  • 博文量
    87
  • 访问量
    293269