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

网上关于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 Server为single_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

数据库此时已可正常使用

原文链接:http://blog.itpub.net/10314474/viewspace-696555/

时间: 2024-12-29 23:59:42

SQL Server 2005数据库日志丢失的恢复的相关文章

sql server 2005 数据库迁移问题总结——"错误15023:当前数据库中已存在用户或角色"

在数据库迁移过程中,如何设置不好用户与登录,会造成"错误15023:当前数据库中已存在用户或角色". 现在整理下思路: 1.在原数据库进行数据库备份 ***.bak 文件: 2.在新建数据库,建立与原数据库相同的登录名: 3.在新数据库上恢复备份的数据库文件 ***.bak 文件:选择覆盖原数据库文件: 4.将数据库恢复到其他服务器时,需要处理"孤立用户"的问题.具体解决办法如下: 用户和权限,但可能没有相应的登录或者登录所关联的用户可能不是相同的用户.这种情况被称

烂泥:SQL Server 2005数据库备份与恢复

本文由秀依林枫提供友情赞助,首发于烂泥行天下. 服务器的迁移,因为业务使用的数据库是SQL Server 2005,所以就要首先对数据库进行备份. 备份可以分为手动备份和自动备份,我们先来介绍手动备份. 打开SQL Server Management Studio, 点击要备份的数据库-"任务"-" 备份",如下图: 在"磁盘"选项中,选择自己要把数据库备份文件存放的磁盘,如下图: 以上操作完毕后,我们点击完成,数据库就开始备份,如下图: 通过上

【转载】SQL Server 2005数据库用户权限管理的设置

SQL Server 2005数据库中,我们可以设置每个用户对应的权限,以提高数据库的安全性.这类用户权限设置的应用非常广泛.比如设置某个用户访问某个表的权限,甚至是CRUD的权限,更小粒度的还可以去到某几个字段的访问权限等等.其实这一设置过程是很简单的,接下来就让我们来一起学习吧. 一.操作步骤 1. 首先进入数据库级别的[安全性]-[登录名]-[新建登录名] (图1:新建登录名) 2. 在[常规]选项卡中,如下图所示,创建登陆名,并设置默认的数据库. (图2:设置选项) 3. 在[用户映射]

烂泥:SQL Server 2005数据库安装

本文首发于烂泥行天下. 为了能更好的利用服务器,所以打算把该业务进行迁移.因为该业务比较特殊,需要服务器上有相应的硬件支持,所以打算直接升级该服务器目前的操作系统.目前公司服务器使用的windows server 2003 32bit企业版.如果使用虚拟机的话,只能安装32bitOS,所以打算直接升级OS,安装成windows server 2008 R2 64bit. 但是在进行升级之前,需要对该业务的数据库进行备份.该业务数据库使用的是SQL Server 2005.说实话,以前对SQLSe

SQL Server 2005无日志文件附加数据库

公司网站运营两年多了,日志文件超级大,在重装系统的时候,为了省事,就没有备份日志文件,而且是没有分离就把日志文件给删掉了(下次一定要记得先分离再删日志文件).结果造成数据库怎么都附加不上.出现错误. 解决办法: 1.新建一个同名数据库. 2.停止数据库服务,覆盖新建的数据库主文件(小技巧:最好放在同一个磁盘里面,把新建的数据库主文件删掉或移开,再把要恢复的数据库主文件剪切过去,这样就可以节省时间.) 3.启动数据库服务,数据库变为置疑或可疑状态.然后在查询分析器中运行: alter databa

SQL server 2005 数据库镜像详细过程

1.添加完整的域名后缀 重启系统 右键计算机 ==> 属性 ==> 更改设置(计算机名) ==> 更改 ==> hq.com 2.SQL服务启动账户 创建相同的用户账户 密码也必须相同 并且加入到管理员组 配置用户名密码: net user hqsqluser HqsqlQWE19832 /add 将用户加入到组: net localgroup administrators hqsqluser /add 查看命令 net user hqsqluser 删除users组 net lo

实战 SQL Server 2008 数据库误删除数据的恢复

关键字:SQL Server 2008, recover deleted records 今天有个朋友很着急地打电话给我,他用delete语句误删除了SQL Server 2008数据库中两个表中的所有记录,而这个数据库之前没有任何备份.让我帮他解决一下,不然他要赔偿客户很多钱. SQL Server中误删除数据的恢复本来不是件难事,从事务日志恢复即可.但是,这个恢复需要有两个前提条件: 1. 至少有一个误删除之前的数据库完全备份. 2. 数据库的恢复模式(Recovery mode)是“完整(

SQL server 2005数据库的还原与备份

一.SQL数据库的备份: 1.依次打开 开始菜单 → 程序 → Microsoft SQL Server 2005→SQL Server Management Studio ,这里我以UMVTEST命名的数据库来教大家备份功能: 2.选择要备份的数据库"UMVTEST",点击鼠标右键 → 任务 → 备份,如图: 二.SQL数据库的还原: 1.选择您要还原的数据库"UMVTEST",点击鼠标右键 → 任务 → 还原 → 数据库,如图: 2.在出现的"还原数据

修改SQL Server 2005 数据库文件名字

对于SQLServer 2005的数据库文件名字的修改.不多说,见图: 对于数据库名的更改直接选中要修改的数据库,F2,你懂的,不懂的可以去屎了.....0.0 下面要修改数据库的文件名 原理就是利用SQL Server 2005  的备份.还原功能实现 先备份数据库: 备份成功后再还原,还原的时候就可以修改文件名了...... 确定,,,,OK