Oracle中EXP和IMP用法和介紹

2010-08-28 10:47:16來源:西部e網(wǎng)作者:

1、Export/Import的用處     
Oracle  Export/Import工具用于在數(shù)據(jù)庫之間傳遞數(shù)據(jù)。     
Export從數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù)到dump文件中     
Import從dump文件中到入數(shù)據(jù)導(dǎo)數(shù)據(jù)庫中     
下面是一般使用他們的情況     
(1)、兩個(gè)數(shù)據(jù)庫之間傳送數(shù)據(jù)     
                同一個(gè)版本的oracle  Server之間     
                不同版本的oracle  Server之間     
                同種OS之間     
                不同種OS之間     
(2)、用于數(shù)據(jù)庫的備份和恢復(fù)     
(3)、從一個(gè)SCHEMA傳送到另一個(gè)SCHEMA     
(4)、從一個(gè)TABLESPACE傳送到另一個(gè)TABLESPACE     
   
2、DUMP文件     
EXPORT到出的是二進(jìn)制格式的文件,不可以手工編輯,否則會(huì)損壞數(shù)據(jù)。     
該文件在ORACLE支持的任何平臺(tái)上都是一樣的格式,可以在各平臺(tái)上通用。     
   
DUMP文件在IMPORT時(shí)采用向上兼容方式,就是說ORALCE7的DUMP文件可以導(dǎo)入     
到ORACLE8中,但是版本相差很大的版本之間可能有問題。     
   
3、EXPORT/IMPORT過程     
EXPORT導(dǎo)出的DUMP文件包含兩種基本類型的數(shù)據(jù)     
          -  DDL  (Data  Dictionary  Language)     
          -  Data     
DUMP文件包含所有重新創(chuàng)建Data  Dictionary的DDL語句,基本上是可以讀的格式   
。     
但是應(yīng)該注意的是,千萬不要用文本編輯器編輯之,oracle說不支持這樣做的。   
   
下面列出的是DUMP文件中包括的ORACLE對(duì)象,分為TABLE/USER/FULL方式,有些對(duì)   
象     
只是在FULL方式下才有(比如public  synonyms,  users,  roles,  rollback  segm   
ents等)     
   
Table  mode       User  Mode          Full  Database  Mode     
----------------------    ----------------------    ----------------------   
---     
Table  definitions              Table  definitions           Table  definitions     
Table  data                            Table  data                   Table  data     
Owner’s  table  grants        Owner’s  grants                Grants     
Owner’s  table  indexes      Owner’s  indexes             Indexes     
Table  constraints              Table  constraints           Table  constraints     
Table  triggers                    Table  triggers                 All  triggers     
                                                  Clusters                             Clusters     
                                                  Database  links                Database  links     
                                                  Job  queues                    Job  queues     
                                                  Refresh  groups              Refresh  groups     
                                                  Sequences                       Sequences     
                                                  Snapshots                        Snapshots     
                                                  Snapshot  logs                 Snapshot  logs     
                                                  Stored  procedures         Stored  procedures     
                                                  Private  synonyms            All  synonyms     
                                                  Views                                 Views     
                                                                                             Profiles     
                                                                                            Replication  catalog     
                                                                                            Resource  cost     
                                                                                            Roles     
                                                                                          Rollback  segments     
                                                                                         System  audit  options     
                                                                                         System  privileges     
                                                                                         Tablespace  definitions   
                                                                                           Tablespace  quotas     
                                                                                            User  definitions     
   
4、IMPORT時(shí)的對(duì)象倒入順序     
在倒入數(shù)據(jù)時(shí),ORACLE有一個(gè)特定的順序,可能隨數(shù)據(jù)庫版本不同而有所變化,   
但是     
現(xiàn)在是這樣的。     
   
    1.  Tablespaces                                                  14.  Snapshot  Logs     
    2.  Profiles                                                        15.  Job  Queues     
    3.  Users                                                              16.  Refresh  Groups     
    4.  Roles                                                              17.  Cluster  Definitions     
    5.  System  Privilege  Grants                          18.  Tables  (also  grants,commen   
ts,       
    6.  Role  Grants                                                          indexes,  constraints,  audi   
ting)     
    7.  Default  Roles                                              19.  Referential  Integrity             
                                 
    8.  Tablespace  Quotas                                      20.    POSTTABLES  actions                 
                                           
    9.  Resource  Costs                                            21.  Synonyms     
