zoukankan      html  css  js  c++  java
  • 数据库紧急恢复过程

      数据库紧急恢复过程
    当数据库失效时,请记录下当前时间,然后遵循下面步骤进行恢复。
     
    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'
     
     
    总结:还是定时备份好。。。
  • 相关阅读:
    retain assign copy (unsigned long)
    myeclipse未设置断点,但不断跳出debug
    SOAP tomcat7.0 HelloWorld
    JAVA第二天数据类型和循环
    java中产生随机数的几种方法
    java的第一个程序 Hello World
    java中产生随机数的几种方法
    用加减来简单的看策略类
    用加减来简单的看策略类
    奇数阶幻方
  • 原文地址:https://www.cnblogs.com/xyfy/p/2011276.html
Copyright © 2011-2022 走看看