数据库紧急恢复过程

  数据库紧急恢复过程
当数据库失效时,请记录下当前时间,然后遵循下面步骤进行恢复。
 
1.         备份数据库。
成功,使用备份文件还原数据库,转第2步。
失败,转第3步。
 
2.         还原数据库(在另一个服务器操作)
(1)DECLARE @backup_device nvarchar(128), @log_backup_device nvarchar(128)
set @backup_device = N'F:/database/myDb.bak'
 
restore database MyDb
    from disk = @backup_device
WITH REPLACE , file=5
(2)根据事务日志来恢复到具体某个时间点
-- 首先基于一个完全备份点开始做事务日志还原 , 注意 [NORECOVERY] 参数
    RESTORE database ( 数据库名 ) from 完全备份设备名 with REPLACE,NORECOVERY,
    MOVE 'MyDb' TO 'D:/FMyDb_0606.mdf',
    MOVE 'FMyDb_Log' TO 'D:/FMyDb_Log_0606.ldf'
 
    -- 开始事务日志
    A. 查看事务日志点 :RESTORE HEADERONLY from disk=' 事务日志的备份的文件完全路径或备份设备名 '
 
    B. 开始恢复
    restore LOG  数据库名 from 事务日志备份设备名 with FILE=1, NORECOVERY
    restore LOG  数据库名 from 事务日志备份设备名 with FILE=2, NORECOVERY
    restore LOG  数据库名 from 事务日志备份设备名 with FILE=3,NORECOVERY   -- 倒数第二个备份日志
    restore LOG  数据库名 from 事务日志备份设备名 with FILE=4,RECOVERY -- 最后一个备份日志
 
 
执行失败的话,转下一步。
 
3.         复制数据库mdb, ldf文件。
执行 net stop mssqlserver 停止SQL Server服务,复制数据库mdb, ldf文件。
成功复制2个文件已经其他文件组,转第4步。
只能复制mdb文件,转第5步。
只能复制ldf文件,转第8步。
 
4.         附加数据库(数据库文件与日志文件)
CREATE DATABASE [MyDb2] ON
( FILENAME = N'F:/back/MyDb.mdf' )
,( FILENAME = N'F:/back/MyDb_log.ldf' )
 FOR ATTACH
如果出现失败,转第5步。
 
5.         附加数据库(只有数据库文件)
CREATE DATABASE [MyDb2] ON
( FILENAME = N'F:/back/MyDb.mdf' )
FOR ATTACH_REBUILD_LOG
如果失败,在SQL2000下,可以尝试(2005版本没有该功能)
dbcc   rebuild_log('MyDb','F:/MyDb_log.ldf')  
转第6步。
当服务器因为硬件失败导致数据库失效时,可能出现以下错误,转第6步:
文件激活失败。物理文件名称'f:/database/MyDb/MyDb_log.ldf'可能不正确。
由于数据库没有完全关闭,无法重新生成日志。
 
6.         强制附加数据库
a)         新建一个同名数据库
CREATE DATABASE [MyDb_temp]
     ON (NAME=MyDb_temp,     FILENAME = N'F:/temp/MyDb.mdf' )
 LOG ON (NAME=MyDb_temp _Log, FILENAME = N'F:/temp/MyDb_log.ldf')
b)         停止SqlServer
c)         将备份的数据库覆盖 F:/temp/MyDb.mdf
d)         启动SqlServer,( MyDb_temp 将变为不可用)
查看数据库状态
SELECT * FROM SYS.DATABASES
SELECT * FROM sys.database_recovery_status
 
e)         将数据库改为紧急恢复模式
ALTER    DATABASE   MyDb   SET   EMERGENCY
f)   修复数据库
DBCC CheckDB ('MyDb')
g)         将数据库改为但用户模式
ALTER    DATABASE   MyDb   SET   SINGLE_USER
h)         再带参数修复数据库
DBCC CheckDB ('MyDb',   REPAIR_REBUILD   )
i)           将数据库改为正常模式
ALTER    DATABASE   MyDb   SET   ONLINE
如果无法创建数据库日志,i步骤将失败,这时候如果能看到数据库表,和进行Select操作,转第7步。
 
7.         提取数据库数据
a)   创建一个新的临时数据库
b)   导出数据
执行 SELECT 'SELECT * INTO MyDb2..' +name+' FROM '+ name  FROM sys.objects WHERE TYPE = 'U' AND name!='sysdiagrams'
产生数据导出语句,执行他们,将数据复制到新数据库
c)   导出存储过程: 待续
d)   导出触发器: 待续
e)   导出函数: 待续
f)   导出自定义数据类型: 待续
g)   导出用户: 待续
h)   将新数据库还原到目标服务器
备份/还原这个新建的数据库到目标服务器
i)   修复孤立用户(SQL 2005 版)
a)   EXEC sp_change_users_login 'Auto_Fix', 'GameServer';
b)   EXEC sp_change_users_login 'Auto_Fix', 'backoffice';
c)   EXEC sp_change_users_login 'Auto_Fix', 'adminsoft';
j)           修复数据库拥有者
EXEC sp_changedbowner 'sa'
 
 
总结: 还是定时备份好。。。
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值