ITPub博客

首页 > 数据库 > Oracle > expdp备份+FTP自动上传

expdp备份+FTP自动上传

原创 Oracle 作者:531968912 时间:2017-03-22 15:55:13 0 删除 编辑
需求:
两台P550+DS4700架设oracle10g RAC,由于用户比较多、数据量比较大,通过exp导出需要的时间巨大(大约要24小时),时间窗不允许采用这样的备份方式,又没有备份软件进行自动备份,所以需要一种备份机制可以实现自动备份的前提下,用时也能控制在没有业务发生的时间内完成。


解决办法:
由于是oracle10g,我能想到的好办法是使用expdp方式在主机备份后、压缩并自动上传到FTP服务器,并删除服务器上的备份文件及上一次的压缩文件,以保持系统的可用空间。


下面是我的详细操作过程,记录下来备忘的同时希望能帮得到需要的朋友。
(1)先在操作系统上建立备份目录:/oracle/dpump_dir,给oracle:dba权限,赋于775权限
(2)通过oracle在数据库中建立备份目录:
     >CREATE DIRECTORY DPUMP_DIR as '/oracle/dpump_dir';
     查询创建了那些子目录:
     >SELECT * FROM dba_directories;
(3)注意事项:
       我这里是使用system用户来进行操作的。 如果是其他用户,那么就需要对这个用户进行赋权。
       SQL> grant create any directory to system;
            Grant succeeded.
       
       #查看system用户的权限 
       SQL> select * from dba_sys_privs where grantee='SYSTEM';
        
       grantee        privilege                       adm
       ------------------------------ ----------------------------  ------------
       system        create any directory             no
       system       global query rewrite              no
       system       create materialized view          no
       system       create table                     no
       system       unlimited tablespace             yes
       system       select any table                  no
 
       如果是其他用户使用sys创建的目录,也需要进行赋权,如:
       SQL> grant read, write on directory dpump_dir to system;


       导出整个数据库,且使用并行导出方式
(4)建立备份脚本backup.sh,并给于775权限,脚本内容及说明如下:
=========================================================
    #backup.sh文件。该文件先定义Oracle的环境变量,然后导出当天的数据,并创建相关的日志,然后把当天的数据和日志打包成.tar.gz文件。


   export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
   #Oracle的字符集,Oracle数据库的中文字符集为AMERICAN_AMERICA.ZHS16GBK


   export ORACLE_HOME=/oracle/db10g
   #Oracle数据库的根目录


   /oracle/db10g/bin/expdp system/password@orcl1 directory=DPUMP_DIR dumpfile=orcl_`date +%Y%m%d`_%u.dmp logfile=orcl_`date +%Y%m%d`.log parallel=6 full=yes
   #导出当日的数据库的数据并写日志。如当为2012-12-17,数据文件为orcl_20121217_01.dmp,日志为orcl_20121217.log


   cd /oracle/dpump_dir
   tar -cf orcl_`date +%Y%m%d`.tar orcl_`date +%Y%m%d`_*.dmp orcl_`date +%Y%m%d`.log
   #把数据文件和日志打包


   rm -f orcl_`date +%Y%m%d`_*.dmp
   rm -f orcl_`date +%Y%m%d`.log
   #删除备份.dmp文件和.log日志


   gzip orcl_`date +%Y%m%d`.tar
   #把tar包压缩成.tar.gz包


   cat orcl_`date +%Y%m%d`.log | mail -s 'jdt_orcl Web Backup' yuyulu@live.cn[/email]
   #把当天日志发送到[email=yuyulu@live.cn]yuyulu@live.cn邮箱




   mv orcl_`date +%Y%m%d`.tar.gz /svr
   #把当前目录的.tar.gz包移动到/svr目录下


   find /svr -type f -mtime +7 -exec rm -f {} \; 
   #删除上个星期前生成的备份文件


   #通过FTP上传到备份服务器
   cd /svr


   ftp -v -n 192.168.100.7 << EOF
   user test test 
   binary
   hash
   prompt
   put orcl_`date +%Y%m%d`.tar.gz 
   bye
   EOF