10.  Rollback  Segments                  22.  Views                         
11.  Database  Links                                            23.  Stored  Procedures     
12.  Sequences                                                      24.  Triggers,  Defaults  and  Aud   
iting     
13.  Snapshots                                               
                                                           
按這個(gè)順序主要是解決對(duì)象之間依賴關(guān)系可能產(chǎn)生的問題。TRIGGER最后導(dǎo)入,所   
以在INSERT     
數(shù)據(jù)到數(shù)據(jù)庫時(shí)不會(huì)激發(fā)TRIGGER。在導(dǎo)入后可能會(huì)有一些狀態(tài)是INVALID的PROC   
EDURE,主要     
是IMPORT時(shí)會(huì)影響一些數(shù)據(jù)庫對(duì)象,而IMPORT并不重新編譯PROCEDURE,從而造成   
這種情況,     
可以重新編譯之,就能解決這個(gè)問題。     
   
5、兼容性問題     
IMPORT工具可以處理EXPORT  5.1.22之后的版本導(dǎo)出的DUMP文件,所以你用ORACL   
E7的IMPORT     
處理ORACLE6的DUMP文件,依次類推,但是ORACLE如果版本相差很大有可能不能處   
理。具體的     
問題可以參照相應(yīng)的文檔,比如有關(guān)參數(shù)設(shè)置等(COMPATIBLE參數(shù))     
   
6、EXPORT需要的VIEW     
EXPORT需要的VIEW是由CATEXP.SQL創(chuàng)建,這些內(nèi)部VIEW用于EXPORT組織DUMP文件   
中數(shù)據(jù)格式。     
大部分VIEW用于收集創(chuàng)建DDL語句的,其他的主要供ORACLE開發(fā)人員用。     
   
這些VIEW在不同ORACLE版本之間有可能不同,每個(gè)版本可能都有新的特性加入。   
所以在新的     
版本里面執(zhí)行舊的dump文件會(huì)有錯(cuò)誤,一般可以執(zhí)行CATEXP.SQL解決這些問題,   
解決向后兼容     
問題的一般步驟如下:     
           
      導(dǎo)出數(shù)據(jù)庫的版本比目標(biāo)數(shù)據(jù)庫老的情況:     
      -  在需要導(dǎo)入的目標(biāo)數(shù)據(jù)庫中執(zhí)行舊的CATEXP.SQL     
      -  使用舊的EXPORT導(dǎo)出DUMP文件       
      -  使用舊的IMPORT導(dǎo)入到數(shù)據(jù)庫中     
      -  在數(shù)據(jù)庫中執(zhí)行新的CATEXP.SQL,以恢復(fù)該版本的EXPORT  VIEW     
   
      導(dǎo)出數(shù)據(jù)庫的版本比目標(biāo)數(shù)據(jù)庫新的情況:     
      -  在需要導(dǎo)入的目標(biāo)數(shù)據(jù)庫中執(zhí)行新的CATEXP.SQL     
      -  使用新的EXPORT導(dǎo)出DUMP文件       
      -  使用新的IMPORT導(dǎo)入到數(shù)據(jù)庫中     
      -  在數(shù)據(jù)庫中執(zhí)行舊的CATEXP.SQL,以恢復(fù)該版本的EXPORT  VIEW     
           
7、碎片整理     
EXPORT/IMPORT一個(gè)很重要的應(yīng)用方面就是整理碎片。因?yàn)槿绻麜r(shí)初次IMPPORT,   
   
就會(huì)重新CREATE  TABLE  再導(dǎo)入數(shù)據(jù),所以整張表都是連續(xù)存放的。另外缺省情況   
   
下EXPORT會(huì)在生成DUMP文件是“壓縮(COMPRESS)”TABLE,但是這種壓縮在很多情   
   
