1、数据备份和恢复的概述

a、备份与恢复的必要性

  • 由于计算机系统的各种软硬件故障,用户的错误操作以及一些恶意破坏难以避免,因此这就影响到数据的正确性,甚至造成数据损失,服务器崩溃的严重后果。
  • 所以经常的备份可以有效地防止数据丢失,能够把数据从错误状态恢复到正确状态。

    b、备份解决方案

  • Oracle备份有分为:物理备份和逻辑备份。
  • 物理备份又分为冷备份和热备份。(热备份又分为用户管理备份和Oracle管理备份)
    Oracle专题17之数据备份和恢复_第1张图片

    c、冷备份(脱机备份)具体步骤

  • 脱机备份是在关闭数据库后进行的完整备份
  • 脱机备份是最快和最安全的方法。
  • 脱机备份是数据库全部文件的备份,包括参数文件、所有控制文件、所有数据文件、所有联机重做日志文件。

  • 脱机备份的具体步骤分为三步:
    1、以sys用户或者system身份登录数据库,以immediate方式关闭数据库。

    SQL> conn sys/02000059 as sysdba
    已连接。
    SQL> shutdown immediate
    数据库已经关闭。
    已经卸载数据库。
    ORACLE 例程已经关闭。

    2、把需要备份的文件拷贝到指定的位置。(复制所有需要备份的文件)
    Oracle专题17之数据备份和恢复_第2张图片
    3、拷贝完成后,如果继续让用户使用数据库,需要以open方式启动数据库。

    SQL> startup open
    ORACLE 例程已经启动。
    
    Total System Global Area 3373858816 bytes
    Fixed Size                  2180424 bytes
    Variable Size            2013268664 bytes
    Database Buffers         1342177280 bytes
    Redo Buffers               16232448 bytes
    数据库装载完毕。
    数据库已经打开。

    d、脱机备份的优点和不足

  • 优点:
    1、是非常快速的备份方法(只需要拷贝文件)。
    2、容易归档(简单拷贝即可)。
    3、容易恢复到某个时间点上(只需要将文件在拷贝回去)。
    4、能够与归档方法向结合,作为数据库“最新状态”的恢复。
    5、低度维护,高度安全。

  • 不足:
    1、单独使用时,只能提供到“某一时间点上”的恢复。
    2、在实施备份的全过程中,数据库必须要做备份而不能作为其他工作。也就是说,在脱机备份过程中,数据库必须是关闭状态。
    3、若磁盘空间有限,只能拷贝到其他外部存储设备上时,速度会很慢。
    4、不能按表或者按用户恢复。

    e、数据库恢复

  • 数据库恢复就是把数据库中备份出来的数据重新还原给原来的数据库。
  • 数据库恢复技术分为完全恢复和不完全恢复。
  • 安全恢复是指把数据库恢复到数据库失败时的数据库状态;不完全恢复是指将数据库恢复到数据库失败前的某一时刻的数据库状态。

    f、脱机恢复

  • 脱机恢复是使用备份文件将数据库恢复到备份时的状态。

    g、脱机恢复的具体操作

  • 脱机恢复的具体步骤分为三步:
    1、以sys用户或者system身份登录数据库,以immediate方式关闭数据库。
    2、将所有备份文件全部拷贝到原来的位置。
    3、拷贝完成后,如果继续让用户使用数据库,需要以open方式启动数据库。

    2、数据的导入和导出

    a、图形化导入导出数据的方式

    1、使用PLSQL Developer工具导出数据:

  • 第一种是导出为.dump的文件格式,.dmp文件是二进制的,可以跨平台,还能包含权限,效率也很不错,用得最为广泛。
    Oracle专题17之数据备份和恢复_第3张图片
    Oracle专题17之数据备份和恢复_第4张图片
  • 第二种是导出为.sql文件的,可用文本编辑器查看,通用性比较好,但是效率不如第一种,适合小数据量导入导出。
    Oracle专题17之数据备份和恢复_第5张图片

    2、使用PLSQL Developer工具导出数据:

  • 第一种是导入为.dump格式的文件:
    Oracle专题17之数据备份和恢复_第6张图片
  • 第二种是导入为.sql格式的文件:
    Oracle专题17之数据备份和恢复_第7张图片
  • 需要注意,导入的.sql格式的文件可以没有数据,但是必须要有表的结构,不然导入会失败。

    b、命令行的方式进行数据的导出

  • 数据导出命令执行方式如下:
    EXP[username/password] 参数1 参数2
  • 示例1:将数据库orc完全导出。
    exp system/oracle@orcl file=c:\dump\oracle_bak.dmp full=y
  • 示例2:将数据库中scott用户的所有对象导出。
    exp scott/tiger1@orcl file=c:\dump\scott_bak.dmp owner=scott
  • 示例3:将scott用户中表emp,dept导出
    exp scott/tiger1@orcl file=c:\dump\table_bak.dmp tables=(emp, dept)

    c、命令行的方式进行数据的导入

  • 导入数据命令执行方式如下:
    IMP [username/password] 参数1 参数2 ... ...
  • 将备份文件导入到数据库中:
    imp scott/tiger1@orcl file=c:\dump\scott_bak.dmp ignore=y
  • 需要注意,此示例中用scott用户进行的导出操作,在导入时也必须由scott用户进行导入操作。

    3、利用触发器实现数据的同步备份

    a、利用触发器实现数据的同步备份图示

    Oracle专题17之数据备份和恢复_第8张图片

    b、示例:利用触发器实现数据的同步备份

  • 因为在系统中只安装一个Oracle数据库,选择的方式是在同一数据库中进行备份:(即A表和A表备份都在同一个数据库中)
    Oracle专题17之数据备份和恢复_第9张图片
    1、创建员工表的备份表:

    CREATE TABLE emp_bak
    AS
    SELECT * FROM emp;

    2、创建触发器来实现数据的同步备份。(如当删除员工后,备份表同步删除)

    CREATE OR REPLACE TRIGGER syno_bak_tirgger
    AFTER DELETE
    ON emp
    FOR EACH ROW
    BEGIN
        DELETE FROM emp_bak WHERE empno = :old.empno;
    END;

    3、测试

    DELETE FROM emp WHERE empno = 7951;
    
    SELECT * FROM emp;
    SELECT * FROM emp_bak;