Oracle数据备份(服务器端)——expdp

  • expdp属于逻辑备份。逻辑备份是指利用Oracle提供的导出工具,将数据库中选定的记录集或数据字典的逻辑副本以二进制文件的形式储存到操作系统中。逻辑备份的二进制文件称为转储文件,以dmp格式存储。

  • 在Oracle 11g数据库中提供了Data Pump Export(EXPDP)实用程序,实现数据的逻辑备份与恢复。

  • EXPDP是服务器端程序,其转储文件只能存放在由DIRECTORY对象指定的特定数据库服务器操作系统目录中,而不能使用指定的操作系统目录(相对EXP)

  • EXPDP工具的执行可以采用:交互方式、命令行方式及参数文件方式3种。命令行方式是在命令行中直接指定参数设置;参数文件方式是将参数的设置信息存放到一个参数文件中,在命令行中用PARFILE参数指定参数文件;交互方式是通过交互式命令进行导出作业管理

  • EXPDP提供了5种导出模式,在命令行中通过参数设置来指定

    • 全库导出模式:通过参数FULL指定,导出整个数据库
    • 模式导出模式:通过参数SCHEMAS指定,是默认的导出模式,导出指定模式中的所有对象
    • 表导出模式:通过参数TABLES指定,导出指定模式中指定的所有表、分区及其依赖对象
    • 表空间导出模式:通过参数TABLESPACES指定,导出指定表空间中所有表及其依赖对象的定义和数据
    • 传输表空间导出模式:通过参数TRANSPORT_TABLESPACES指定,导出指定表空间中所有表及其依赖对象的定义。通过该导出模式以及相应导入模式,可以实现将一个数据库表空间的数据文件复制到另一个数据库中
  • EXPDP命令的常用参数及其说明

    参数名称 说明
    ATTACH 把导出结果附加在一个已存在的导出作业中,默认为当前模式唯一的导出作业
    CONTENT 指定要导出的内容。CONTENT取值为ALL或者DATA_ONLY或者METADATA_ONLY。ALL表示导出对象的定义及其数据;DATA_ONLY表示只导出对象的数据;METADATA_ONLY表示只导出对象的定义。默认为ALL
    DIRECTORY 指定转储文件 和日志文件所在位置的目录对象,该对象由DBA预先创建
    DUMPFILE 指定转储文件名称列表,可以包含目录对象名,默认值为expdp.dmp
    EXCLUDE 指定导出操作中要排除的对象类型和对象定义
    FILESIZE 指定转储文件的最大尺寸
    FULL 指定是否进行全数据库导出,包括所有数据及定义
    HELP 指定是否显示EXPDP命令的在线帮助
    INCLUDE 指定导出操作中要导出的对象类型和对象定义
    JOB_NAME 指定导出作业的名称
    LOGFILE 指定导出日志文件的名称
    NOLOGFILE 指定是否生成导出日志文件
    PARALLEL 指定执行导出作业时的并行进程最大个数
    PARFILE 指定导出参数文件的名称
    QUERY 指定导出操作中SELECT语句中的数据导出条件
    SCHEMAS 指定进行模式导出及模式列表
    TABLES 指定进行表模式导出及表列表
    TABLESPACES 指定进行表空间模式导出及表空间列表
    TRANSPORT_TABLESPACES 指定进行传输表空间模式导出及表空间列表
  • 具体使用EXPDP的备份步骤如下(数据服务器为Windows)

  • 创建备份用户(不是必须的,必须的是权限)

    -- 创建DUMPMAN用户,密码为xxx,默认表空间USERS
    CREATE USER DUMPMAN IDENTIFIED BY xxx;
    -- 授予可以建立SESSION的权限,即CONNECTION角色,连接权限
    GRANT CREATE SESSION TO DUMPMAN;
    -- 授予调试的权限(可忽略)
    GRANT DEBUG CONNECT SESSION TO DUMPMAN;
    -- 创建或修改DIRECTORY,没有dumpdir的话,即创建一个DIRECTORY名为dumpdir,dumpdir指向F:\ORACLE_PUMP\dump
    CREATE OR REPLACE DIRECTORY dumpdir AS 'F:\ORACLE_PUMP\dump';
    -- 为DUMPMAN用户授予dumpdir的读写权限
    GRANT READ,WRITE ON DIRECTORY dumpdir TO DUMPMAN;
    -- 为DUMPMAN授予导出及导入非同名模式的对象权限
    GRANT EXP_FULL_DATABASE,IMP_FULL_DATABASE TO DUMPMAN;
    -- 为DUMPMAN授予RESOURCE角色(权限偏大)
    GRANT RESOURCE TO DUMPMAN;
    -- 查询现有的DIRECTORY
    SELECT * FROM DBA_DIRECTORIES;
    
  • 到这就可以使用EXPDP命令导出了(注意:DIRECTORY对应路径下的文件必须存在)

    expdp dumpman/xxx dumpfile=hr.dmp directory=dumpdir schemas=hr
    

    一般就这样,但是无法忍受大量文件堆叠在一起,为了备份文件能按照年月日进行存放,我们继续

  • 创建存储过程,用于修改dumpdir(在DUMPMAN用户下),简单实现如下

    CREATE OR REPLACE PROCEDURE CHANGE_DATA_PUMP_DIR AUTHID CURRENT_USER AS
      I_YEAR    VARCHAR2(4);
      I_MONTH   VARCHAR2(2);
      I_DAY     VARCHAR2(2);
      LOCALPATH VARCHAR2(200);
      I_SQL     VARCHAR2(400);
    BEGIN
      I_YEAR    := TO_CHAR(SYSDATE, 'YYYY');
      I_MONTH   := TO_CHAR(SYSDATE, 'MM');
      I_DAY     := TO_CHAR(SYSDATE, 'DD');
      LOCALPATH := 'F:\ORACLE_DUMP\SPD_SZSE_V20\dump\' || I_YEAR || '/' ||
      I_MONTH || '/' || I_DAY;
      DBMS_OUTPUT.PUT_LINE(LOCALPATH);
      I_SQL := 'CREATE OR REPLACE DIRECTORY dumpdir AS ' || '''' || LOCALPATH || '''';
      DBMS_OUTPUT.PUT_LINE(I_SQL);
      EXECUTE IMMEDIATE I_SQL;
    END CHANGE_DATA_PUMP_DIR;
    
  • 编写调用上述存储过程的SQL文件(CHANGE_DATA_PUMP_DIR.sql)

    CALL CHANGE_DATA_PUMP_DIR();
    EXIT;
    -- 还有其他方式(EXECUTE或者程序块均可)
    
  • 编写BAT脚本

    ::bat脚本说明头(与编辑器代码解释由冲突,pass)
    
    :: 设置Oracle编码
    :: set NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
    
    :: 获取日期时间
    set year=%date:~0,4%
    set month=%date:~5,2%
    set day=%date:~8,2%
    
    set basePath="F:\ORACLE_PUMP\dump"
    
    set oneLevelPath=%basePath%\%year%
    set secondLevelPath=%oneLevelPath%\%month%
    set threeLevelPath=%secondLevelPath%\%day%
    
    :: 一级路径
    if not exist "%oneLevelPath%"  mkdir %oneLevelPath%  
    
    :: 二级路径
    if not exist "%secondLevelPath%"  mkdir %secondLevelPath%  
    
    :: 三级路径
    if not exist "%threeLevelPath%"  mkdir %threeLevelPath%  
    
    :: 执行SQL文件内容
    SQLPLUS DUMPMAN/xxx @F:\ORACLE_PUMP\CHANGE_DATA_PUMP_DIR.sql
    
    :: 使用EXPDP导出
    expdp DUMPMAN/xxx dumpfile=HR.dmp logfile=HR.log directory=dumpdir schemas=HR
    
    
  • 直接运行脚本开始备份,如需定时任务有脚本也不成问题,定时任务备份可查看EXP的备份

你可能感兴趣的:(Oracle,oracle)