況下被誤解。事實(shí)上,COMPRESS是改變STORAGE參數(shù)INITIAL的值。比如:     
   
      CREATE  TABLE  ....  STORAGE(  INITIAL  10K  NEXT  10K..)     
      現(xiàn)在數(shù)據(jù)已經(jīng)擴(kuò)展到100個(gè)EXTENT,如果采用COMPRESS=Y來EXPORT數(shù)據(jù),     
      則產(chǎn)生的語句時(shí)  STORAGE(  INITIAL  1000K  NEXT  10K)     
   
      我們可以看到NEXT值并沒有改變,而INITIAL是所有EXTENT的總和。所以會(huì)出現(xiàn)   
   
如下情況,表A有4個(gè)100M的EXTENT,執(zhí)行DELETE  FROM  A,然后再用COMPRESS=Y  導(dǎo)   
   
出數(shù)據(jù),產(chǎn)生的CREATE  TABLE語句將有400M的INITIAL  EXTENT。即使這是TABLE中   
   
已經(jīng)沒有數(shù)據(jù)!!這是的DUMP文件即使很小,但是在IMPORT時(shí)就會(huì)產(chǎn)生一個(gè)巨大   
的     
TABLE.     
   
      另外,也可能會(huì)超過DATAFILE的大小。比如,有4個(gè)50M的數(shù)據(jù)文件,其中表A有   
   
15個(gè)10M的EXTENT,如果采用COMPRESS=Y的方式導(dǎo)出數(shù)據(jù),將會(huì)有INITIAL=150M,   
   
那么在重新導(dǎo)入時(shí),不能分配一個(gè)150M的EXTENT,因?yàn)閱蝹(gè)EXTENT不能跨多個(gè)文   
件。     
   
8、在USER和TABLESPACE之間傳送數(shù)據(jù)     
一般情況下EXPORT的數(shù)據(jù)要恢復(fù)到它原來的地方去。如果SCOTT用戶的表以TABLE   
   
或USER方式EXPORT數(shù)據(jù),在IMPORT時(shí),如果SCOTT用戶不存在,則會(huì)報(bào)錯(cuò)!     
   
以FULL方式導(dǎo)出的數(shù)據(jù)帶有CREATE  USER的信息,所以會(huì)自己創(chuàng)建USER來存放數(shù)據(jù)   
。     
   
當(dāng)然可以在IMPORT時(shí)使用FROMUSER和TOUSER參數(shù)來確定要導(dǎo)入的USER,但是要保   
證     
TOUSER一定已經(jīng)存在啦。     
   
9、EXPORT/IMPORT對(duì)SQUENCE的影響     
在兩種情況下,EXPORT/IMPORT會(huì)對(duì)SEQUENCE。     
(1)如果在EXPORT時(shí),用戶正在取SEQUENCE的值,可能造成SEQUENCE的不一致。   
   
(2)另外如果SEQUENCE使用CACHE,在EXPORT時(shí),那些在CACHE中的值就會(huì)被忽略   
的,     
            只是從數(shù)據(jù)字典里面取當(dāng)前值EXPORT。     
   
如果在進(jìn)行FULL方式的EXPORT/IMPORT時(shí),恰好在用sequence更新表中某列數(shù)據(jù),   
   
而且不是上面兩種情況,則導(dǎo)出的是更新前的數(shù)據(jù)。     
   
如果采用常規(guī)路徑方式,每一行數(shù)據(jù)都是用INSERT語句,一致性檢查和INSERT  T   
RIGGER     
如果采用DIRECT方式,某些約束和trigger可能不觸發(fā),如果在trigger中使用     
sequence.nextval,將會(huì)對(duì)sequence有影響。     
   
參數(shù)解:     
   
E:\>exp  help=y   
   
通過輸入  EXP  命令和用戶名/口令,您可以   
在用戶  /  口令之后的命令:   
   
實(shí)例:  EXP  SCOTT/TIGER   
   
或者,您也可以通過輸入跟有各種參數(shù)的  EXP  命令來控制“導(dǎo)出”的運(yùn)行方式。   
要指定參數(shù),您可以使用關(guān)鍵字:   
   
