#此腳本只備份數據表,並且爲了方便恢復數據是作的單表逐個備份
#在寫腳本過程當中遇到的報錯均加入瞭解決方案的連接(雖然錯誤代碼沒有貼出來)
#最終將在腳本所在目錄生成年月日-時分的目錄,目錄下爲表名.dmp文件+表名.log文件
#例:/home/oracle/bak爲腳本所在目錄,將生成20170523-1723目錄,下面有 remit_bank_hds.dmp和remit_bank_hds.log文件
#如下爲expdp_cms_prod.sh腳本內容
#此腳本須要用oracle用戶運行
#--------------------------------------------------------------------------------
#!/bin/bash
#多行註釋http://www.jb51.net/article/58236.htm
#後臺執行,並重定向日誌
#nohup /home/oracle/bak/expdp_cms_prod.sh command > /home/oracle/bak/expdp_cms_prod.out 2>&1 &
#加載系統環境變量,避免用crontab定時器執行時失敗,若是這樣也無效,則須要使用絕對路徑
#查看crontab的執行日誌:vi /var/log/cron
source /home/oracle/.bash_profile
#給腳本目錄受權
chmod 777 /home/oracle/bak
#目錄跳轉,避免在根目錄跑腳本
cd /home/oracle/bak
#獲取當前日期作爲數據文件備份的目錄
rq=`date '+%Y%m%d-%H%M'`
#獲取當前所在路徑http://www.cnblogs.com/FlyFive/p/3640267.html#commentform
basepath=$(cd `dirname $0`; pwd)
#數據庫鏈接變量配置
db_name=cms
db_pass=cms123
db_osid=orcl
#執行sql文件,暫時不用
#@$basepath/create_directory.sql
#在當前目錄下建立目錄
mkdir $rq
#鏈接數據庫
#EOF含義http://blog.csdn.net/sprita1/article/details/42676307
sqlplus $db_name/$db_pass@localhost:1521/$db_osid << EOF
#sqlplus /nolog <<EOF
#conn /as sysdba
#執行sql語句
#變量拼接http://blog.itpub.net/9240380/viewspace-764728/
create or replace directory expdir as '${basepath}/${rq}';
#查看directory是否存在,路徑是否正確
select * from dba_directories where DIRECTORY_NAME='EXPDIR';
#若是derictory不屬於當前oracle用戶,則須要受權,不能受權給本身
#grant read,write on directory expdir to cms_prod;
exit;
EOF
#單表導出語句
expdp $db_name/$db_pass@$db_osid tables= REMIT_BANK_HDS dumpfile=REMIT_BANK_HDS directory=expdir logfile=remit_bank_hds.log;
#su - oracle -c "expdp jmt/jmt@ORCL owner=jmt dumpfile=backupdb$rq.dmp DIRECTORY=dpdata1"
#-----------------------------------------------------------------