==========================================================
注意:该语句是采用6个线程的方式备份整个数据,备份文件名称自动加上01-06的编号!!!!expdp语句后面没有分号,如果是双机注意SID实例名是否正确。否则会出现 ORA-39001参数错误。如果出现ORA-39002,一般是由于没有建立备份目录造成的!!!!)


(5)将脚本添加到crontab自动运行
     #crontab -e
     (格式为minute  hour  day_of_month  month  weekday  command)
     0 1 * * 6 /home/oracle/backup.sh  >/dev/null 2>&1 #backup database every weeky at saterday 1:00 am!


(6)数据泵的监控
    1).查询dba_directories获得所创建的目录
    2).可以查询dba_datapump_jobs来查看数据泵作业的运行情况,也可以利用ATTACH重新连接上还在进行的JOB
      每个datapump可以通过job_name 参数来指定作业名称,如未指定,则系统使用默认的作业名称,如下面的视图中为
      SYS_EXPORT_FULL_01
      通过v$session_longops也可以查看长时间运行的datapump job的具体内容    
      SQL> select owner_name owr,job_name jbn,operation ope,job_mode jbm,state,degree,
           attached_sessions atts,datapump_sessions dats
           from dba_datapump_jobs;
 
        OWR        JBN                  OPE                  JBM             STATE          DEGREE    ATTS      DATS
        ---------- -------------------- -------------------- --------------- ---------- ---------- ---------- ----------
        SCOTT      SYS_EXPORT_FULL_01   EXPORT               FULL            COMPLETING          2    1          2
 
 
        SQL> select sid, serial#,session_type from  v$session s, dba_datapump_sessions d where s.saddr = d.saddr;                   
 
               SID    SERIAL# SESSION_TYPE
        ---------- ---------- --------------
               143         10 DBMS_DATAPUMP
               149         37 MASTER
               132          3 WORKER
               136          3 WORKER
               135          4 WORKER
               141          5 WORKER
               128          2 WORKER
               142          4 WORKER
   
    3).监控数据泵的逻辑备份程度
       >SELECT sid, serial#, context, sofar, totalwork,
        ROUND(sofar/totalwork*100,2) "%_COMPLETE"
        FROM v$session_longops
        WHERE opname LIKE '%EXP%'
        AND totalwork != 0
        AND sofar <> totalwork;
       
        SID SERIAL# CONTEXT SOFAR   TOTALWORK   %_COMPLETE
        130 33     0       54          70       77.14


(7)数据恢复的方法,通过oracle用户进行恢复
     $impdp system/password DIRECTORY=/oracle/dpump_dir DUMPFILE=orcl_20121212_01.dmp,orcl_20121212_02.dmp,orcl_20121212_03.dmp SQLFILE=aa.sql
     使用这种方法的impdp,可以从dp出来的dmp文件中提取对象的DDL语句,这样的impdp并不把数据导入数据库中,只是创建DDL语句文件,导入时不要使用parallel参数


(8)如果单独导出数据,在运行expdp后,按下exit组合,退出数据导出模式,进入交互模式
     Export>
     Export> status


(9)停止作业
     Export> stop_job
    是否确实要停止此作业 ([Y]/N): yes
    ...................
 
(10)用job_name再次连接到job
    >expdp system/password attach=SYS_EXPORT_FULL_01
     ATTACH用于在客户会话与已存在导出作用之间建立关联. 如果使用ATTACH选项,在命令行除了连接字符串和ATTACH选项外
,不能指定任何其他选项。 
     Export: Release 10.2.0.4.0 - Production on 星期一 12月 27 15:26:14 2012
     Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
     连接到: Oracle Database 11g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
 
  作业: SYS_EXPORT_FULL_01
  所有者: SYSTEM
  操作: EXPORT
  创建者权限: TRUE
  GUID: 454A188F62AA4D578AA0DA4C35259CD8
  开始时间: 星期一, 27 12月, 2012 15:26:16
  模式: FULL
  实例: orcl
  ...............................


(11)expdb的一个功能就是可以停止或是启动JOB(如果需要的话)
     Export> start_job
     查看状态
     Export> status

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25462274/viewspace-2135852/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-09-24

  • 博文量
    576
  • 访问量
    1111389