格式:  EXP  KEYWORD=value  或  KEYWORD=(value1,value2,...,valueN)   
實(shí)例:  EXP  SCOTT/TIGER  GRANTS=Y  TABLES=(EMP,DEPT,MGR)   
或  TABLES=(T1:  P1,T1:  P2),如果  T1  是分區(qū)表   
   
USERID  必須是命令行中的第一個(gè)參數(shù)。   
   
關(guān)鍵字  說明(默認(rèn))   
---------------------------------------------------   
USERID  用戶名/口令   
FULL  導(dǎo)出整個(gè)文件  (N)   
BUFFER  數(shù)據(jù)緩沖區(qū)的大小   
OWNER  所有者用戶名列表   
FILE  輸出文件  (EXPDAT.DMP)   
TABLES  表名列表   
COMPRESS  導(dǎo)入一個(gè)范圍  (Y)   
RECORDLENGTH  IO  記錄的長(zhǎng)度   
GRANTS  導(dǎo)出權(quán)限  (Y)   
INCTYPE  增量導(dǎo)出類型   
INDEXES  導(dǎo)出索引  (Y)   
RECORD  跟蹤增量導(dǎo)出  (Y)   
ROWS  導(dǎo)出數(shù)據(jù)行  (Y)   
PARFILE  參數(shù)文件名   
CONSTRAINTS  導(dǎo)出限制  (Y)   
CONSISTENT  交叉表一致性   
LOG  屏幕輸出的日志文件   
STATISTICS  分析對(duì)象  (ESTIMATE)   
DIRECT  直接路徑  (N)   
TRIGGERS  導(dǎo)出觸發(fā)器  (Y)   
FEEDBACK  顯示每  x  行  (0)  的進(jìn)度   
FILESIZE  各轉(zhuǎn)儲(chǔ)文件的最大尺寸   
QUERY  選定導(dǎo)出表子集的子句   
   
下列關(guān)鍵字僅用于可傳輸?shù)谋砜臻g   
TRANSPORT_TABLESPACE  導(dǎo)出可傳輸?shù)谋砜臻g元數(shù)據(jù)  (N)   
TABLESPACES  將傳輸?shù)谋砜臻g列表   
   
E:\>imp  help=y   
   
可以通過輸入  IMP  命令和您的用戶名/口令   
跟有您的用戶名  /  口令的命令:   
   
實(shí)例:  IMP  SCOTT/TIGER   
   
或者,  可以通過輸入  IMP  命令和各種自變量來控制“導(dǎo)入”按照不同參數(shù)。   
要指定參數(shù),您可以使用關(guān)鍵字:   
   
格式:  IMP  KEYWORD=value  或  KEYWORD=(value1,value2,...,vlaueN)   
實(shí)例:  IMP  SCOTT/TIGER  IGNORE=Y  TABLES=(EMP,DEPT)  FULL=N   
或  TABLES=(T1:  P1,T1:  P2),如果  T1  是分區(qū)表   
   
USERID  必須是命令行中的第一個(gè)參數(shù)。   
   
關(guān)鍵字  說明(默認(rèn))         
----------------------------------------------   
USERID  用戶名/口令   
FULL  導(dǎo)入整個(gè)文件  (N)   
BUFFER  數(shù)據(jù)緩沖區(qū)大小   
FROMUSER  所有人用戶名列表   
FILE  輸入文件  (EXPDAT.DMP)   
TOUSER  用戶名列表   
SHOW  只列出文件內(nèi)容  (N)   
TABLES  表名列表   
IGNORE  忽略創(chuàng)建錯(cuò)誤  (N)   
RECORDLENGTH  IO  記錄的長(zhǎng)度   
GRANTS  導(dǎo)入權(quán)限  (Y)   
INCTYPE  增量導(dǎo)入類型   
INDEXES  導(dǎo)入索引  (Y)   
COMMIT  提交數(shù)組插入  (N)   
ROWS  導(dǎo)入數(shù)據(jù)行  (Y)   
PARFILE  參數(shù)文件名   
LOG  屏幕輸出的日志文件   
CONSTRAINTS  導(dǎo)入限制  (Y)   
DESTROY  覆蓋表空間數(shù)據(jù)文件  (N)   
INDEXFILE  將表/索引信息寫入指定的文件   
SKIP_UNUSABLE_INDEXES  跳過不可用索引的維護(hù)  (N)   
ANALYZE  執(zhí)行轉(zhuǎn)儲(chǔ)文件中的  ANALYZE  語句  (Y)   
FEEDBACK  顯示每  x  行  (0)  的進(jìn)度   
TOID_NOVALIDATE  跳過指定類型  id  的校驗(yàn)   
FILESIZE  各轉(zhuǎn)儲(chǔ)文件的最大尺寸   
RECALCULATE_STATISTICS  重新計(jì)算統(tǒng)計(jì)值  (N)   
   
