数据库紧急恢复过程

系统 1910 0
   数据库紧急恢复过程
当数据库失效时,请记录下当前时间,然后遵循下面步骤进行恢复。
 
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'
 
 
总结: 还是定时备份好 。。。

数据库紧急恢复过程


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论