oracle 10g数据库备份与还原总结

一.总述

  1. 数据库归档模式
    • 非归档模式:当数据库数据只读不会改变时,数据不会改变,数据库适合用非归档模式,这样提高性能
    • 归档模式:对于数据库数据经常变动,数据库最好用归档模式,这样可以尽量避免数据库数据丢失,使出现问题时灾害降到最低
  2. 非归档模式与归档模式间的切换(在命令窗口下):
    • 检查当前日志操作模式:
      f:>sqlplus sys/dba as sysdba
      连接数据库
      sql>select log_mode from v$database;
    • 关闭数据库,后装载数据库,只能在mount状态下改变日志操作模式
      sql>startup mount
    • 改变日志模式
      sql>alter database achivelog;(变为归档方式,否则为nochivelog)
      sql>alter database open;
  3. 查看归档模式相关信息:
    • 若采用默认设置,归档日志位置在快速恢复区
    • 配置归档日志位置 log_archive_dest_n (n=[1:10])
      sql>alter system set
      log_archive_dest_1 = ‘location =c:demoarchive [optional]‘;
      sql>alter system set
      log_archive_dest_2 = ’service =standby [mandatory] [reopen]‘;
      其中:location 是本地;
      service 是远程;
      optional 无论归档是否成功,都会覆盖重做日志;
      mandatory只有成功归档才会覆盖重做日志;
      reopen 重新归档时间间隔 默认是300s。
    • 显示归档信息,即显示显示日志操作模式
      sql>select name,log_mode from v$database;
    • 显示归档日志信息
      sql>select name,sequence#,first_change# from v$archive_log;
      sequence#: 归档序列号
      first_change# : 起始SCN值
    • 显示归档日志位置
      sql>select dest_name,destination,status from v$archive_dest;
      dest_name 归档位置参数名
      destination 位置
    • 显示日志历史信息
      sql>select * from v$loghist;
      threade# : 重做线程号
      sequence# : 日志序列号
      first_change# : 起始SCN值
      first_time : 起始SCN发生时间
      switch_change : 切换SCN值

二.非归档模式下的备份与还原

  • 日志采用覆盖原有日志的方式存储
  • 出现介质失败时,只能恢复到过去的完全备份点
  • 数据库OPEN状态是,不能备份数据库
  • 必须先关闭数据库,再备份,且必须备份所有数据,控制文件
  1. 备份==冷备份
    • 先关闭数据库
      sql>shutdown immediate
    • 拷贝所有数据文件,和控制文件
  2. 恢复
    • 数据文件出现丢失,但备份以来的重做日志内容尚未被覆盖,此时可以完全恢复
      • 装载数据库
        sql>startup force mount
      • 复制数据文件备份
      • 恢复数据文件
        sql>recover datafile 1
      • 打开数据库
        sql>alter database open;
    • 备份文件的重做日志内容已经被覆盖,则只能还原到备份点
      • 关闭数据库
      • 复制所有数据和控制备份文件至原位置
      • 装载数据库,执行恢复命令
        sql>startup mount
        sql>recover database until cancel
        提示控制文件不再使用原有重做日志
      • 用resetlogs选项打开数据库
        sql>alter database open resetlogs;