下列關(guān)鍵字僅用于可傳輸?shù)谋砜臻g   
TRANSPORT_TABLESPACE  導(dǎo)入可傳輸?shù)谋砜臻g元數(shù)據(jù)  (N)   
TABLESPACES  將要傳輸?shù)綌?shù)據(jù)庫的表空間   
DATAFILES  將要傳輸?shù)綌?shù)據(jù)庫的數(shù)據(jù)文件   
TTS_OWNERS  擁有可傳輸表空間集中數(shù)據(jù)的用戶
 
 


備份例子1:導(dǎo)出備份數(shù)據(jù)

#!/bin/bash

#=============================================#
#        如果腳本用于crontab,下面Oracle環(huán)境變量必須設(shè)置          #
#=============================================#
ORACLE_BASE=/opt/oracle
ORACLE_HOME=$ORACLE_BASE/product/8.1.7
ORACLE_SID=oradb6
ORACLE_TERM=ansi
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
NLS_LANG=American_America.ZHS16GBK
NLS_DATE_FORMAT=YYYYMMDDHH24MISS
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
TMPDIR=/var/tmp
PATH=$PATH:$ORACLE_HOME/bin
export  ORACLE_BASE  ORACLE_HOME  ORACLE_SID  ORACLE_TERM  ORA_NLS33  NLS_LANG 
export  NLS_DATE_FORMAT  LD_LIBRARY_PATH  TMPDIR  PATH
#============================================#

BACKUPDIR=/oradata/backup;  export  BACKUPDIR
USER_PASSWD=dbuser/oracle

RESULTFILE=/export/home/oracle/log/result.log

cd  $BACKUPDIR

exp  $USER_PASSWD  log=$(date  ’+%Y%m%d’).log  file=$(date  ’+%Y%m%d’).dmp  owner=dbuser 
buffer=4096000  rows=n
if  [  $?  !=  0  ]
then
        echo  "`date`  backup  exp  fail"  >>  $RESULTFILE
        exit
fi

rm  -f  tables.txt
sqlplus  -s  $USER_PASSWD  </dev/null
set  heading  off;
set  term  off;
set  echo  off;
set  pagesize  0;
set  linesize  1000;
set  trimspool  on;
set  trimout  on;
set  feedback  off;
set  colsep  |;
spool  tables.txt;
select  table_name  from  user_tables;
spool  off;
exit;
EOF

for  table  in  $(cat  tables.txt)
do
        exp  $USER_PASSWD  log=${table}_$(date  ’+%Y%m%d’).log  file
=${table}_$(date  ’+%Y%m%d’).dmp  tables=$table  direct=y
        if  [  $?  !=  0  ]
        then
                echo  "`date`  backup  exp  $table  fail"  >>  $RESULTFILE
                exit
        fi
done

compress  -f  *.dmp

echo  "`date`  backup  succeed"  >>  $RESULTFILE
 


備份例子2:聯(lián)機(jī)日備份數(shù)據(jù)

#!/usr/local/bin/bash

first_msg()
{
        echo  "******************************************************"
        echo  "    "
        echo  "The  batch  process  BACKUP_DAILY  is  starting  at  [  ’date’  ]"
        echo  "Excuting  by  LogName  =  [  $LOGNAME  ]"
        echo  "    "
}

