博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

DBA1 第十六章:执行数据库恢复

Posted on 2011-09-12 20:00  little健健  阅读(227)  评论(0编辑  收藏  举报

打开数据库(复习)

  • NOMOUNT:必须读取初始化参数,不会检查任何数据文件
  • MOUNT:检查初始化参数文件中列出的所有控制文件是否都存在且已同步
  • OPEN
    • 检查控制文件知道的所有重做日志组是否都至少有一个成员。任何缺失的成员都会记录在预警日志中。
    • 验证控制文件知道的所有数据文件是否存在,但不验证脱机文件。
      • 如果缺失了任何文件,就会向管理员返回一个错误,指出第一个缺失的文件,此时实例保持在MOUNT状态
        SQL> SELECT name, error 
        FROM v$datafile
        JOIN v$recover_file
        USING (
        file#)

使数据库保持在打开状态

  • 打开实例后,如果丢失了以下项,实例会失败
    • 任何控制文件
    • 属于系统或还原表空间的数据文件
    • 整个重做日志组。只要组中至少有一个成员可用,实例就会保持在打开状态。
  • 丢失了控制文件
    • 关闭实例(如果它仍处于打开状态)。
      • shutdown abort
    • 通过复制现有控制文件还原缺失的控制文件。
      • cp  .... to ...
    • 启动实例
      • startup
  • 丢失了重做日志文件
    • 丢失了单个重做日志组成员后进行恢复并不会影响运行的实例。
    • 恢复步骤
      • 检查预警日志,确定是否有缺失的日志文件。
      • 先删除丢失的重做日志成员    SQL> ALTER DATABASE DROP LOGFILE MEMBER 'redo01a.log';
      • 添加新的成员以替换丢失的重做日志成员   SQL> ALTER DATABASE ADD LOGFILE MEMBER 'redo01a.log'  TO GROUP 2;
      • 如果介质故障是由于丢失了磁盘驱动器或控制器造成的,请重命名缺失文件。
      • 如果重做日志组已归档,或者您处于 NOARCHIVELOG模式下,则可选择在清除日志组后重新创建缺失文件来解决问题。  SQL> ALTER DATABASE CLEAR LOGFILE GROUP #; 
  • 在 NOARCHIVELOG 模式下丢失了数据文件
    • 关闭实例(如果尚未关闭)。
    • 从备份还原整个数据库,包括所有数据和控制文件
    • 打开数据库
    • 让用户重新输入自上次备份以来所做的所有更改
  • 在 ARCHIVELOG 模式下丢失了非关键数据文件(不属于system或undo表)
    • 无需关闭数据库,还原时选择数据文件
  • 在 ARCHIVELOG 模式下丢失了系统关键数据文件
    • 使用 SHUTDOWN ABORT 关闭实例
    • 装载数据库
    • 还原并恢复缺失的数据文件
    • 打开数据库