三.归档模式

  • 可以防止数据丢失
  • 数据处于OPEN状态时可以进行备份
  • 当出现介质失败时,除了SYSTEM表空间中的数据文件外其他的都可以在open状态下恢复
  • 可执行完全恢复,也可以恢复到备份点与失败点之间的某时刻
  1. 备份
    1. 冷备份
      shutdown后拷贝所需数据文件和控制文件
    2. 热备份
      • 将数据库设置为归档模式
      • 在数据库上发出全局检查点,在所有的数据文件头块上加锁
        sql>alter database begin backup ;
      • 备份数据文件及控制文件
        数据文件直接拷贝至其他目录
        控制文件需使用alter database backup controlfile
        sql>alter database backup controlfile to ‘d:backupdemo.ctl’;
      • 结束数据备份,为确保数据文件备份的同步性,还应该归档当前日志组
        sql>alter database end backup;
        sql>alter system archive log cuurent;
    3. 备份表空间
      • 脱机备份(表空间处于OFFLINE状态,SYSTEM表空间和正在使用的UNDO空间不能脱机)
        • 确定表空间包涵的数据文件,如空间USERS
          sql>select file_name from dba_data_files
          where tablespace_name = ‘users’;
        • 设置表空间为脱机状态
          sql>alter tablespace users offline;
        • 复制数据文件
        • 设置表空间联机
          sql>alter tablespace users online;
      • 联机备份
        • 确定对应关系
        • 设置表空间为备份模式
          sql>alter tablespace users begin backup ;
        • 复制数据文件
        • 设置表空间为正常模式
          sql>alter tablespace users end backup ;
      • 处理联机备份失败
        当执行联机备份时,若出现例程失败,再次打开数据库时,如果数据文件仍处于备份状态,则会出错,此时需要结束备份
        • 装载数据库
          sql>startup force mount
        • 查看处于联机备份状态的所有数据文件
          sql>select file# from v$backup where status = ‘active’;
        • 结束联机备份状态
          sql>alter tablespace end backup
          或alter tablespace datafile backup;
          或recover datafile 序号
        • 打开数据库
          sql>alter database open;
  2. 还原
    1. 完全恢复
      相关命令:
      recover database :恢复数据库的多个数据文件(在MOUNT状态下运行)
      recover tadaspace :恢复多个表空间的所有数据文件(在open状态下运行)
      recover datafile :恢复一个或多个数据文件(在mount,open状态下都可)
      • 在mount状态下恢复数据文件(用于SYSTEM表空间恢复)
        • 装载数据库 mount状态
        • 确定需要恢复的数据文件
          sql>select file#,error from v$recover_file
        • 拷贝备份至原位置
        • 恢复数据库 recover..上述命令
        • 打开数据库 alter database open;
      • 在open状态下恢复关闭后意外对视的数据文件,此时数据库将无法打开
        • 装载数据库 mount
        • 确定需要恢复的数据文件
        • 使相应的数据文件脱机
          sql>alter database datafile 4 offline;
        • 打开数据库
          sql>alter database open
        • 复制数据备份文件
        • 恢复数据文件
        • 是数据文件联机 alter database datafile 4 online;
      • 在open状态下恢复打开时意外丢失的数据文件
        • 确定要恢复的数据文件
        • 使数据文件脱机
        • 复制数据文件
        • 恢复相应的表空间或数据文件
        • 使相应的表空间或数据文件联机
      • 在open状态下恢复未备份的数据文件(要求在归档模式下,新建数据文件,其从简历开始的所有归档日志必须全部存在)
        • 装载数据库
        • 确定要恢复的数据文件
        • 是数据文件脱机
        • 打开数据库
        • 重新建立数据文件
          sql>alter database create datafile ‘d:demousers01.dbf’;
        • 恢复数据文件
        • 使数据文件联机
    2. 不完全恢复
      使用已备份的数据文件,归档日志,和重做日志,将数据库恢复到备份点与失败点之间某个时刻的状态
      • 恢复分类
        基于时间的恢复:误删除表,误截断表,提交了错误的数据;
        基于取笑恢复:恢复到某个日志序列号之前的状态;
        基于SCN的恢复:恢复到特定SCN值的状态;
        基于备份控制文件恢复:表空间被意外删除,或所有控制文件全部损坏。
      • 不完全恢复指令
        recover database until time
        recover database until change
        recover database until cancel
        recover database .. using backup controlfile
      • 基于时间的恢复
        • 关闭数据库(为防止备份失败,应备份当前数据库所有文件
        • 装载数据库 startup mount
        • 复制所有备份数据文件,并确定备份文件的时间点
          sql>select file#,to_char(time,’yyyy-mm-dd hh24:mi:ss)
          from v$recover_file;
        • 执行recover database until time
          sql>recover database until time “2006-09-26 16:40:33′
        • 以resetlogs方式打开数据库,并检查恢复结果
          sql>alter database open resetlogs;
        • 备份数据库所有数据文件和控制文件,因为当以resetlogs方式打开数据库后会重新建立重做日志,清空原有重做日志的所有内容,并将日志序列号复位为1。
          sql>select name from v$datafile;
          sql>alter database begin backup;
          拷贝数据文件
          sql>alter database end backup;
          sql>alter database backup controlfile
          to ‘d:backupdemo.ctl’ reuse;
          sql>alter system archive log cuurent;
      • 基于SCN恢复
        • 关闭数据库
        • 装载数据库 mount
        • 复制所有备份数据文件,确定备份文件SCN值
          sql>select file#,change#, from v$recover_file;
        • 执行recover database until change
          sql>recover database until change 675978;
        • 以resetlogs方式打开数据库
        • 备份数据库所有数据文件和控制文件
      • 基于取消恢复
        • 关闭数据库
        • 装载数据库
        • 复制所有备份的数据文件,确定备份文件的SCN值
          sql>select file#,change# from v$recover_file;
        • 执行recover database until cancle
          sql>recover database until cancel
        • 以resetlogs方式打开数据库
        • 备份所有数据文件和控制文件
      • 基于备份控制文件的恢复
        • 通过查看alert文件,确定误操作时间
        • 关闭数据库
        • 复制所有备份的数据文件,控制文件
        • 装载数据库
        • 执行recover database ..using backup controlfile
          sql>recover database until time ‘2004-09-26 19:51:06′
          using backup controlfile
        • 以resetlogs 方式打开数据库
        • 备份所有数据文件和控制文件
立即发现·数据价值

推荐阅读

→ jasperReport+Ireport和FineReport报表的对比 → 3张报表搞定财务分析 → 帆软报表平台的使用方法 → 如何利用CRM系统报表,提高企业的核心竟争力? → 自定义报表之自定义参数界面 → 3步搞定销售分析报表 → 用了这款自动化表格制作软件,跟手工表格说再见 → 对企业而言,为何要选择优质的内部报表系统? → 生产报表的自动化实现方案 → BIRT报表深度解析之BIRT中国企业级用户流失之谜
版权所有©2017 南京帆软软件有限公司 | 苏ICP备14031611号-3
返回顶部