final_msg()
{
        echo  "    "
        echo  "The  batch  process  BACKUP_DAILY  completed  at  [  ’date’  ]"
        echo  "Excuting  by  LogName  =  [  $LOGNAME  ]"
        echo  ">>>>>  Please  Make  Sure  That  It  Has  Been  Done  Successfully,  "
        echo  ">>>>>  Otherwise  You  Must  Re-do  It."
        echo  "    "
        echo  "*****************************************************"
}

#********************************
#                          Main                            *
#********************************
USER_PASSWD=system/system
ARCHIVE_DEST=/appl/oracle/oradata/orafe/arch
DEVICE=/dev/rmt/ctape1
TRC_FILE=$TRC/Z_JOB_BACKUP_DAILY
TMP_SQL=$TRC/backup_daily_tmp.sql
BACKUP_DEST=${BACKUP_PATH}/$(date  ’+%Y%m%d’)
SUCCESS=0
FAIL=1

first_msg
mkdir  -m  777  -p  $BACKUP_DEST
if  [  !  -d  $BACKUP_DEST  ]
then
        echo  "$BACKUP_DEST  create  fail"
        exit
fi

#*******************************
#            backup  archive  log            *
#*******************************
echo  "=========================================="
echo  "Backup  archive  log  begin  on  [  ’date’  ]"
echo  "alter  system  archive  log  stop;"  >  $TMP_SQL
sqlplus  -s  $USER_PASSWD  <start  $TMP_SQL
EOF
if  [  $?  !=  0  ]
then
        echo  "alter  archive  log  stop  fail"
        exit
fi
cd  $ARCHIVE_DEST
FILE_QT=’ls|grep  -c  "arch*"’
FILE=’ls|grep  "arch*"’

echo  "alter  system  archive  log  start;"  >  $TMP_SQL
sqlplus  -s  $USER_PASSWD  <start  $TMP_SQL
EOF
if  [  $?  !=  0  ]
then
        echo  "alter  archive  log  start  fail"
        exit
fi
if  [  $FILE_QT  !=  0  ]
then 
        mv  -f  $FILE  $BACKUP_DEST
        cd  $BACKUP_DEST
        compress  -f  *
        tar  -cvf  $DEVICE  *
        if  [  $?  !=  0  ]
        then
                echo  "tar  to  tape  fail"
                exit
        fi
fi
echo  "Backup  archive  log  end  on  [  ’date’  ]"
echo  "=========================================="
final_msg

備份例子3:聯(lián)機(jī)全庫備份數(shù)據(jù)

#!/usr/local/bin/bash

first_msg()
{
        echo  "******************************************************"
        echo  "    "
        echo  "The  batch  process  JOB_BACKUP_FULL  is  starting  at  [  ’date’  ]"
        echo  "Excuting  by  LogName  =  [  $LOGNAME  ]"
        echo  "    "
}

final_msg()
{
        echo  "    "
        echo  "The  batch  process  JOB_BACKUP_FULL  completed  at  [  ’date’  ]"
        echo  "Excuting  by  LogName  =  [  $LOGNAME  ]"
        echo  ">>>>>  Please  Make  Sure  That  It  Has  Been  Done  Successfully,  "
        echo  ">>>>>  Otherwise  You  Must  Re-do  It."
        echo  "    "
        echo  "******************************************************"
}

#**************************
#*            backup_begin            *
#**************************
backup_begin()
{
        echo  "alter  tablespace  $1  begin  backup;"  >  $TMP_SQL
        sqlplus  -s  $USER_PASSWD  <start  $TMP_SQL
EOF
        if  [  $?  !=  0  ]
        then
                return  $FAIL
        fi   
        return  $SUCCESS 
}

#**************************
#*            backup_end                *
#**************************
backup_end()
{
        echo  "alter  tablespace  $1  end  backup;"  >  $TMP_SQL
        sqlplus  -s  $USER_PASSWD  <start  $TMP_SQL
EOF
        if  [  $?  !=  0  ]
        then
                return  $FAIL
        fi   
        return  $SUCCESS 
}

#********************************
#                          Main                            *
#********************************
USER_PASSWD=system/system
BACKUP_DEST=$BACKUP_PATH/full
DEVICE=/dev/rmt/ctape1
BACKUP_CFG=$TRC/backup.cfg
TRC_FILE=$TRC/BACKUP_FULL
TMP_SQL=$TRC/backup_full_tmp.sql
SUCCESS=0
FAIL=1

