[分享] sql server 灾难恢复

[复制链接]
  • TA的每日心情
    开心
    2023-12-15 09:13
  • 签到天数: 55 天

    [LV.5]六品通判

    1197

    主题

    1965

    回帖

    13万

    积分

    Administrator

    分子与原子计算公式

    Rank: 9Rank: 9Rank: 9

    积分
    132061

    终身成就奖优秀斑竹奖宣传大使奖特殊贡献奖

    QQ
    发表于 2007-10-14 18:04:14 | 显示全部楼层 |阅读模式
    由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了。
    如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库,但是会出现类似下面的提示信息
    设备激活错误。物理文件名 'C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Log.LDF' 可能有误。
    已创建名为 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.LDF' 的新日志文件。
    但是,如果您的数据库文件是从其他计算机上复制过来的,那么很不幸,也许上述办法就行不通了。你也许会得到类似下面的错误信息
    服务器: 消息 1813,级别 16,状态 2,行 1
    未能打开新数据库 'test'。CREATE DATABASE 将终止。
    设备激活错误。物理文件名 'd:\test_log.LDF' 可能有误。
    怎么办呢?别着急,下面我们举例说明恢复办法。
    A.我们使用默认方式建立一个供恢复使用的数据库(如test)。可以在SQL Server Enterprise Manager里面建立。
    B.停掉数据库服务器。
    C.将刚才生成的数据库的日志文件test_log.ldf删除,用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_data.mdf。
    D.启动数据库服务器。此时会看到数据库test的状态为“置疑”。这时候不能对此数据库进行任何操作。
    E.设置数据库允许直接操作系统表。此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择“属性”,在“服务器设置”页面中将“允许对系统目录直接修改”一项选中。也可以使用如下语句来实现。
    use master
    go
    sp_configure 'allow updates',1
    go
    reconfigure with override
    go

    F.设置test为紧急修复模式
    update sysdatabases set status=-32768 where dbid=DB_ID('test')

    此时可以在SQL Server Enterprise Manager里面看到该数据库处于“只读\置疑\脱机\紧急模式”可以看到数据库里面的表,但是仅仅有系统表
    G.下面执行真正的恢复操作,重建数据库日志文件
    dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf')

    执行过程中,如果遇到下列提示信息:
    服务器: 消息 5030,级别 16,状态 1,行 1
    未能排它地锁定数据库以执行该操作。
    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
    说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager打开了test库的系统表,那么退出SQL Server Enterprise Manager就可以了。
    正确执行完成的提示应该类似于:
    警告: 数据库 'test' 的日志已重建。已失去事务的一致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库选项,并且可能需要删除多余的日志文件。
    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
    此时打开在SQL Server Enterprise Manager里面会看到数据库的状态为“只供DBO使用”。此时可以访问数据库里面的用户表了。
    H.验证数据库一致性(可省略)
    dbcc checkdb('test')

    一般执行结果如下:
    CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 'test' 中)。
    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
    I.设置数据库为正常状态
    sp_dboption 'test','dbo use only','false'
    如果没有出错,那么恭喜,现在就可以正常的使用恢复后的数据库啦。
    J.最后一步,我们要将步骤E中设置的“允许对系统目录直接修改”一项恢复。因为平时直接操作系统表是一件比较危险的事情。当然,我们可以在SQL Server Enterprise Manager里面恢复,也可以使用如下语句完成
    sp_configure 'allow updates',0
    go
    reconfigure with override
    go

    该用户从未签到

    44

    主题

    453

    回帖

    2214

    积分

    [INTOHARD]营长

    飞梦维修服务中心

    Rank: 6Rank: 6

    积分
    2214
    发表于 2008-4-3 19:07:45 | 显示全部楼层
    SQL数据库恢复是非常麻烦的事情,相信真正了解这方面的人也不算多!(38:

    该用户从未签到

    2

    主题

    735

    回帖

    732

    积分

    [INTOHARD]连长

    Rank: 4

    积分
    732
    发表于 2009-5-31 19:19:26 | 显示全部楼层
    看下,谢谢了啊

    该用户从未签到

    2

    主题

    94

    回帖

    96

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    96
    发表于 2009-6-18 16:46:33 | 显示全部楼层
  • TA的每日心情
    慵懒
    2019-12-2 13:47
  • 签到天数: 3 天

    [LV.2]九品芝麻官

    3

    主题

    375

    回帖

    763

    积分

    [INTOHARD]连长

    Rank: 4

    积分
    763
    发表于 2009-7-17 03:34:53 | 显示全部楼层
    哈哈,又时间研究试验一下。

    该用户从未签到

    2

    主题

    85

    回帖

    94

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    94
    发表于 2011-8-24 00:48:17 | 显示全部楼层
    这种方法我试过了,不好用啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    32

    回帖

    66

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    66
    发表于 2011-9-18 15:21:15 | 显示全部楼层
    谢谢分享。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2012-6-7 10:43
  • 签到天数: 2 天

    [LV.1]布衣百姓

    0

    主题

    98

    回帖

    68

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    68
    发表于 2012-6-12 10:44:39 | 显示全部楼层
    研究研究。支持楼主。感谢分享。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2013-5-29 08:27
  • 签到天数: 11 天

    [LV.3]八品县丞

    0

    主题

    167

    回帖

    284

    积分

    [INTOHARD]排长

    Rank: 3Rank: 3

    积分
    284
    发表于 2013-5-5 18:54:56 | 显示全部楼层
    支持楼主,谢谢咯
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表