1. 程式人生 > 其它 >linux 定時自動備份oracle資料庫

linux 定時自動備份oracle資料庫

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 exit

1.1其中的問題

首先指令碼需要各種環境變數的獲取 登入到oracle使用者執行以下命令: cat ~/.bash_profile 將用到的直接複製進去就好了

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 並賦予指令碼可執行許可權

輸入 crontab -e 進入cron表示式執行指令碼程式碼編輯介面 三個分別為每分鐘執行,每分鐘執行,每日凌晨1點執行 linux的cron表示式須要以下的規則: 當你編寫完畢出現上圖所示提示資訊說明你編寫的表示式有誤,輸入y重新編寫 修改成功後會提示如下資訊 此時可以執行 service crond restart 重啟crond服務檢驗自己的指令碼 我的日誌目錄是在 cd /var/log/cron 這個下面 直接執行 tail -f cron 檢視日誌

1.4 日誌報錯

1.4.1日誌中可能會報錯

圖摘自網際網路,我確實也遇見了~,不是運維只能邊走邊百度,摸著黑一步一步淌,成功了記錄下來 錯誤原因:這個檔案在Windows 下編輯過,在Windows下每一行結尾是\n\r,而Linux下則是\n,所以才會有 多出來的\r。 解決方案:使用指令sed -i 's/\r$//' xxxxxxx.sh,上面的指令會把
xxxxxxx.sh
中的\r 替換成空白!

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成功!

有問題可以評論留言!

心之何如,有似萬丈迷津,遙亙千里,其中並無舟子可以渡人,除了自渡,他人愛莫能助。