expdp備份+FTP自動上傳

531968912發表於2017-03-22
需求:
兩臺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部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-2135852/,如需轉載,請註明出處,否則將追究法律責任。

相關文章