一個不重要的數據庫,備份是用expdp導出,然后上傳到ftp服務器上面。上周這個主機宕機了,要在別的數據庫恢復,發現報如下錯誤:
ORA-39001: invalid argument value ORA-39000: bad dump file specification ORA-31619: invalid dump file "/xxx/xxx/xxx.dmp"
然后查了一下資料,出現這種情況,一般是導出數據庫的版本和導入數據庫的版本不一致導致的,然后查看導出文件的版本
strings xxxxx.dmp|head -n 10 #xxxx.dmp為導出文件 "SYS"."SYS_EXPORT_FULL_01" x86_64/Linux 2.4.xx tsurbob AL32UTF8 11.02.00.04.00 001:001:000001:000001
根據上面的信息,可以看到導出文件是11204的,也沒有問題。
在查資料,有寫到ftp上傳的時候可以使用ascll和binary兩種方式。使用ascll可能會導致文件變化
這時候機器也修好了,測試了一個文件的上傳,發現上傳到主機的文件的md5值和本地的md5值完全不一樣,測試使用二進制上傳后,md5相同,可以確定是上傳方式導致的
修改后的腳本:
#!/bin/bash source ~/.bash_profile ######################################################### echo 'Start Time ------------>' `date` day=`date +%Y%m%d%H%M` flag=0 for db in {DB01,DB02,DB03} do export ORACLE_SID=$db echo "#################${ORACLE_SID} is expdpping###############" expdp "'/ as sysdba'" directory=EXP_SCHEMABAK_TOFTP dumpfile="$db"_schemabak_"$day".dmp logfile="$db"_schemabak_"$day" .log full=y content=metadata_only echo "#################${ORACLE_SID} have done##################" let flag+=1 done echo "#################expdp total:${flag}######################" ######################################################## echo '------ftp and delete-------'`date` cd /oradata01/expdata/schema_bak find ./ -name "*.dmp" -mtime +6 -exec rm -rf {} \; find ./ -name "*.log" -mtime +6 -exec rm -rf {} \; ftp -niv <<EOF open XXX.XXX.XXX.XXX user USERNAME PASSWORD binary cd /Data/zz_dmp/backfor89/ mput *_schemabak_$day.dmp quit EOF echo 'End Time ---------------->'`date`
在ftp上傳塊中加入binary,顯示制定上傳方式為二進制。mput可以上傳多個文件,put只能上傳單個文件。