Linux環境下用exp備份Oracle數據表並導入的腳本

有時候爲了兩個Oracle數據庫部分表的同步,我們可以採用從源庫exp需要的表再在本地執行imp導入。

操作的思路:首先從遠程數據庫exp需要的表到本地,然後在本地執行drop table命令把要替換的表刪除,這裏要注意那些主外鍵關聯的表的刪除的順序,最後再執行imp導入即可。腳本如下:

首先建立執行命令的.sh文件:

[oracle@erpdevdb ~]$ cat erpupdate.sh
echo "----------------------------------------------------------------" >>/home/oracle/erptable.log
echo `date` >> /home/oracle/erptable.log
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/oracle/product/10.2.0/db_1
export ORACLE_SID=erpstudydb
export PATH=/home/oracle/bin:.:/u01/app/oracle/oracle/product/10.2.0/db_1/bin
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

cd /home/oracle

SJ=`date '+%Y%m%d'`
exp banping/******@remotedb parfile=/home/oracle/parexptbl.lst file=/home/oracle/exptable/table${SJ}.dmp

sqlplus -S "banping/******" @/home/oracle/droptable.sql

imp userid=banping/****** file=/home/oracle/exptable/table${SJ}.dmp full=y commit=y

#delete old files
find /home/oracle/exptable -mtime +10 -exec ls -la {} \; >>/home/oracle/erptable.log
find /home/oracle/exptable -mtime +10 -exec rm {} \; >>/home/oracle/erptable.log

echo `date` >> /home/oracle/erptable.log
echo "----------------------------------------------------------------" >>/home/oracle/erptable.log
cat /home/oracle/erptable.log | sed "s/\n/\r\n/g" >/home/oracle/expimpmail.txt
mail -s "StudyDB EXP-IMP Log" [email protected] < /home/oracle/expimpmail.txt
rm /home/oracle/erptable.log

其中droptable.sql就是一堆刪除表的命令:

[oracle@erpdevdb ~]$ cat droptable.sql
drop table msgtask;
drop table rdata;
......

而parexptbl.lst就是要導入的表的列表:

[oracle@erpdevdb ~]$ cat parexptbl.lst
tables=(msgtask,rdata,......)

這幾個文件都弄好了之後,把.sh加入到定時任務即可:

[oracle@erpdevdb ~]$ crontab -l
30 5 * * * /home/oracle/erpupdate.sh >>/home/oracle/erptable.log 2>&1

這樣,每天通過郵件就可監控導出導入的信息了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章