linux 定時自動備份oracle資料庫
阿新 • • 發佈:2022-01-18
0,目前閒下來了,搞個數據庫備份吧,開始...
1,寫一份指令碼執行匯出資料庫
#!/bin/sh echo bakup start...................... export PATH export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1 export PATH=$PATH:/opt/oracle/product/19c/dbhome_1/bin export ORACLE_SID=myorcl export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK date=`date +%Y_%m_%d` days=7 orsid=127.0.0.1:1521/myorcl #Oracle資料庫伺服器IP、埠、SID bakuser=user #使用者名稱稱 bakpass=pass #使用者密碼 bakdir=/data/db_backup #備份檔案路徑,需要提前建立好 dmpdirectory=db_backup dmpversion=19.3.0.0.0 #匯出資料的oracle版本 for orowner in user1 user2 do bakdata=$orowner"_"$date.dmp #備份資料庫名稱 cd $bakdir #進入備份目錄 echo start exp $bakdata .............Time: $date........Orowner:$orowner................. expdp userid=$bakuser/$bakpass@$orsid schemas=$orowner directory=$dmpdirectory dumpfile=$bakdata version=$dmpversion find $bakdir -type f -name "*.log" -mtime +$days -exec rm {} \; #刪除備份檔案 find $bakdir -type f -name "*.dmp" -mtime +$days -exec rm {} \; #刪除日誌檔案 echo "....................$orowner backup end............................" done exit1.1其中的問題
1.2建立匯出的.dmp檔案目錄並授權
建立備份目錄用於存放資料泵檔案,方便自己使用 mkdir db_backup chmod 777 db_backup 登入到資料庫sysdba使用者,將資料泵檔案目錄關聯上 su - oracle sqlplus /nolog conn / as sysdba create or replace directory db_backup as '/data/db_backup'; grant read,write on directory db_backup to userdba;1.3將指令碼放入/etc/cron.d 並賦予指令碼可執行許可權
1.4 日誌報錯
1.4.1日誌中可能會報錯
圖摘自網際網路,我確實也遇見了~,不是運維只能邊走邊百度,摸著黑一步一步淌,成功了記錄下來 錯誤原因:這個檔案在Windows 下編輯過,在Windows下每一行結尾是\n\r,而Linux下則是\n,所以才會有 多出來的\r。 解決方案:使用指令sed -i 's/\r$//' xxxxxxx.sh,上面的指令會把1.4.2日誌中可能會報錯
ORA-39002: invalid operation ORA-39070: Unable to open the log file. ORA-29283: invalid file operation ORA-06512: at "SYS.UTL_FILE", line 536 ORA-29283: invalid file operation 錯誤原因:1、對存放dmp檔案或log檔案的路徑不存在,或者沒有許可權,2、對dmp檔案沒有許可權 解決方案:未解決,我直接刪除了expdp 命令時需要日誌的引數,不要日誌匯出,繞開了該問題1.5成功!
有問題可以評論留言!
心之何如,有似萬丈迷津,遙亙千里,其中並無舟子可以渡人,除了自渡,他人愛莫能助。