【Shell】20天學會shell腳本命令(4)用shell腳本編寫Oracle數據庫備份腳本

一、問題

1.1、環境
電腦環境:Windows 10;
數據庫環境:Oracle 11g;
JDK環境: Jdk1.8;
Docker版本:Server Version: 19.03.3
1.2、問題
如何利用shell腳本編寫Oracle數據庫備份腳本呢?
本文原文地址:51CTO博客

二、解答

2.1、第1版;
初始版本的shell

#!/bin/bash
#auto backup oracle
#define PATH 定義路徑變量
echo "----------數據庫備份開始----------"
echo "----------開始準備環境變量----------"
export ORACLE_BASE=C:/softWareInstalled/oracle
export ORACLE_HOME=$ORACLE_BASE/oracleInstalled/product/11.2.0TZC/dbhome_1
export PATH=$PATH:$ORACLE_HOME/bin:.
export ORACLE_SID=PETS
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
CURDATE=$(date '+%Y%m%d%H%M%S')
echo "----------當前系統系統日期爲=[$CURDATE]----------"
backup_directory=/opt/backup/
echo "----------備份目錄爲=[$backup_directory]----------"
data_file_prefix=pets
BACKUP_FILE=$backup_directory/pets$CURDATE.dmp

delete_prev_month_data_file(){
	echo "----------開始刪除5天前的數據----------"
	premonth=$(date -d"5 days ago"  '+%Y%m%d')
	rm -rf $backup_directory/$data_file_prefix$premonth* || true
	echo "----------刪除5天前的記錄完畢----------"
}

echo "----------開始備份當日=[$CURDATE]數據----------"
exp pets/pets@PETS FILE=$BACKUP_FILE owner='pets'
echo "----------備份完畢!----------"
delte_prev_month_data_file
echo"----------刪除5天前的歷史數據完畢----------"
exit 0

#Use oracle dump backup 使用備份數據庫
/usr/bin/my

運行後的結果截圖:
在這裏插入圖片描述
在搜索了【Message 206 not found;】報錯之後,【僅次於狼的博客】表示:這是由於系統沒有找到ORACLE_HOME導致;但是看上面的代碼,我們命名已經設置了ORACLE_HOME啊,後來想明白了,我用的是Docker,Docker的C盤不是這麼寫的,於是在命令行輸入:

pwd

查看當前路徑爲:
/c/softWareInstalled/Docker Toolbox/test/shell ;所以,我們要把【C:/】改成【/c/】;運行截圖如下:
在這裏插入圖片描述
還是老問題,還是沒有找到ORACLE_HOME;接下來,我做兩個方面的操作:
1、將關鍵的路徑都打印出來;
2、查找oracle目錄下的路徑,發現:
在這裏插入圖片描述
我自己目錄下的BIN是大寫的。。。。。。
修改完執行:
在這裏插入圖片描述
然後再命令行跳到日誌中打印的ORACLE_HOME目錄:

cd /c/softWareInstalled/oracle/oracleInstalled/product/11.2.0TZC/dbhome_1 

在這裏插入圖片描述
原來問題出在這裏;再對比了一下,果然是路徑寫錯了;修改後運行:
在這裏插入圖片描述
這裏說,無法打開C盤下的Program.DMP來寫入:可能是寫入權限不夠;因爲我電腦只有C盤,好多目錄不然寫;正當我準備修改文件時,發現上圖中大於號後面是讓我輸入東西的,後來輸入了一個y,可以導出了:
在這裏插入圖片描述
結果,在我當前目錄下就出現了一個這個文件:
在這裏插入圖片描述
很明顯,這就是我要備份的數據庫DMP文件;所以接下來如果要完善它,就需要讓他備份到可以寫入的目錄,而不是每次都要我手動授權才備份;於是,我修改了備份的路徑;再次執行,bingo,成功!!!
在這裏插入圖片描述
桌面上就出現了我需要備份的目錄:
在這裏插入圖片描述
2.2、定時任務
crontab -e

0 5 * * * /opt/app/oracle/bin/backup.sh
0 1 * * * /opt/backup/bin/backup_rfile.sh

這裏的cron表達式只支持,分時日月周;跟完整的表達式相比,缺少了秒和年;

第一個*表示分鐘 每小時的第幾分鐘執行 0-59

第二個*表示小時 每天的第幾個小時執行 0-23

第三個*表示日期 每月的第幾天執行 1-31

第四個*表示月曆 每年的第幾個月執行 1-12

第五個*表示星期 每週的第幾天執行 0-6

本篇說明內容完畢;
附錄:最終版本的shell腳本:

#!/bin/bash
#auto backup oracle
#define PATH 定義路徑變量
echo "----------數據庫備份開始----------"
echo "----------開始準備環境變量----------"
export ORACLE_BASE=/c/softWareInstalled/oracle/oracle
export ORACLE_HOME=$ORACLE_BASE/oracleInstalled/product/11.2.0TZC/dbhome_1
echo "----------ORACLE_HOME=[$ORACLE_HOME]----------"

export PATH=$PATH:$ORACLE_HOME/BIN:.
#echo "----------PATH=[$PATH]----------"

export ORACLE_SID=PETS
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
CURDATE=$(date '+%Y%m%d%H%M%S')
echo "----------當前系統系統日期爲=[$CURDATE]----------"
backup_directory=/c/Users/Auther/Desktop/bak
echo "----------備份目錄爲=[$backup_directory]----------"
data_file_prefix=pets
BACKUP_FILE=$backup_directory/pets$CURDATE.dmp

delete_prev_month_data_file(){
	echo "----------開始刪除5天前的數據----------"
	premonth=$(date -d"5 days ago"  '+%Y%m%d')
	rm -rf $backup_directory/$data_file_prefix$premonth* || true
	echo "----------刪除5天前的記錄完畢----------"
}

echo "----------開始備份當日=[$CURDATE]數據----------"
exp pets/pets@ORCL FILE=$BACKUP_FILE owner='pets'
echo "----------備份完畢!----------"
delte_prev_month_data_file
echo"----------刪除5天前的歷史數據完畢----------"
exit 0

#Use oracle dump backup 使用備份數據庫
/usr/bin/my

三、總結

歡迎關注我的
CSDN博客: https://blog.csdn.net/River_Continent
微信公衆號:幕橋社區
在這裏插入圖片描述
知乎:張牧野, https://www.zhihu.com/people/zhang-mu-ye-37-76/activities
簡書: https://www.jianshu.com/u/02c0096cbfd3

發佈了348 篇原創文章 · 獲贊 202 · 訪問量 83萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章