first_msg
rm  -f  $BACKUP_CFG
sqlplus  -s  $USER_PASSWD  </dev/null
set  heading  off;
set  term  off;
set  echo  off;
set  pagesize  0;
set  linesize  1000;
set  trimspool  on;
set  trimout  on;
set  feedback  off;
set  colsep  =;
spool  $TRC/backup.spl;
select  tablespace_name,file_name  from  dba_data_files  order  by  tablespace_name,fi
le_name;
spool  off;
exit
EOF
tr  -d  ’  ’  <$TRC/backup.spl  >$BACKUP_CFG

rm  -f  $TRC_FILE
if  [  !  -f  $BACKUP_CFG  ]
then
        echo  "備份配置文件缺失"  >$TRC_FILE
        echo  "$BACKUP_CFG  not  found"
        exit
fi
mkdir  -m  777  -p  $BACKUP_DEST
if  [  !  -d  $BACKUP_DEST  ]
then
        echo  "備份目錄創(chuàng)建失敗"  >$TRC_FILE
        echo  "$BACKUP_DEST  create  fail"
        exit
fi
cd  $BACKUP_DEST
rm  -f  *

#*******************************
#            backup  control  file          *
#*******************************
echo  "=========================================="
echo  "正在備份控制文件"  >  $TRC_FILE
echo  "Backup  control  begin  on  [  ’date’  ]"
echo  "alter  database  backup  controlfile  to  ’$BACKUP_DEST/control.ctl’;"  >  $TMP_SQL
sqlplus  -s  $USER_PASSWD  <start  $TMP_SQL
EOF
if  [  $?  !=  0  ]
then
        echo  "備份控制文件失敗"  >  $TRC_FILE
        echo  "Backup  control  file  fail"
        exit
fi 
echo  "Backup  control  end  on  [  ’date’  ]"

#*******************************
#            backup  tablespaces            *
#*******************************
TABLESPACES=’cut  -d=  -f1  $BACKUP_CFG|uniq’
for  tablespace  in  $TABLESPACES
do
        echo  "=========================================="
        echo  "正在備份$tablespace"  >  $TRC_FILE
        echo  "Backup  $tablespace  begin  on  [  ’date’  ]"
        backup_begin  $tablespace
        if  [  $?  !=  0  ]
        then
                echo  "備份$tablespace失敗"  >  $TRC_FILE
                echo  "Turn  on  backup  option  of  $tablespace  fail"
                exit
        fi
        DATAFILES=’awk  -v  var=$tablespace  -F  =  ’$1==var    {print  $2}’  $BACKUP_CFG’
        for  datafile  in  $DATAFILES
        do
                if  [  !  -r  $datafile  ]
                then
                        backup_end  $tablespace
                        echo  "備份$tablespace失敗"  >  $TRC_FILE
                        echo  "$tablespace:$datafile  unreadable"
                        exit
                fi
                compress  -c  $datafile  >  $BACKUP_DEST/’basename  $datafile’.Z
                if  [  $?  !=  0  ]
                then
                        backup_end  $tablespace
                        echo  "備份$tablespace失敗"  >  $TRC_FILE
                        echo  "Backup  $tablespace:$datafile  fail"
                        exit
                fi
        done
        backup_end  $tablespace
        echo  "Backup  $tablespace  end  on  [  ’date’  ]"
done

#**************************
#                tar  files                *
#**************************
echo  "=========================================="
echo  "正在備份至磁帶"  >  $TRC_FILE
echo  "tar  to  tape  on  [  ’date’  ]"
cd  $BACKUP_DEST
tar  -cvf  $DEVICE  *
if  [  $?  !=  0  ]
then
        echo  "備份至磁帶失敗"  >  $TRC_FILE
        echo  "tar  to  tape  fail"
        exit
fi
echo  "tar  to  tape  on  [  ’date’  ]"
echo  "=========================================="

echo  "全備份已完成"  >  $TRC_FILE
final_msg

 

關(guān)鍵詞:Oracle

贊助商鏈接: