zoukankan      html  css  js  c++  java
  • 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在备份前会归档一次日志文件,在备份后也会归档一次日志文件,这也是为什么备份时生成两个日志文件的原因。

  • 相关阅读:
    【BZOJ 4151 The Cave】
    【POJ 3080 Blue Jeans】
    【ZBH选讲·树变环】
    【ZBH选讲·拍照】
    【ZBH选讲·模数和】
    【CF Edu 28 C. Four Segments】
    【CF Edu 28 A. Curriculum Vitae】
    【CF Edu 28 B. Math Show】
    【CF Round 439 E. The Untended Antiquity】
    【CF Round 439 C. The Intriguing Obsession】
  • 原文地址:https://www.cnblogs.com/BradMiller/p/9279927.html
Copyright © 2011-2022 走看看