• Oracle_高级功能(10) 备份恢复


    备份与恢复
    Oracle数据库有三种标准的备份方法,分别是导出/导入(EXP/IMP)、热备份和冷备份。
    导出/导入是一种逻辑备份,冷备份和热备份是物理备份。
    一、导出/导入(Export/Import)
    利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去。
    数据导入(Import)的过程是数据导出(Export)的逆过程,
    分别将数据文件导入数据库和将数据库数据导出到数据文件。

    1、全量导出数据(Export)和导入数据(Import)
    Oracle支持三种方式类型的输出:
    1.1 表方式(T方式),将指定表的数据导出、导入。
    导出表:
    exp system/123 tables=scott.dept file=e:dept.dmp
    exp system/123@orcl tables=scott.dept,scott.emp file=e:empdept.dmp
    log=e:explog_empdept.log

    导入表:
    drop table scott.emp;
    drop table scott.dept;
    --drop table scott.dept cascade constraints;
    imp system/123@orcl fromuser=(scott) touser=(scott) tables=(dept,emp)
    file=e:empdept.dmp log=e:implog_empdept.log

    1.2 用户方式(U方式),将指定用户的所有对象及数据导出、导入。
    exp system/123@orcl owner=(scott) file=e:scott.dmp log=e:scott_exp.log buffer=655000 compress=y

    --常用
    connect system/123@orcl;
    --删除用户--
    drop user find cascade;
    --删除表空间--
    drop tablespace ts_find including contents;
    --创建表空间及数据文件--
    create tablespace ts_find01 datafile 'E:apporadataorcl s_find01.DBF' size 100M reuse autoextend on next 10M;
    --创建用户并授权--
    create user find identified by find default tablespace ts_find01;
    grant resource,connect to find;
    grant select any sequence to find;
    grant create any table,alter any table,drop any table to find;
    grant select any table,insert any table,update any table,delete any table to find;
    grant create any trigger,alter any trigger,drop any trigger to find;
    grant create any procedure,alter any procedure,drop any procedure,execute any procedure to find;
    grant create any view,drop any view to find;
    grant create any synonym to find;

    imp system/123@orcl fromuser=(scott) touser=(find) buffer=655000
    ignore=y commit=y file=e:scott.dmp log=e:scott_imp.log

    1.3 全库方式(Full方式),将数据库中的所有对象导出。
    exp system/123@orcl file=e:full.dmp log=e:full_exp.log full=y buffer=655000 compress=y

    --一般不用
    imp system/123@orcl full=y buffer=655000 ignore=y commit=y file=e:full.dmp log=e:full_imp.log

    2、增量导出/导入
    增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为SYSTEM来导出。
    导出文件名缺省为export.dmp,如果不希望自己的输出文件定名为export.dmp,必须在命令行中指出要用的文件名。
    增量导出包括三种类型:
    2.1“完全”增量导出(Complete)
    即备份完整的数据库信息,
    比如:
    exp system/system@orcl inctype=complete file=e:complete.dmp log=e:complete_exp.log
    2.2“增量型”增量导出
    备份上一次备份后改变的数据,
    比如:
    exp system/manager inctype=incremental file=e:incremental.dmp log=e:incremental_exp.log
    2.3“累积型”增量导出
    累计型导出方式是导出自上次“完全”导出之后数据库中变化了的信息。
    比如:
    exp system/manager inctype=cumulative file=e:cumulative.dmp log=e:cumulative_exp.log
    数据库管理员可以排定一个备份日程表,用数据导出的三个不同方式合理高效的完成。
    比如数据库的被封任务可以做如下安排:
    星期一:完全备份(A)
    星期二:增量导出(B)
    星期三:增量导出(C)
    星期四:增量导出(D)
    星期五:累计导出(E)
    星期六:增量导出(F)
    星期日:增量导出(G)
    如果在星期日,数据库遭到意外破坏,数据库管理员可按一下步骤来回复数据库:
    第一步:用命令create database重新生成数据库结构;
    第二步:创建一个足够大的附加回滚。
    第三步:完全增量导入:
    imp system/manager inctype=restore full=y file=e:complete.dmp
    第四步:累计增量导入:
    imp system/manager inctype=restore full=y file=e:cumulative.dmp
    第五步:最近增量导入:
    imp system/manager inctype=restore full=y file=e:incremental.dmp

    二、冷备份
    冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。
    冷备份是将关键性文件拷贝到另外的位置的一种说法。
    对于备份Oracle信息而言,冷备份是最快和最安全的方法。
    冷备份的优点是:
    1.是非常快速的备份方法(只需拷文件)
    2.容易归档(简单拷贝即可)
    3.容易恢复到某个时间点上(只需将文件再拷贝回去)
    4.能与归档方法相结合,做数据库“最佳状态”的恢复。
    5.低度维护,高度安全。
    但冷备份也有如下不足:
    1.单独使用时,只能提供到“某一时间点上”的恢复。
    2.再实施备份的全过程中,数据库必须要作备份而不能作其他工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
    3.若磁盘空间有限,只能拷贝到磁带等其他外部存储设备上,速度会很慢。
    4.不能按表或按用户恢复。
    冷备份中必须拷贝的文件包括:
    1.所有数据文件
    2.所有控制文件
    3.所有联机REDO LOG文件
    4.Init.ora文件(可选)
    值得注意的是冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的。
    下面是作冷备份的完整例子。
    (1) 关闭数据库
    sqlplus /nolog
    sql>connect / as sysdba
    --sql>shutdown normal;
    sql>shutdown immediate;
    (2) 用拷贝命令备份全部的时间文件、重做日志文件、控制文件、初始化参数文件
    sql>cp
    (3) 重启Oracle数据库
    sql>startup

    startup nomount --加载参数文件
    alter database mount
    recover datafile 'E:apporadataorclFIND.DBF';
    alter database open

    三、热备份
    热备份是在数据库运行的情况下,采用archivelog mode方式备份数据库的方法。
    热备份要求数据库在Archivelog方式下操作,并需要大量的档案空间。
    1. 检查数据库模式:
    sqlplus /nolog
    conn /as sysdba
    archive log list (查看数据库是否处于归档模式中)

    若为非归档,则修改数据库归档模式。
    shutdown immediate; --立即关闭数据库
    startup mount; --启动数据库到mount状态
    alter database noarchivelog;--设置非归档模式
    alter database archivelog;--设置归档模式
    alter database open;--打开数据库
    alter system set log_archive_start=true scope=spfile; --将数据库设置成自动归档
    alter tablespace ts_find begin backup; --开启备份
    host copy F:apporacleoradataorclFIND.DBF e:FIND.DBF --拷贝文件(包括数据文件和控制文件)
    alter tablespace ts_find end backup; --结束备份

    --备份日志
    select * from v$backup;

    四、RMAN
    1.启动日志归档模式:
    sql> alter database archivelog;
    2.手工创建操作系统目录:E: man
    3.备份语句
    run {
    configure retention policy to recovery window of 2 days;
    configure controlfile autobackup on;
    configure controlfile autobackup format for device type disk to 'E:/rman/%F';
    allocate channel ch1 device type disk format 'E:/rman/data_%T_%U';
    backup database skip inaccessible filesperset 10
    plus archivelog filesperset 20
    delete all input;
    release channel ch1;
    }
    allocate channel for maintenance device type disk;
    crosscheck backupset;
    delete noprompt obsolete;

    说明:
    通过 configure retention policy to recovery window of 7 days;来设置备份的保留天数,如果是“每天一次全备份”,备份保留2天即可。
    通过 crosscheck backupset;检查备份是否过期。
    通过 delete noprompt obsolete; 删除过期的备份。

    4.建表、插数据
    create table backup_sales
    (
    product_id number(10),
    sales_date date,
    sales_cost number(10,2),
    status varchar2(20)
    );
    insert into backup_sales values (1,sysdate-10,18.23,'inactive');
    commit;

    5.启用rman做全库备份
    运行第3步的备份语句
    从日志文件中看出:
    Control File and SPFILE:E:RMANC-1275904369-20110429-00
    数据文件:E:RMANDATA_20110429_1DMB01T6_1_1
    日志文件:E:RMANDATA_20110429_1CMB01T2_1_1 和 E:RMANDATA_20110429_1EMB022O_1_1
    备份检查完成。
    6.再插数据
    insert into backup_sales values (2,sysdate-5,18,'inactive');
    commit;

    --切换日志(手动触发检查点)
    connect sys/123@orcl as sysdba;
    alter system switch logfile;

    --继续插数据
    insert into backup_sales values (3,sysdate-3,88.23,'inactive');
    commit;
    insert into backup_sales values (4,sysdate-1,8.23,'inactive');

    --全库恢复
    1.连接rman
    rman target /
    2.启动数据库到加载状态
    rman> shutdown immediate;
    rman> startup mount;
    3.执行修复、恢复操作
    rman> restore database;
    rman> recover database;
    4.打开数据库(恢复完成退出rman)
    rman> alter database open;
    rman> exit;
    5.校验
    SQL> select * from backup_sales;

    三条数据齐全,说明数据库在恢复时启用日志文件对数据进行了恢复。
    增量备份已现多余,检查点也无需用户手动触发,
    oracle在备份前会归档一次日志文件,在备份后也会归档一次日志文件,这也是为什么备份时生成两个日志文件的原因。

  • 相关阅读:
    Python学习之路【第三篇】--集合
    Python学习之路【第二篇】-pyc简介、Python常用的数据类型及其用法和常用运算符
    Python学习之路【第一篇】-Python简介和基础入门
    NotePad++ 配置Python工作环境
    码农跳槽指南:如何在新公司建立自己的“支配地位”?
    python实现简单的聊天小程序
    真正努力的人,从来不焦虑
    我在公司待了6年,清退我却只花了6分钟
    只有潮水退去后,才知道谁在裸泳
    什么是rpc
  • 原文地址:https://www.cnblogs.com/BradMiller/p/9279927.html
Copyright © 2020-2023  润新知